我正在尝试在Hive中执行以下查询:
SELECT
regexp_replace('2016-08-05_11:29:46', '\\_', ' ') as tmstmp,
distinct(P.name)
FROM table P;
它引发了一个例外,即无法识别“不同”附近的输入。 '('' P'在选择目标中。
当我运行查询时,交换列如:
SELECT
distinct(P.name),
regexp_replace('2016-08-05_11:29:46', '\\_', ' ') as tmstmp
FROM table P;
工作正常。关于这个问题的任何想法?
答案 0 :(得分:3)
据我所知,这是hive在select语法中强加的限制。 根据配置单元语言手册中的Select语法,DISTINCT应先按顺序排列,然后是其他表达式。
参考: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select
我猜DISTINCT的原因是行级操作(即使它被指定为列的函数调用),特别是在hive中它将是mapreduce操作。
在SQL ANSI标准支持的数据库引擎(如Mysql)中也可以观察到类似的行为。