我在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};
此查询不会运行并产生以下错误消息:
失败:ParseException第1:4行在'MAXDATE'附近的'MAXDATE'处缺少KW_ROLE第1行第11行在'='''附近缺少EOF
有关问题的建议吗?我不明白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)
答案 0 :(得分:2)
您尝试过的查询包含语法问题。 HiveConf应该用单引号括起来。
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}';
答案 1 :(得分:0)
据我所知,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)