[英]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.