HIVE:无法识别“不同”“(”附近的输入

Nee*_*tha 1 hive

我正在尝试在 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)

效果很好。对这个问题有什么想法吗?

Adi*_*tya 5

据我所知,这是 hive 在 select 语法中施加的限制。根据 hive 语言手册中的 Select 语法,DISTINCT 应​​按顺序排在第一位,然后是其他表达式。

参考: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select

我猜想 DISTINCT 的原因是行级操作(即使它被指定为列的函数调用),特别是在 hive 中它将是一个 mapreduce 操作。

在 SQL ANSI 标准支持的数据库引擎(如 Mysql)中也可以观察到类似的行为。