Skip to main content
 首页 » 编程设计

python之在 Python 中将数组参数传递给 SQL for BigQuery

2025年05月04日27webabcd

我有一组 ID (~200k),我需要使用这些 ID 获取 BigQuery 表中的所有行。我试图在 python 中构建一个列表,并将其作为参数传递给使用 @ 的 SQL 查询,但我得到了 TypeError: 'ArrayQueryParameter' object is not iterable 错误。这是我试过的代码(非常类似于 https://cloud.google.com/bigquery/querying-data#running_parameterized_queries ):

id_list = ['id1', 'id2']  
query = """ 
    SELECT id 
    FROM `my-db` 
    WHERE id in UNNEST(@ids) 
""" 
query_job = client.run_async_query( 
    str(uuid.uuid4()), 
    query, 
    query_parameters=( 
        bigquery.ArrayQueryParameter('ids', 'ARRAY<STRING>', id_list) 
    ) 
) 

请您参考如下方法:

这里的问题可能是您没有将元组传递给函数。

尝试在关闭括号之前添加一个逗号,如下所示:

id_list = ['id1', 'id2']  
query = """ 
    SELECT id 
    FROM `my-db` 
    WHERE id in UNNEST(@ids) 
""" 
query_job = client.run_async_query( 
    str(uuid.uuid4()), 
    query, 
    query_parameters=( 
        bigquery.ArrayQueryParameter('ids', 'STRING', id_list), 
    ) 
) 

如果你这样做,在 Python 中:

t = (1) 

然后运行:

type(t) 

你会发现结果是int。但如果你这样做:

t = (1,) 

然后它产生一个元组。