繁体   English   中英

在雪花中展平两个不同的 JSON 阵列

[英]Flattening the two different JSON array in Snowflake

我有一张包含 JSON 数据的表格,如下所示。

|---------------|
|    JSON_DATA  | 
|———————————————|
|     JSON_1    |
|     JSON_2    |
|---------------|

JSON_1 由如下数据组成

{
    "Money_Earned" : [
        {
           "money" :  2
        }
    ]
}

JSON_2 包含的数据如下

{
    "Money_Spent" : [
        {
           "money" :  3
        }
    ]
}

这是我的 SQL 代码,用于从上表中检索数据,我正在展平 JSON 数组

SELECT v.value:money as money_earned,
        v2.value:money as money_spent
FROM TABLE, LATERAL FLATTEN(input => JSON_DATA: Money_Earned) v, LATERAL FLATTEN(input => JSON_DATA: Money_Spent) v2

我想要这张桌子

|-------------------------------------------------|
|     MONEY_EARNED       |      MONEY_SPENT       | 
|------------------------|------------------------|
|          2             |           0            | <== money_spent 0 because there is not money_spent in JSON_1
|          0             |           3            | <== money_earned 0 because there is not money_earned in JSON_2
|-------------------------------------------------|

但是当我使用上面的 SQL 代码时,我得到了一些其他的表。 我不明白我在哪里做错了

您的“钱”是具有单个成员的 JSON 阵列。 如果它始终是单个成员,您可以这样做(使用表名 FOO 和列名 JSON_DATA):

select    zeroifnull(JSON_DATA:Money_Earned[0].money) as MONEY_EARNED,
          zeroifnull(JSON_DATA:Money_Spent[0].money) as MONEY_SPENT
from foo;

我使用了一张看起来像这样的桌子。 如果您的实际数据更复杂,请发布示例:

create temp table foo(JSON_DATA variant);
insert into foo select parse_json('{"Money_Earned":[{"money":2}]}');
insert into foo select parse_json('{"Money_Spent":[{"money":3}]}');
insert into foo select parse_json('{"Money_Earned":[{"money":6}], "Money_Spent":[{"money":7}]}');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM