2013-01-25 15 views
8

Mam problemy z próbą zdefiniowania typu mapy w gałęzi. Według Hive Manual zdecydowanie istnieje typ mapy, niestety nie ma żadnych przykładów, jak z niego korzystać. :-(Zmienna typu mapy w ulu

Przypuśćmy, że mam tabeli (użytkowników) z następującymi kolumnami:.

Name  Ph CategoryName 

Ten „CategoryName” kolumna ma specyficzny zbiór wartości Teraz chcę utworzyć hashtable który mapuje categoryname do CategoryID . próbowałem robić:

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

mam 2 pytania:

  1. Kiedy robię set hivevar:${nameToID['A']} Myślałem, że będzie drukować wartość jako 1. Ale pojawia „$ {hivevar: nameToID [«A»]} jest niezdefiniowana”

  2. nie jestem pewien, jak można powiedzieć coś takiego, select name, ph, ${nameToID[CategoryName]} from users

Proszę dać mi znać na ten temat. Dzięki!

Odpowiedz

18

Załóżmy masz poniższej tabeli:

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} 

Dostęp kolumnę mapie:

select ph, category["type"], category["color"] from test; 
ph1 1000 200 
ph2 2000 200 
ph3 3000 700 

Równoważny użyciu zmiennej 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 

Działa to na Hive 0,9 .0

+0

Dziękuję s za odpowiedź Lorand. Właśnie sprawdziłem wersję ula w naszym węźle i niestety jest to 0.8.1.6. Więc myślę, że nie mam tutaj szczęścia. :-(Thanks anyways za pomoc! – test123

+0

Działa również na 0.8.1! –

+0

Witam Lorand, oto co próbuję: 'hive> zestaw hivevar: nameToID = map (" t "," 2 "," c "," 1 ");' 'hive> zestaw $ {nameToID} [" t "];' '$ {nameToID} [" t "] jest niezdefiniowane' – test123

Powiązane problemy