1

次のように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;
4

1 に答える 1

2

同じ問題が発生しました。0.10 で修正される予定です https://issues.apache.org/jira/browse/HIVE-2955

于 2012-11-01T10:08:30.643 に答える