【发布时间】:2020-04-24 08:26:53
【问题描述】:
所以我有这个 HIVE 查询:
SELECT p.id
FROM posts p JOIN
comments c ON c.postid = p.id JOIN
users u ON u.id = p.owneruserid JOIN
badges b ON b.userid = u.id CROSS JOIN
postlinks l
WHERE l.relatedpostid > p.id
AND u.upvotes IN (SELECT MAX(upvotes) AS uv FROM users uu WHERE uu.creationdate > p.creationdate);
它给了我这个错误:
编译语句时出错:FAILED: SemanticException [Error 10249]:第 21:58 行不受支持的子查询表达式“创建日期”: SubQuery 表达式指的是 Parent 和 SubQuery 表达式,并且 不是有效的连接条件。
但我没有看到我的 SubQuery 表达式如何同时引用父查询和 SubQuery?!?
我专门使用user uu 将user u 与父查询区分开来,在我的情况下,p.creationdate 必须与父查询相关。
正如post 中所述 HIVE 在子查询方面有一些限制:
- 这些子查询仅在表达式的右侧受支持。
- IN/NOT IN 子查询只能选择一个列。
- EXISTS/NOT EXISTS 必须有一个或多个相关谓词。
- 仅在子查询的 WHERE 子句中支持对父查询的引用。
但我看不出我是如何打破这些限制的。
我做错了什么?
感谢任何帮助。
编辑:
使用的数据是stackexchange数据的摘录。 所以帖子指的是stackexchange帖子等。
表格:
徽章(id,class,date,name,tagbased,userid)
cmets(id,creationdate,postid,score,text,userdisplayname,userid)
postlinks(id,creationdate,linktypeid,postid,relatedpostid)
帖子(id、acceptedanswerid、answercount、body、closeddate、commentcount、communityowneddate、creationdate、favoritecount、lastactivitydate、lasteditdate、lasteditordisplayname、lasteditoruserid、owner displayname、owneruserid、parentid、posttypeid、score、tags、标题,观看次数)
标签(id、count、excerptpostid、tagname、wikipostid)
用户(id、aboutme、accountid、创建日期、显示名称、downvotes、lastaccessdate、位置、profileimageurl、reputation、upvotes、views、websiteurl)
投票(id,bountyamount,creationdate,postid,userid,votetypeid)
我主要对如何写作感兴趣
SELECT p.id FROM posts p JOIN users u ON u.id = p.owneruserid
WHERE u.upvotes IN
(SELECT MAX(upvotes) FROM users uu WHERE uu.creationdate > p.creationdate)
这样它就不会给我这个错误。
【问题讨论】:
-
我认为这与我的问题无关