如何从python api更新/删除Bigquery中的行?

Man*_*ero 9 python google-api google-bigquery

我正在用 python 设计一个 BigQuery 作业,它更新并插入到多个表中。我想到了两种方法来实现这一目标:

  1. 执行查询作业并将结果保存到带有更新/插入指示器的临时表中,然后处理它们。但是不清楚如何使用 python 库进行更新。

  2. 将整个数据加载到新的分区表中并跳过更新/插入。它需要比我想要的更多空间,但无论如何分区都会在几天内过期。

我错过了什么吗?还有其他方法可以实现这一目标吗?

vre*_*pue 12

使用Google BigQuery API时,您可以简单地使用数据操作语言 (DML) 语句而不是 SQL 查询。

例如,为了更新下表中的特定行:

Inventory
+-------------------+----------+--------------------+
|      product      | quantity | supply_constrained |
+-------------------+----------+--------------------+
| dishwasher        |       30 |               NULL |
| dryer             |       30 |               NULL |
| front load washer |       30 |               NULL |
| microwave         |       30 |               NULL |
+-------------------+----------+--------------------+
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码:

from google.cloud import bigquery

client = bigquery.Client()

dml_statement = (
    "UPDATE dataset.Inventory "
    "SET quantity = quantity - 10 "
    "WHERE product like '%washer%'")
query_job = client.query(dml_statement)  # API request
query_job.result()  # Waits for statement to finish
Run Code Online (Sandbox Code Playgroud)

得到以下结果:

Inventory
+-------------------+----------+--------------------+
|      product      | quantity | supply_constrained |
+-------------------+----------+--------------------+
| dishwasher        |       20 |               NULL |
| dryer             |       30 |               NULL |
| front load washer |       20 |               NULL |
| microwave         |       30 |               NULL |
+-------------------+----------+--------------------+
Run Code Online (Sandbox Code Playgroud)


A.Q*_*eue -3

python 中更新字段的方法在惯用库中实现,称为update_table()。它调用 BigQuery API 的patch 方法