我正在尝试在 Hive 中执行以下查询:
SELECT
regexp_replace('2016-08-05_11:29:46', '\\_', ' ') as tmstmp,
distinct(P.name)
FROM table P;
Run Code Online (Sandbox Code Playgroud)
它抛出一个异常,说无法识别选择目标中“不同”“(”“P”附近的输入。
当我运行交换列的查询时,如下所示:
SELECT
distinct(P.name),
regexp_replace('2016-08-05_11:29:46', '\\_', ' ') as tmstmp
FROM table P;
Run Code Online (Sandbox Code Playgroud)
效果很好。对这个问题有什么想法吗?
据我所知,这是 hive 在 select 语法中施加的限制。根据 hive 语言手册中的 Select 语法,DISTINCT 应按顺序排在第一位,然后是其他表达式。
参考: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select
我猜想 DISTINCT 的原因是行级操作(即使它被指定为列的函数调用),特别是在 hive 中它将是一个 mapreduce 操作。
在 SQL ANSI 标准支持的数据库引擎(如 Mysql)中也可以观察到类似的行为。