Python & Bigquery:使用 for 循环在表中逐行查询和插入数据
Posted
技术标签:
【中文标题】Python & Bigquery:使用 for 循环在表中逐行查询和插入数据【英文标题】:Python & Bigquery: Using for loop to query and insert data row by row in a table 【发布时间】:2021-11-16 01:05:23 【问题描述】:我正在尝试在 for 循环中触发查询 (Google BigQuery),并在每个循环中将数据插入表中。但是,我只看到表格中的最后一行。所以我假设它正在覆盖这些值。
代码如下:
for x in proc_arr:
query = """
BEGIN
<QUERY>
SELECT * FROM <table1> WHERE procedureid =
INSERT INTO <table>
SELECT procedureid FROM <tmp_proc1>
UNION ALL
SELECT procedureid FROM <tmp_proc2>
;
END;
""".format(x)
我没有在此处编写实际查询,因为这不是必需的。 proc_arr 有 80 个 id,它只插入第 80 个 id 的数据。任何帮助表示赞赏。谢谢!
【问题讨论】:
对我来说似乎很好。问题可能在于将查询发送到 BigQuery。或者它可能在缺少的假设我在表 1 中有数据,我想按 ID 循环遍历它,然后将其插入表 2。使用上面的代码 sn-p,我能够将表 1 中的数据插入每个 ID 的表 2。只需确保您的 client.query()
在循环中即可。
表 1:
表2(初始值):
下面的代码使用从表 1 查询的数据,同时循环通过 proc_arr
(我假设您的 ID 存储在此处),然后将其插入表 2。
from google.cloud import bigquery
def insert_data():
client = bigquery.Client()
proc_arr = ['asdf','test_value','cust_1']
for x in proc_arr:
query = """
INSERT INTO `sandbox.table2` (customer,amount_paid)
SELECT * FROM `sandbox.table1`
WHERE customer = ''
ORDER BY amount_paid ASC LIMIT 1
""".format(x)
query_job = client.query(query=query)
results = query_job.result()
if __name__ == "__main__":
insert_data()
表2(运行python脚本后):
【讨论】:
@Misscurious 让我知道我的回答是否有帮助,以便我更新/删除它。以上是关于Python & Bigquery:使用 for 循环在表中逐行查询和插入数据的主要内容,如果未能解决你的问题,请参考以下文章
Google api - bigquery & Appengine - 无法创建数据集
Google Cloud Pub/Sub - Cloud Function & Bigquery - 数据插入未发生
使用python从bigquery处理大量数据集,将其加载回bigquery表