SQL в HiveQL конвертация - PullRequest
       9

SQL в HiveQL конвертация

0 голосов
/ 23 апреля 2020

Итак, у меня есть запрос SQL, и я пытаюсь преобразовать его, чтобы он мог работать на HiveQL 2.1.1.

SELECT p.id FROM page p, comments c, users u,

WHERE c.commentid= p.id 
AND u.id = p.creatorid 
AND u.upvotes IN (
    SELECT MAX(upvotes)
    FROM users u WHERE u.date > p.date
)
AND EXISTS (
    SELECT 1 FROM links l WHERE l.relid > p.id
)

Это не работает на Hive QL, так как более 1 подзапроса (который не поддерживается)

EXISTS или IN замены с SQL на Hive SQL выполняются следующим образом:

WHERE A.aid IN (SELECT bid FROM B...)

можно заменить by:

A LEFT SEMI JOIN B ON aid=bid

Но я не могу придумать способ сделать это с помощью дополнительной функции MAX () .

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Я не уверен, что должен делать upvotes logi c. links logi c прост в обращении. Улей может справиться с этим:

SELECT p.id
FROM page p JOIN
     comments c
     ON c.commentid = p.id JOIN
     users u
     ON u.id = p.creatorid CROSS JOIN
     (SELECT MAX(l.relid) as max_relid
      FROM links l
     ) l
WHERE l.max_relid > p.id AND
      u.upvotes IN (SELECT MAX(upvotes)
                    FROM users u
                    WHERE u.date > p.date
                   );
0 голосов
/ 23 апреля 2020

Использовать стандартный синтаксис соединения вместо запятой:

SELECT p.id 
FROM page p INNER JOIN
     comments c
     ON c.commentid= p.id INNER JOIN
     users u
     ON u.id = p.creatorid INNER JOIN
     links l 
     ON l.relid > p.id 
WHERE u.upvotes IN (SELECT MAX(upvotes)
                    FROM users u 
                    WHERE u.date > p.date
                   );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...