Hive分区列似乎阻止“选择不同”

时间:2012-10-18 10:30:36

标签: distinct hive partitioning hiveql

我在Hive中创建了一个表格,如下所示:

CREATE TABLE application_path
    (userId STRING, sessId BIGINT, accesstime BIGINT, actionId STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '#'
STORED AS TEXTFILE;

在此表上运行查询:

SELECT DISTINCT userId FROM application_path;

给出了预期的结果:

user1@domain.com
user2@domain.com
user3@domain.com
...

然后我更改了声明以添加分区:

CREATE TABLE application_path
    (sessId BIGINT, accesstime BIGINT, actionId STRING)
PARTITIONED BY(userId STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '#'
STORED AS TEXTFILE;

现在查询SELECT DISTINCT userId ...像以前一样运行秒,但最终会返回任何内容。

我刚刚注意到语法:

SHOW PARTITIONS application_path;

但我想知道这是否是从分区列获取唯一(不同)值的唯一方法。 SHOW PARTITION的输出甚至不能完全取代SELECT DISTINCT的内容,因为列名前缀为每一行:

hive> show partitions application_path;            
OK
userid=user1@domain.com
userid=user2@domain.com
userid=user3@domain.com
...

对我来说很奇怪的是usedId可以在GROUP BY中与其他列一起使用,例如:

SELECT userId, sessId FROM application_path GROUP BY userId, sessId;

但确实会返回任何内容:

SELECT userId FROM application_path GROUP BY userId;

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,它将在0.10中修复 https://issues.apache.org/jira/browse/HIVE-2955