2017-04-17 5 views
0

私は以下のように、group1で非集約テーブルのkey1とkey2の標準列を実行しています。しかし、私は、各テーブルに条件がどこで結合されているかに基づいて定数型の列を追加しています。ハイブで一定の列にグループ化することはできますか?

CREATE TABLE IF NOT EXISTS T_FINAL AS SELECT DISTINCT union_tbles.key1 AS key1, union_tbles.key2 AS key2, union_tbles.cnt AS cnt, union_tbles.type AS type FROM (
SELECT key1 AS key1, key2 AS key2, COUNT(val) AS cnt, 'x1' AS type FROM T_SUB1 WHERE key1 IN ('X1') GROUP BY key1, key2 
UNION ALL 
SELECT key1 AS key1, key2 AS key2, COUNT(val) AS cnt, 'x2' AS type FROM T_SUB1 WHERE key1 IN ('X2') GROUP BY key1, key2 
) union_tbles 

以下のように定数欄タイプをグループバイ欄として追加することはできますか? グループバイナリで定数カラムタイプを追加しようとすると、Hiveに無効なカラムエイリアスエラーが発生します。どのようにHiveでそれを行うための任意の提案?

CREATE TABLE IF NOT EXISTS T_FINAL AS SELECT DISTINCT union_tbles.key1 AS key1, union_tbles.key2 AS key2, union_tbles.cnt AS cnt, union_tbles.type AS type FROM (
SELECT key1 AS key1, key2 AS key2, COUNT(val) AS cnt, 'x1' AS type FROM T_SUB1 WHERE key1 IN ('X1') GROUP BY key1, key2, type 
UNION ALL 
SELECT key1 AS key1, key2 AS key2, COUNT(val) AS cnt, 'x2' AS type FROM T_SUB1 WHERE key1 IN ('X2') GROUP BY key1, key2, type 
) union_tbles 
+0

"DISTINCT SELECT"? –

+0

そしてなぜ「UNION ALL」が最初の理由ですか? –

+0

私は一連のUNIONでJOINを実行しています。 SELECT DISTINCT(... UNION ALL ... UNION ALL ...など)とSELECT FROM(... UNION DISTINCT ... UNION DISTINCT)の2つの方法で実行しました。最初の方法では、仕事の数は15で、2番目の方法では25でした.UNION DISTINCTを追加するだけで、仕事の数が大幅に増えました。そして、それぞれの仕事は9068マッパーと1009リデューサーを使用しています。だから、それが取っている時間は非常に高いです。そこで私は仕事の数を減らしたいと思っていました。 – somnathchakrabarti

答えて

0

ハイブは、GROUP BY句のエイリアスを認識しません。
いずれの場合でも、定数でグループ化する必要は絶対にありません。
定数を選択するには、GROUP BY句に定数を入れる必要はありません。

​​
+---+-----+-----+-------+------------+ 
| x | _c1 | _c2 | _c3 | _c4  | 
+---+-----+-----+-------+------------+ 
| 1 | 1 | 2 | Hello | 2017-04-17 | 
+---+-----+-----+-------+------------+ 
関連する問題