2013-01-25 16 views
8

ハイブで地図タイプを定義しようとしています。 Hive Manualによれば、間違いなくマップタイプですが、残念ながらそれを使用する方法に関する例はありません。 :-(ハイブのマップタイプ変数

と仮定、私は次の列を持つ(ユーザー)テーブルを持っている:。

Name  Ph CategoryName 

この「カテゴリ名」列が値の特定のセットを持っている今、私は区分に区分名をマッピングするハッシュテーブルを作成したいです。私はを行うと

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

    は、私は2つの質問を持っている:私はやってみました私はそれが1として値をプリントアウトするだろうと思った。しかし、私は 取得「$ {hivevarを:nameToID [ 『A』]は}未定義です」

  2. 私は私が何か

  3. select name, ph, ${nameToID[CategoryName]} from users、のように言うことができるかわかりません

これらについてお知らせください。 ありがとう!

答えて

18

のは、あなたが以下の表を持っていると仮定しましょう:

マップ欄へのアクセス
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 

ハイブ変数を使用して同等の:

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 

これは、ハイブ0.9上で動作します.0

+0

ありがとう返信Lorandのために。私はちょうど我々のノード上のハイブバージョンをチェックし、残念ながらそれは0.8.1.6です。だから私はここで運が悪いと思う。あなたのお手伝いをしてくれてありがとうございます。 – test123

+0

それは0.8.1でも動作します! –

+0

こんにちはロラン、ここに私が試しているものがあります: 'ハイブ>ハイブヴァールを設定:nameToID = map(" t "、" 2 "、" c "、" 1 "); ' hive> $ {nameToID} ["t"]; ' ' $ {nameToID} ["t"]は未定義です – test123