[英]How to perform the UPSERT operation using the python BigQuery client when writing JSON record
我正在使用 function bq.insert_rows_json(f'{project}.{dataset}.{table_name}', rows_to_insert)
將 JSON 記錄寫入 BigQuery 表。 此操作在INSERT
模式下完成。 我想知道我是否可以在UPSERT
模式下使用相同的 function。 是否可以? 我在這里查看了文檔,但沒有找到相關的論據。
我似乎找不到 python 的內置UPSERT
function。但是,您可以嘗試並考慮以下源自@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.
在這種方法中,您將需要在將數據插入或更新到您的主 BigQuery 表之前,將所有所謂的“更新的”JSON 數據提取到表中。 如果主 ID (唯一性檢查器)已經存在(然后查詢將執行UPDATE
)或尚未存在(然后查詢將執行INSERT
),則查詢會將每一行與主表匹配。
運行 python 代碼之前兩個表的屏幕截圖。
結論: int64_field_0
4已更新(從版本 1.0.0 到 6.5.1),因為它已經存在於主表中。 int64_field_0
5已插入,因為它在主表中尚不存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.