Суммирование значений из массива JSON в Snowflake
У меня есть исходные данные, которые содержат следующий тип массива JSON:
[
[
"source 1",
250
],
[
"other source",
58
],
[
"more stuff",
42
],
...
]
Может быть 1..N пар строк и значений, подобных этому. Как я могу сложить все значения вместе из этого JSON?
1 ответ
Решение
Вы можете использовать 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 |
---------------+