Apache Drill: преобразование JSON в виде строки в объект JSON для извлечения каждого элемента - PullRequest
0 голосов
/ 04 мая 2018

У меня есть строка ниже в столбце в hive table, который я пытаюсь запросить, используя apache drill:

{ "cdrreasun": "52", "cdxscarc": "20150407161405", "cdrend": "20150407155201", "cdrdnrar.1un": "24321,70", "servlnqlp": "54.201.25.50", "мужчины ":" 42403" , "ха: lnqruup": "3", "cemcau": "120", "accuuncl": "21", "CDRC: 5" , "volcuca": "1.7"}

Хотите получить все значения для ключа cdrreasun, используя apache drill SQL .

Невозможно использовать FLATTEN в столбце, как написано Flatten does not work with inputs of non-list types.

Не может использовать KVGEN, так как он работает только с типом данных MAP.

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Я понял это, надеюсь, это будет полезно для других.

Мы должны сделать это в 3 шага, если тип данных имеет тип MAP:

KVGEN () -> FLATTEN () -> convert_from ()

Если это тип STRING, тогда функция KVGEN() не нужна.

SELECT ratinggrouplist
    ,t3.cdrlist3.cdrreason AS cdrreason
    ,t3.cdrlist3.cdrstart AS cdrstart
    ,t3.cdrlist3.cdrend AS cdrend
    ,t3.cdrlist3.cdrduration AS cdrduration
FROM (
    SELECT ratinggrouplist, convert_from(t2.cdrlist2.`element`, 'JSON') AS cdrlist3
    FROM (
        SELECT ratinggrouplist ,flatten(t1.cdrlist1.`value`) AS cdrlist2
        FROM (
            SELECT ratinggrouplist, kvgen(cdrlist) AS cdrlist1
            FROM dfs.tmp.SOME_TABLE
            ) AS t1
        ) AS t2
    ) AS t3;
0 голосов
/ 11 мая 2018

Drill имеет функцию convert_fromJSON, которая позволяет конвертировать из String в объект JSON. Подробнее об этой функции и примерах использования см. https://drill.apache.org/docs/data-type-conversion/#convert_to-and-convert_from

.

Для указанного вами примера вы можете запустить

convert_fromJSON(colWithJsonText)['cdrreasun']
...