Разбор JSON с использованием Snowflake SQL - PullRequest
0 голосов
/ 27 августа 2018

У меня есть объект JSON, который написан странным образом.

> {"custom": [ { "name": "addressIdNum", "valueNum": 12345678},  {
> "name": "cancelledDateAt", "valueAt": "2017-02-30T01:43:04.000Z" }] }

Не уверен, как разобрать что-то подобное. Ключами являются addressIdNum и cancelledDateAt, а значения - 12345678 и 2017-02-30T01: 43: 04.000Z соответственно.

Как мне разобрать это с помощью Snowflake SQL?

Спасибо за вашу помощь!

Лучший, Преет Райдео

1 Ответ

0 голосов
/ 27 августа 2018

Если вы вводите ВСЕГДА в этой форме (два элемента в массиве с одинаковыми полями в одном и том же элементе), вы можете объединить функцию PARSE_JSON и путь доступа .

Просто попробуйте это:

with input as (
  select parse_json(
    '{"custom": [ { "name": "addressIdNum", "valueNum": 12345678},  {"name": "cancelledDateAt", "valueAt": "2017-02-30T01:43:04.000Z" }] }') 
  as json) 
select json:custom[0].valueNum::integer, json:custom[1].valueAt::timestamp from input;
----------------------------------+-----------------------------------+
 JSON:CUSTOM[0].VALUENUM::INTEGER | JSON:CUSTOM[1].VALUEAT::TIMESTAMP |
----------------------------------+-----------------------------------+
 12345678                         | 2017-03-01 17:43:04               |
----------------------------------+-----------------------------------+

Однако, если структура ваших данных может отличаться (например, элементы в массиве могут быть в другом порядке), вероятно, лучше написать JavaScript UDF в Snowflake, чтобы преобразовать такие грязные данные во что-то более простое.

...