在 Python 中为 BigQuery 将数组参数传递给 SQL

thn*_*thn 1 python sql google-bigquery

我有一组 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)
    )
)
Run Code Online (Sandbox Code Playgroud)

Wil*_*uks 5

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

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

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),
    )
)
Run Code Online (Sandbox Code Playgroud)

在 Python 中,如果你这样做:

t = (1)
Run Code Online (Sandbox Code Playgroud)

然后运行:

type(t)
Run Code Online (Sandbox Code Playgroud)

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

t = (1,)
Run Code Online (Sandbox Code Playgroud)

然后它产生一个元组。