У меня возникла интересная проблема. У меня есть сценарий 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