2013-01-25 14 views
8

Ho problemi a cercare di definire il tipo di mappa nell'alveare. Secondo lo Hive Manual c'è sicuramente un tipo di mappa, purtroppo non ci sono esempi su come usarlo. :-(Variabile di tipo di mappa nell'hive

Supponiamo, ho una tabella (utenti) con i seguenti colonne:.

Name  Ph CategoryName 

Questa colonna "CategoryName" è specifico insieme di valori Ora voglio creare una tabella hash che mappa CategoryName a IDCategoria . ho provato a fare:

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

ho 2 domande:

  1. Quando faccio 0.123.ho pensato che sarebbe stampare valore come 1. Ma ho "$ {hivevar: nameToID [ 'A']} è indefinito"

  2. Non sono sicuro di come posso dire qualcosa di simile, select name, ph, ${nameToID[CategoryName]} from users

Per favore fatemi sapere di questi. Grazie!

risposta

18

Supponiamo di avere la seguente tabella:

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} 

Accesso alla colonna di mappa:

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

Un equivalente utilizzando una variabile 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 

Questo funziona su Hive 0.9 .0

+0

Grazie s per la risposta Lorand. Ho appena controllato la versione hive sul nostro nodo e sfortunatamente è 0.8.1.6. Quindi penso di essere sfortunato qui. :-(Grazie comunque per il tuo aiuto! – test123

+0

Funziona anche su 0.8.1! –

+0

Ciao Lorand, ecco quello che sto provando: 'hive> set hivevar: nameToID = map (" t "," 2 "," c "," 1 ");' 'hive> set $ {nomeToID} [" t "];' '$ {nomeToID} [" t "] non definito' – test123