2014-11-12 4 views
1

Я пытаюсь создать таблицу в Hive, используя сложные типы данных.Проблема с сложным типом данных в Hive

Один из моих столбцов - это массив строк, а другой - массив карт.

После того, как я загрузил данные в таблицу, когда я пытаюсь запросить данные, я не получаю желаемого результата в третьем столбце, который представляет собой массив карт.

Ниже мой улей запрос:

Шаг 1:

create table transactiondb2(order_id int,billtype array<string>,paymenttype array<map<string,int>>)ROW FORMAT 
DELIMITED FIELDS TERMINATED BY '\t' 
COLLECTION ITEMS TERMINATED BY '|' 
MAP KEYS TERMINATED BY '#'; 

Шаг 2:

load data local inpath '/home/xyz/data.txt' overwrite into table transactiondb2; 

Шаг 3:

select * from transactiondb2; 

И мой выход, как следует:

OK

1 ["A","B"] [{"credit":null,"10":null},{"cash":null,"25":null},{"emi":null,"30":null}] 
2 ["C","D"] [{"credit":null,"157":null},{"cash":null,"45":null},{"emi":null,"35":null}] 
3 ["X","Y"] [{"credit":null,"25":null},{"cash":null,"38":null},{"emi":null,"50":null}] 
4 ["E","F"] [{"credit":null,"89":null},{"cash":null,"105":null},{"emi":null,"85":null}] 
5 ["Z","A"] [{"credit":null,"7":null},{"cash":null,"79":null},{"emi":null,"105":null}] 
6 ["D","Y"] [{"credit":null,"30":null},{"cash":null,"100":null},{"emi":null,"101":null}] 
7 ["A","Z"] [{"credit":null,"50":null},{"cash":null,"9":null},{"emi":null,"85":null}] 
8 ["B","Z"] [{"credit":null,"70":null},{"cash":null,"38":null},{"emi":null,"90":null}] 

И мой входной файл данных выглядит следующим образом:

1  A|B  credit#10|cash#25|emi#30 
2  C|D  credit#157|cash#45|emi#35 
3  X|Y  credit#25|cash#38|emi#50 
4  E|F  credit#89|cash#105|emi#85 
5  Z|A  credit#7|cash#79|emi#105 
6  D|Y  credit#30|cash#100|emi#101 
7  A|Z  credit#50|cash#9|emi#85 
8  B|Z  credit#70|cash#38|emi#90 

ответ

1

Я решил это сам.

Нам не нужно упомянуть массив карт явно по умолчанию он принимает значение от одной карты после того, как другого

0

Создайте таблицу, как показано ниже, и загрузите данные, то вы получите желаемый результат.

create table complex(id int,bill array<string>,paytype map<string,int>) 
ROW FORMAT 
DELIMITED FIELDS TERMINATED BY '\t' 
COLLECTION ITEMS TERMINATED BY '|' 
MAP KEYS TERMINATED BY '#'; 
+0

Разве это не то, что ОП уже делает? –

Смежные вопросы