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

时间:2018-02-08 11:40:03

标签: python google-api google-bigquery

我正在python中设计一个BigQuery作业,它可以更新并插入到几个表中。我想到了两种实现方法:

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

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

  3. 我错过了什么吗?有没有其他方法来实现这一目标?

3 个答案:

答案 0 :(得分:1)

使用Data Manipulation Language (DML) statements时,您可以简单地使用Google BigQuery API代替SQL查询。

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

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

您可以使用以下代码:

Inventory
+-------------------+----------+--------------------+
|      product      | quantity | supply_constrained |
+-------------------+----------+--------------------+
| dishwasher        |       20 |               NULL |
| dryer             |       30 |               NULL |
| front load washer |       20 |               NULL |
| microwave         |       30 |               NULL |
+-------------------+----------+--------------------+

获得以下结果:

{{1}}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我花了一段时间才在网络上的许多Google文档中找到了,所以值得在这里作为参考。该信息为here

这是一个最小的示例,应该易于适应任何用例:

    import google.cloud.bigquery.dbapi as bq

    try:
        con = bq.connect()
        cursor = con.cursor()
        query = "<your sql command goes here>"
        cursor.execute(query)
        con.commit()
        con.close()
   except Exception as e:
        str(e)