11

ハイブでマップ タイプを定義しようとして問題が発生しています。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

4

1 に答える 1

28

次の表があるとします。

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

于 2013-01-29T12:20:09.683 に答える