我在HUE的Beeswax查询编辑器中尝试了以下查询:

SET MAXDATE=(SELECT MAX(DATA_DAY) FROM DB1.DESTINATION_TABLE);

SELECT COUNT(*) FROM DB2.SOURCE_TABLE

WHERE YEAR(DATA_DAY) >= '2015'
AND DATA_DAY > ${HIVECONF:MAXDATE};

此查询将不会运行,并产生以下错误消息:



有什么问题的建议吗?我不明白KW_ROLE消息的含义。

我来自SQL Server,并且只会在SQL Server中运行以下命令,但是正在尝试找到功能相同的Hadoop / Hive。
SELECT COUNT(*) FROM DB2.SOURCE_TABLE

WHERE YEAR(DATA_DAY) >= '2015'

AND DATA_DAY > (SELECT MAX(DATA_DAY) FROM DB1.DESTINATION_TABLE)

最佳答案

据我所知,hive也支持以下语法。

SELECT COUNT(*) FROM DB2.SOURCE_TABLE a

JOIN

(SELECT MAX(DATA_DAY) AS max_date FROM DB1.DESTINATION_TABLE) b

WHERE YEAR(a.DATA_DAY) >= '2015'

AND a.DATA_DAY > b.max_date;

但是,如果DB1.DESTINATION_TABLE上有一堆数据,那不是一个好的实现。

在这种情况下,每个查询将在SELECT MAX(DATA_DAY) FROM DB1.DESTINATION_TABLE中分配大量子查询任务。

如果可能,您可以将SELECT MAX(DATA_DAY) FROM DB1.DESTINATION_TABLE结果存储在另一个表中,也许是Max_table

然后SQL将是这样的:
SELECT COUNT(*) FROM DB2.SOURCE_TABLE

JOIN Max_table

WHERE YEAR(DB2.SOURCE_TABLE.DATA_DAY) >= '2015' and

DB2.SOURCE_TABLE.DATA_DAY > (Max_table.DATA_DAY)

关于hadoop - Hadoop-在查询中声明变量时出现错误消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32750361/

10-12 13:53
查看更多