[英]SQL to HiveQL conversion
我有這個 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 個子查詢(不支持)
從 SQL 到 Hive SQL 的EXISTS
或IN
替換是這樣完成的:
WHERE A.aid IN (SELECT bid FROM B...)
可以替換為:
A LEFT SEMI JOIN B ON aid=bid
但我無法想出一種方法來使用額外的MAX() function。
使用標准連接語法而不是逗號分隔:
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
);
我不確定upvotes
邏輯應該做什么。 links
邏輯很容易處理。 Hive 可以處理這個:
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
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.