如何在写入 JSON 记录时使用 python BigQuery 客户端执行 UPSERT 操作

How to perform the UPSERT operation using the python BigQuery client when writing JSON record

我正在使用函数 bq.insert_rows_json(f'{project}.{dataset}.{table_name}', rows_to_insert) 将 JSON 条记录写入 BigQuery table。这个操作是在INSERT模式下完成的。我想知道我是否可以在 UPSERT 模式下使用相同的功能。可能吗 ?我查看了文档 here 但没有找到相关论据。

我似乎找不到 python 的 in-built UPSERT 函数。但是,您可以尝试考虑以下源自@Mr.Nobody.

评论的方法
from google.cloud import bigquery

client = bigquery.Client()

query_job = client.query(
    """
    MERGE my-dataset.json_table T
USING my-dataset.json_table_source S
ON T.int64_field_0 = S.int64_field_0
WHEN MATCHED THEN
  UPDATE SET string_field_1 = s.string_field_1
WHEN NOT MATCHED THEN
  INSERT (int64_field_0, string_field_1) VALUES(int64_field_0, string_field_1)"""
)

results = query_job.result()  # Waits for job to complete.

在这种方法中,您需要在 table 上提取所有所谓的“更新”JSON 数据,然后再将它们插入或更新到主 BigQuery table。如果 主 ID(唯一性检查器)已经存在(那么查询将执行 UPDATE)或尚未存在,则查询会将每一行与主 table 匹配(然后查询将执行 INSERT)。

在 运行 python 代码之前的两个 table 的屏幕截图。

主要Table: 来源Table:

当 python 代码执行完毕时主 Table 的屏幕截图。

结论: int64_field_0 4 已更新(从版本 1.0.0. 到 6.5.1),因为它已存在于 Main table 中。 int64_field_0 5 已插入,因为它在主 table.

上尚不存在