我有一组 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,)
然后它产生一个元组。
