在 BigQuery 中使用 JSON 函数查询订单的订单项
Querying Line Items of Order with JSON Functions in BigQuery
在过去的 2 个小时里,我一直在用 BigQuery 中所有可用的 JSON_... 函数来敲打我的脑袋。我在这里阅读了很多问题,但无论我为什么尝试,我都没有成功地从下面的 JSON 中提取“数量”。
这是我存储在 BQ 列中的 JSON:
{
"lines": [
{
"id": "70223039-83d6-463d-a482-7ce4d50bf0fc",
"charges": [
{
"type": "price",
"amount": 50.0
},
{
"type": "discount",
"amount": -40.00
}
]
},
{
"id": "70223039-83d6-463d-a482-7ce4d50bf0fc",
"charges": [
{
"type": "price",
"amount": 20.00
},
{
"type": "discount",
"amount": 0.00
}
]
}
]
}
假设以上是包含多个项目的订单。
我正在尝试获取所有金额的总和 => 50-40+20+0。结果需要30 = 总订单价格。
是否可以在不使用任何自定义 JS 函数的情况下仅通过 SQL 提取所有金额值然后将它们相加?我想求和是简单的部分 - 将金额放入数组是这里的挑战。
下面使用
select (
select sum(cast(json_value(charge, '$.amount') as float64))
from unnest(json_extract_array(order_as_json, '$.lines')) line,
unnest(json_extract_array(line, '$.charges')) charge
) total
from your_table
如果应用于我们问题中的样本数据 - 输出是
在过去的 2 个小时里,我一直在用 BigQuery 中所有可用的 JSON_... 函数来敲打我的脑袋。我在这里阅读了很多问题,但无论我为什么尝试,我都没有成功地从下面的 JSON 中提取“数量”。
这是我存储在 BQ 列中的 JSON:
{
"lines": [
{
"id": "70223039-83d6-463d-a482-7ce4d50bf0fc",
"charges": [
{
"type": "price",
"amount": 50.0
},
{
"type": "discount",
"amount": -40.00
}
]
},
{
"id": "70223039-83d6-463d-a482-7ce4d50bf0fc",
"charges": [
{
"type": "price",
"amount": 20.00
},
{
"type": "discount",
"amount": 0.00
}
]
}
]
}
假设以上是包含多个项目的订单。
我正在尝试获取所有金额的总和 => 50-40+20+0。结果需要30 = 总订单价格。
是否可以在不使用任何自定义 JS 函数的情况下仅通过 SQL 提取所有金额值然后将它们相加?我想求和是简单的部分 - 将金额放入数组是这里的挑战。
下面使用
select (
select sum(cast(json_value(charge, '$.amount') as float64))
from unnest(json_extract_array(order_as_json, '$.lines')) line,
unnest(json_extract_array(line, '$.charges')) charge
) total
from your_table
如果应用于我们问题中的样本数据 - 输出是