#hive #hiveql
Вопрос:
В таблице-улье, имеющей значение столбца JSON записи как: {«XXX»: [«123″,»456″],»УУУ»: [«246″,»135»]} и идентификатор как ABC
Нужно выровнять его, как показано ниже в запросе Hive.
Клавиша | Ценность | ID |
---|---|---|
ХХХ | 123 | азбука |
ХХХ | 456 | азбука |
УУУ | 246 | азбука |
УУУ | 135 | азбука |
Ответ №1:
Следующие способы используются get_json_object
для извлечения ключей json перед использованием regexp_replace
и split
преобразования оставшихся значений в массивы. С помощью explode
и lateral views
из полученного подзапроса данные были извлечены. Полный воспроизводимый пример приведен ниже:
WITH input_df AS (
SELECT '{"XXX": ["123","456"],"YYY": ["246","135"]}' my_col
)
SELECT
t.key,
kv.kval as value
FROM (
SELECT
explode(map(
'XXX',
split(regexp_replace(get_json_object(my_col,'$.XXX'),'"|\[|\]',''),','),
'YYY',
split(regexp_replace(get_json_object(my_col,'$.YYY'),'"|\[|\]',''),',')
))
FROM
input_df
) t LATERAL VIEW explode(t.value) kv as kval
Вы можете использовать запрос ниже, если ваша таблица/представление имеет имя input_df
, а столбец json my_col
SELECT
t.key,
kv.kval as value
FROM (
SELECT
explode(map(
'XXX',
split(regexp_replace(get_json_object(my_col,'$.XXX'),'"|\[|\]',''),','),
'YYY',
split(regexp_replace(get_json_object(my_col,'$.YYY'),'"|\[|\]',''),',')
))
FROM
input_df
) t LATERAL VIEW explode(t.value) kv as kval
Ответ На Обновленный Вопрос 1:
SELECT
t.key,
kv.kval as value,
'ABC' as ID
FROM (
SELECT
explode(map(
'XXX',
split(regexp_replace(get_json_object(my_col,'$.XXX'),'"|\[|\]',''),','),
'YYY',
split(regexp_replace(get_json_object(my_col,'$.YYY'),'"|\[|\]',''),',')
))
FROM
input_df
) t LATERAL VIEW explode(t.value) kv as kval
Дайте мне знать, если это сработает для вас.
Комментарии:
1. Спасибо тебе, гордан, это работает. В результате требуется дополнительный идентификатор одного столбца. не могли бы вы соответствующим образом изменить запрос?
2. Ответ был обновлен. Пожалуйста, повысьте голос и отметьте ответ как принятый ответ, чтобы помочь другим пользователям S/O с аналогичным вопросом. Дайте мне знать, если это сработает для вас.
3. Мне не объяснили ясно. Идентификатор не является статическим столбцом , для следующей записи значение идентификатора может измениться как AAA. Как я должен этого достичь?
4. изменил запрос, он выдает ошибку. пожалуйста, помогите мне исправить это
5. Пожалуйста, добавьте другой вопрос с полным запросом, который вы использовали (т. Е. включая модификацию), полученной ошибкой, образцами данных для воспроизведения ошибки и, если возможно, трассировкой стека.