是否可以在具有复合主键的大查询表中更新插入值?

问题描述 投票:0回答:1
背景

使用 python 和 sqlalchemy 将一些机器学习模型推理插入到大查询表中。这就是表格的样子(两个示例行)。

这就是 BQ 中数据类型的显示方式。

基本上,

demand_date
inference_date
应该是复合主键列。为了使 upsert 幂等,每当我使用 SQL-Alchemy 插入到该表中时,如果
demand_date
inference_date
组合已经存在,我想使用以下命令将
tcn
boosting
中的旧值替换为新值
session.merge
SQL炼金术的方法。

问题

使用 SQL 炼金术有可能吗?那是因为最近我读到 BQ 无法强制执行主键约束,这意味着我最终会得到重复的行?如果不可能,使用 SQL-alchemy 接口在大查询中更新插入的最简洁方法是什么?

google-cloud-platform google-bigquery sqlalchemy orm
1个回答
0
投票

Bigquery 已开始提供类似 SQL 的约束,包括主键和外键。

主键 https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#alter_table_add_primary_key_statement

外键 https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#alter_table_add_foreign_key_statement

对于 upsert Bigqury 还提供 merge 语句。您想要做的就是维护 SCD 类型 1 表,而 merge 语句将是完美的选择。

https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax#merge_statement

© www.soinside.com 2019 - 2024. All rights reserved.