Hiveでマップタイプを定義しようとして問題があります。 Hive Manual によると、マップタイプは間違いなくありますが、残念ながら、その使用例はありません。 :-(
次の列を持つテーブル(ユーザー)があるとします。
Name Ph CategoryName
この「CategoryName」列には、特定の値のセットがあります。次に、CategoryNameをCategoryIDにマップするハッシュテーブルを作成します。私はやってみました:
set hivevar:nameToID=map('A',1,'B',2);
2つの質問があります。
私がする時 set hivevar:${nameToID['A']}
値を1として出力すると思いましたが、「$ {hivevar:nameToID ['A']}が未定義です」と表示されます。
select name, ph, ${nameToID[CategoryName]} from users
次の表があるとします。
describe test;
name string
ph string
category map<string,int>
select * from test;
name ph category
Name1 ph1 {"type":1000,"color":200,"shape":610}
Name2 ph2 {"type":2000,"color":200,"shape":150}
Name3 ph3 {"type":3000,"color":700,"shape":167}
マップ列へのアクセス:
select ph, category["type"], category["color"] from test;
ph1 1000 200
ph2 2000 200
ph3 3000 700
Hive変数を使用する同等のもの:
set hivevar:nameToID=
map("t", category["type"], "c", category["color"], "s", category["shape"]);
select ph, ${nameToID}["t"], ${nameToID}["c"] from test;
ph1 1000 200
ph2 2000 200
ph3 3000 700
これはHive 0.9.0で動作します