2014-08-31 2 views
-1

У меня возникла интересная проблема. У меня есть сценарий HIVE, который вызывает Python UDF, чтобы манипулировать некоторыми датами. Выход из Python - 6 столбцов, 3 - строки и 3 - массивы.Взорвать строку в HIVE

, например. print '%s\t%s\t%s\t%s\t%s\t%s\t%s' % (ID1, ID2, ID3, ARR1, ARR2, ARR3)

Вот строки из вывода моей питона UDF:

10161 10400511433810000  (0000010161, 10400511433810001) ["0011583180","0011583180","0011583180"]  ['2004-04-16', '2004-04-16', '2004-04-16']  ['2004-09-03', '2004-09-03', '2004-09-03']  

# ПРОБЛЕМА 1: Я использую %s, потому что я не могу найти способ, чтобы вернуть массивы улья образом что HIVE будет читать их как массивы.

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

insert overwrite table table2 
SELECT 
ID1, 
ID2, 
ID3, 
SPLIT(ARR1, '\\\t') as ARR1, 
SPLIT(ARR2, '\\\t') as ARR2, 
SPLIT(ARR3, '\\\t') as ARR3 
FROM table1 
LIMIT 10; 

# задачи2: Я получаю следующий вывод:

0000010167  10400514362740001  (0000010167, 10400514362740001) ["[\"0022136941\",\"0022315161\"]"]  ["['1900-01-01', '2007-05-01']"]  ["['1900-01-01', '2008-06-16']"]   

То, что я на самом деле нужно, это:

0000010167  10400514362740001  (0000010167, 10400514362740001)  0022136941  1900-01-01  1900-01-01 
0000010167  10400514362740001  (0000010167, 10400514362740001)  0022315161  2007-05-01  2008-06-16 

ответ

0

В моей идее, вы получили горизонтальный стол , но вам нужна вертикальная таблица. Я не знаю Как использовать Уль, чтобы решить эту проблему, поэтому я решил ее с помощью mapreduce. Да, это очень легко с mapreduce в этой ситуации. Это пример на китайском, но вам просто нужно понять код Java. mapreduce example.

0

Возможно, вы захотите взглянуть на Exhibit, прототип UUFs UUF/UDFF, которые выполняют вложенные SQL-запросы в строках и связывают это с Lateral view.

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