Массив разделен в Улей - PullRequest
       1

Массив разделен в Улей

0 голосов
/ 23 октября 2018

У меня есть таблица кустов "my_table" с массивом <bigint> column рекомендует_ids

базовых данных:

user_id|recommended_ids                                                                                   
1111198|[179995, 11186, 553248631043262469, 601906, 178276, 602901, 180032, 180016, 178286, 553248632557170387]
11|[178286655, 5532486]

Мне нужен вывод, подобный этому (первые 5 рекомендуемые_идиды как 5 столбцов,оно также может быть меньше 5)

user_id col_1     col_2   col_3              col_4  col_5
1111198 179995    11186   553248631043262469 601906 178276
11      178286655 5532486 

Я делаю это, как показано ниже

select
user_id
,split(recommended_ids,",")[0] as col_1
,split(recommended_ids,",")[1] as col_2
,split(recommended_ids,",")[2] as col_3
,split(recommended_ids,",")[3] as col_4
,split(recommended_ids,",")[4] as col_5
from my_table

Но получается ошибка ниже

FAILED: ClassCastException org.apache.hadoop.hive.serde2.objectinspector.StandardListObjectInspector не может быть приведен к org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector

1 Ответ

0 голосов
/ 23 октября 2018

Поскольку столбец уже равен array, вы можете просто получить элементы по индексам.Нет split необходимо.

select
user_id
,recommended_ids[0] as col_1
,recommended_ids[1] as col_2
,recommended_ids[2] as col_3
,recommended_ids[3] as col_4
,recommended_ids[4] as col_5
from my_table
where size(recommended_ids) >= 5 --to filter for array lengths >= 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...