首页 > 解决方案 > Python & Bigquery:使用 for 循环在表中逐行查询和插入数据

问题描述

我正在尝试在 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 的数据。任何帮助表示赞赏。谢谢!

标签: pythongoogle-bigqueryjupyter-notebook

解决方案


假设我在表 1 中有数据,并且我想按 ID 循环遍历它,然后将其插入表 2。使用上面的代码片段,我能够将表 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脚本后):

在此处输入图像描述


推荐阅读