web-dev-qa-db-ja.com

ハイブのマップタイプ変数

Hiveでマップタイプを定義しようとして問題があります。 Hive Manual によると、マップタイプは間違いなくありますが、残念ながら、その使用例はありません。 :-(

次の列を持つテーブル(ユーザー)があるとします。

Name     Ph    CategoryName

この「CategoryName」列には、特定の値のセットがあります。次に、CategoryNameをCategoryIDにマップするハッシュテーブルを作成します。私はやってみました:

set hivevar:nameToID=map('A',1,'B',2); 

2つの質問があります。

  1. 私がする時 set hivevar:${nameToID['A']}値を1として出力すると思いましたが、「$ {hivevar:nameToID ['A']}が未定義です」と表示されます。

  2. select name, ph, ${nameToID[CategoryName]} from users

9
test123

次の表があるとします。

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で動作します

25
Lorand Bendig