Json — Сглаживание ключа и значений в улье

#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. Пожалуйста, добавьте другой вопрос с полным запросом, который вы использовали (т. Е. включая модификацию), полученной ошибкой, образцами данных для воспроизведения ошибки и, если возможно, трассировкой стека.