Hadoop-在查询中声明变量时出现错误消息

Hadoop-在查询中声明变量时出现错误消息,hadoop,hive,Hadoop,Hive,我在HUE的蜂蜡查询编辑器中尝试了以下查询: 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行在“MAXDAT

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

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\U角色,第1:11行在“MAXDATE”附近的“=”缺少EOF

有什么问题的建议吗?我不明白KW_的角色信息是什么意思

我来自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_表上存在数据束,则这不是一个好的实现

在这种情况下,每个查询将在SELECT MAXDATA_DAY FROM DB1.DESTINGE_表中执行大量子查询

如果可能的话,您可以将SELECT MAXDATA_DAY FROM DB1.DETATION_表结果存储在另一个表中,可能是Max_表

那么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)

您尝试过的查询包含语法问题。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}';

无论是否使用引号,错误消息都是相同的。错误消息表明它没有超过第一行设置。。。由于KW_角色问题,因此带/不带引号不会导致此问题。是否确定配置单元支持集MAXDATE=从DB1.DESTINATION_TABLE;中选择MAXDATA_DAY@非中心:您如何执行上述命令?通过配置单元终端还是通过任何shell脚本?因为它对我有效。你在查询上面添加了任何参数或注释吗?@Nithiyanandhan-我尝试通过HUE Beeswax查询编辑器运行SET查询。我尝试了使用和不使用hive.execution.engine=tez的设置。每次尝试运行查询时,我都会收到相同的缺少KW_角色错误消息。我怀疑问题不在于查询的语法,因为我也读到SET语句应该可以工作……这就是我最初尝试的原因。相反,我认为问题与KW_角色以及错误消息的含义有关。我无法找到有关此错误消息KW_角色的任何信息。尝试了第一个选项,尽管它不是最佳选项。获取与查询最后一行相关的以下错误:无法识别表达式规范中“SELECT”“MAX”附近的输入。下一步,将尝试创建单独表的选项。希望这能起作用,尽管如果variable SET命令能够正常工作,这将是一个理想的选择。好吧,通过一些测试更新了第一个选项。现在,与选项2相比,它是一个更好的解决方案@非中心谢谢你。第二个选项起作用,尽管它确实需要创建一个单独的单记录表。我现在正在尝试修改后的第一个选项。当你说这是一个更好的解决方案时,你的意思是它的性能更好/更优化?它不需要创建单独的表这一事实很好。