Суммирование значений из массива JSON в Snowflake - PullRequest
0 голосов
/ 27 августа 2018

У меня есть исходные данные, которые содержат следующий тип массива JSON:

[
  [
    "source 1",
    250    
  ],
  [
    "other source",
    58
  ],
  [
    "more stuff",
    42
  ],
  ...
]

Может быть 1..N пар строк и значений, подобных этому.Как можно сложить все значения вместе из этого JSON?

1 Ответ

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

Вы можете использовать FLATTEN , он создаст одну строку для каждого элемента входного массива.Затем вы можете получить доступ к номеру в этом элементе напрямую.

Представьте, что у вас есть эта таблица ввода:

create or replace table input as
select parse_json($$
[
  [
    "source 1",
    250    
  ],
  [
    "other source",
    58
  ],
  [
    "more stuff",
    42
  ]
]
$$) as json;

FLATTEN сделает это:

select index, value from input, table(flatten(json));
-------+-------------------+
 INDEX |       VALUE       |
-------+-------------------+
 0     | [                 |
       |   "source 1",     |
       |   250             |
       | ]                 |
 1     | [                 |
       |   "other source", |
       |   58              |
       | ]                 |
 2     | [                 |
       |   "more stuff",   |
       |   42              |
       | ]                 |
-------+-------------------+

И поэтому выможно просто использовать VALUE[1] для доступа к тому, что вы хотите

select sum(value[1]) from input, table(flatten(json));
---------------+
 SUM(VALUE[1]) |
---------------+
 350           |
---------------+
...