HIVE SubQuery表达式指的是Parent和SubQuery表达式。

问题描述 投票:0回答:1

所以我有这个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]: line 21:58 Unsupported SubQuery Expression 'createdate': SubQuery表达式同时指向Parent和SubQuery表达式,并且不是一个有效的连接条件。

但是我没有看到我的SubQuery表达式怎么会同时引用父和子Query呢!?

我特别使用了 user uu 以区别 user u 和p.createdate从父查询中获取,并且p.createdate 必须 在我的例子中,与父查询有关。

正如本篇所述 岗位 alreadyHIVE在子查询方面有一些限制。

  1. 这些子查询只支持在表达式的右侧。
  2. INNOT IN子查询只能选择单列。
  3. EXISTSNOT EXISTS必须有一个或多个相关的谓词。
  4. 只有在子查询的WHERE子句中才支持对父查询的引用。

但是我没有看到我是如何打破这些限制的。

我到底做错了什么?

感谢任何帮助。

EDIT:

所使用的数据,是stackexchange数据的摘录。所以帖子指的是stackexchange的帖子等等。

表。

徽章(id,class,date,name,tagbased,userid)

意见(id,createdate,postid,score,text,userdisplayname,userid)

帖子链接(id,createdate,linktypeid,postid,relatedpostid)

员额(id,acceptedanswerid,answerercount,body,closeddate,commentcount,communityowneddate,createdate,favoritecount,lastactivitydate,lasteditdate,lasteditordisplayname,lasteditoruserid,ownerdisplayname,owneruserid,parentid,posttypeid,score,tags,title,viewcount)

标签(id,count,excerptpostid,tagname,wikipostid)

用户(id,aboutme,accountid,createdate,displayname,downvotes,lastaccessdate,location,profileimageurl,reputation,upvotes,view,websiteurl)

投票(id,bountyamount,createdate,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) 

这样它就不会给我这个错误。

sql hive subquery hiveql
1个回答
0
投票

如果你想知道限制列表,你需要看一看 文件. 相关的限制是。

引用父查询中某一列的子查询谓词必须使用equals(=)谓词操作符。

子查询中没有平等子句。 正如我在原来的问题中提到的,你应该提出一个问题,并附上样本数据、期望的结果以及对代码应该做什么的解释。

在你的查询中,两个麻烦的比较都是非常不寻常的。 正常情况下,这种比较会有一个平等比较。 这个查询正在做 东西也许有更好的方法来完成你想要的东西。 只是不清楚自己想要什么。

© www.soinside.com 2019 - 2024. All rights reserved.