我正在python中设计一个BigQuery作业,它可以更新并插入到几个表中。我想到了两种实现方法:
执行查询作业并将结果保存到带有更新/插入指示符的临时表中,然后处理它们。但目前还不清楚如何使用python库进行更新。
将整个数据加载到新的分区表中并跳过更新/插入。它需要更多的空间然后我想,但分区在几天内到期。
我错过了什么吗?有没有其他方法来实现这一目标?
答案 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)