google-bigquery - 如何根据嵌套字段的条件更新记录?
问题描述
我有一个具有以下架构的 bigquery 表:
{
"fields": [
{
"name": "products",
"type": "RECORD",
"mode": "REPEATED",
"fields": [
{
"name": "name",
"type": "STRING",
"mode": "REQUIRED"
},
{
"name": "qty",
"type": "INTEGER",
"mode": "REQUIRED"
},
{
"name": "variant_name",
"type": "STRING",
"mode": "REQUIRED"
},
{
"name": "order_id",
"type": "INTEGER",
"mode": "REQUIRED"
},
{
"name": "test_mode",
"type": "BOOLEAN",
"mode": "REQUIRED"
},
{
"name": "amount",
"type": "FLOAT",
"mode": "REQUIRED"
},
{
"name": "transaction_reference",
"type": "STRING",
"mode": "REQUIRED"
},
{
"name": "id",
"type": "INTEGER",
"mode": "REQUIRED"
},
{
"name": "source",
"type": "STRING",
"mode": "REQUIRED"
},
{
"name": "currency",
"type": "STRING",
"mode": "REQUIRED"
}
]
},
{
"name": "processed_at",
"type": "TIMESTAMP",
"mode": "REQUIRED",
"description": "bq-datetime"
},
{
"name": "inserted_at",
"type": "TIMESTAMP",
"mode": "REQUIRED",
"description": "bq-datetime"
}
]
}
如您所见,该products
字段是一个嵌套字段。我想要实现的是如下更新条件:
UPDATE `dataset.table`
SET processed_at = '2021-04-17T16:07:30.993806'
WHERE processed_at = '1970-01-01T00:00:00' AND products.order_id = 9366054;
每当我尝试这样做时,我都会收到以下错误
Cannot access field order_id on a value with type ARRAY<STRUCT<name STRING, qty INT64, variant_name STRING, ...>>
我知道要SELECT
使用相同的逻辑,我可以使用该UNNEST
语句,但无法将其应用于UPDATE
.
解决方案
尝试存在:
WHERE processed_at = '1970-01-01T00:00:00'
and EXISTS (SELECT *
FROM UNNEST(products)
WHERE order_id = 9366054
);
推荐阅读
- heroku - Heroku pg:diagnose 的 CPU 突发平衡值
- apache-beam - 用于外部数据访问的异步 I/O BEAM API
- conditional-formatting - 如何在 Excel 中以图形方式显示百分比?
- bluetooth - 蓝牙堆栈中的协议和配置文件有什么区别?
- html - 尝试动态生成 id 和 data-bs-target 但不起作用
- r - ggplot来自不同数据集的相同变量
- qt - 如何让 Qt 浏览器(Web 工具包)翻译“选择文件”
- vue.js - 如何在 VUE 中为这样的谷歌地图创建开关集群标记
- python - redis.exceptions.ConnectionError: 连接到 redis:6379 时出现错误 -2。名称或服务未知
- asp.net - ASP.NET 中 licences.licx 文件的用途是什么?什么时候编辑的?