簡體   English   中英

寫入JSON記錄時如何使用python BigQuery客戶端進行UPSERT操作

[英]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 代碼之前兩個表的屏幕截圖。

主表: 在此處輸入圖像描述 源表: 在此處輸入圖像描述

python 代碼執行完畢時主表的屏幕截圖。 在此處輸入圖像描述

結論: int64_field_0 4已更新(從版本 1.0.0 到 6.5.1),因為它已經存在於主表中。 int64_field_0 5已插入,因為它在主表中尚不存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM