Это сложный вопрос.
Сначала возьмите Brickhouse банку с here
Тогда добавьте его в улье: add jar /path/to/jars/brickhouse-0.7.0-SNAPSHOT.jar;
Теперь создадим две функции мы будем usings:
CREATE TEMPORARY FUNCTION array_index AS 'brickhouse.udf.collect.ArrayIndexUDF';
CREATE TEMPORARY FUNCTION numeric_range AS 'brickhouse.udf.collect.NumericRange';
запрос будет:
select a, n as array_index, array_index(split(a,','),n) as value_from_Array from (select "abc#1,def#2,hij#3" a from dual union all select "abc#1,def#2,hij#3,zzz#4" a from dual) t1 lateral view numeric_range(length(a)-length(regexp_replace(a,',',''))+1) n1 as n
Разъяснения:
select "abc#1,def#2,hij#3" a from dual union all select "abc#1,def#2,hij#3,zzz#4" a from dual
ли просто выбрать некоторые тестовые данные, в вашем случае заменить это с вашим именем таблицы.
lateral view numeric_range(length(a)-length(regexp_replace(a,',',''))+1) n1 as n
numeric_range является UDTF, который возвращает таблицу для заданного диапазона, в данном случае, я просил диапазон от 0 (по умолчанию), а количество элементов в строке (рассчитываются как число запятых + 1)
Таким образом, каждая строка будет умножаться на количество элементов в данном столбце.
array_index(split(a,','),n)
Это так же, как с помощью split(a,',')[n]
но улей не поддерживает его.
Таким образом, мы получаем п-й элемент для каждой повторяющейся строки исходной строки в результате:
abc#1,def#2,hij#3,zzz#4 0 abc#1 abc#1,def#2,hij#3,zzz#4 1 def#2 abc#1,def#2,hij#3,zzz#4 2 hij#3 abc#1,def#2,hij#3,zzz#4 3 zzz#4 abc#1,def#2,hij#3 0 abc#1 abc#1,def#2,hij#3 1 def#2 abc#1,def#2,hij#3 2 hij#3
Если вы действительно хотите определенное количество элементов (скажем, 5), а затем просто использовать:
lateral view numeric_range(5) n1 as n
, что именно вы собираетесь делать с п элементов? вы хотите, чтобы каждый элемент находился в отдельной строке или в отдельном столбце? – dimamah
Я хочу, чтобы они были в отдельной строке, и я хочу, чтобы было статистическое отношение некоторого значения в первых n элементах. Предположим, у меня есть формат строки, такой как «abC# 1, def # 2, hij # 3» ... теперь, я хочу знать, каково соотношение №1 или №2 в первых трех элементах. –
отправил его в качестве ответа .. – dimamah