Выберите значения в квадратных скобках и кавычки в Hive - PullRequest
0 голосов
/ 19 февраля 2019

Я использовал следующий код для объединения результатов

SELECT 
COLLECT_LIST(col_name) AS my_col
FROM my_table

Это несколько достигает желаемого результата, выводится следующим образом:

["car","motorcycle","bus"]
["train","boat"]
["airplane","bicycle"]

Однако мне нужно удалить квадратскобки и кавычки перед всплытием в последующем бизнес-отчете.

Я пробовал различные итерации следующего безрезультатно:

regexp_extract(my_col,'\\[|\\]','')

Это выдает сообщение об ошибке

java.lang.Exception: org.apache.hive.service.cli.HiveSQLException: ошибка при компиляции оператора: FAILED: SemanticException [Ошибка 10014]: строка 6: 0 неверные аргументы '' '': нет подходящего метода для класса org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with (массив, строка, строка).Возможные варианты: FUNC (строка, строка) FUNC (строка, строка, int)

Как мне достичь желаемого результата ...

car, motorcycle
train, boat
airplane, bicycle 

Является ли функция regex_replace лучшим способом сделать это?

Наведение высоко ценится.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019
hive> with t1 as (select cast(1 as string) as col1 union  select cast(2 as string) as col1 union  select cast(3 as string) as col1) select collect_set(col1), concat_ws(',', collect_set(col1)) from t1;
OK
["1","2","3"]   1,2,3
Time taken: 95.27 seconds, Fetched: 1 row(s)

concat_ws принимает только массив строковых значений

Если количество элементов фиксировано, вы также можете использовать

hive> with t1 as (select cast(1 as string) as col1 union  select cast(2 as string) as col1 union  select cast(3 as string) as col1) select concat(collect_set(col1)[0], ',' ,collect_set(col1)[1], ',', collect_set(col1)[2]) from t1;
0 голосов
/ 19 февраля 2019

Используйте concat_ws для присоединения массива строк с самого начала:

SELECT concat_ws(', ', collect_set(col_name)) AS my_col FROM my_table
       ^ ---------------------------------- ^    

concat_ws более уместно, так как у вас есть массив строк, а не одинстрока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...