如何在 Jupyter/Colab 中的全单元魔术命令中传递变量?

How to pass a variable in a full cell magic command in Jupyter/Colab?

我的代码使用 SQL 查询托管在 BigQuery 中的数据库。假设我有一个存储在变量中的项目列表:

list = ['a','b','c']

我想将该列表用作查询的参数,如下所示:

%%bigquery --project xxx query

SELECT *
FROM `xxx.database.table`
WHERE items in list

由于调用数据库的魔术命令是一个全单元命令,我如何进行一些转义以使其在SQL查询中调用环境变量?

您可以尝试 UNNEST BIGQUERY 中的查询是这样的:

SELECT * FROM `xx.mytable` WHERE items in UNNEST (['a','b','c']) 

在您的代码中,它应该如下所示:

SELECT * FROM `xx.mytable` WHERE items in UNNEST (list)

编辑

我在 Python 中找到了两种不同的传递变量的方法。

第一种方法如下。来自 google 文档[1].

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

query = """
    SELECT * FROM `xx.mytable` WHERE items in UNNEST (@list)
 """
job_config = bigquery.QueryJobConfig(
    query_parameters=[
        bigquery.ArrayQueryParameter("list", "STRING", ["a", "b", "c"]),
    ]
)
query_job = client.query(query, job_config=job_config)  # Make an API request.

for row in query_job:
    print("{}: \t{}".format(row.name, row.count))

第二种方法在下一篇文档[2]中。在您的代码中应如下所示:

params = {'list': '[“a”,”b”,”c”]'}
%%bigquery df --params $params --project xxx query
select * from `xx.mytable` 
where items in unnest (@list)

我还找到了一些文档[3],其中显示了 %%bigquery magic 的参数。

[1]https://cloud.google.com/bigquery/docs/parameterized-queries#using_arrays_in_parameterized_queries [2]https://notebook.community/GoogleCloudPlatform/python-docs-samples/notebooks/tutorials/bigquery/BigQuery%20query%20magic [3]https://googleapis.dev/python/bigquery/latest/magics.html