在 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          

如果应用于我们问题中的样本数据 - 输出是