Google BigQuery 中的参数化查询错误

Posted

技术标签:

【中文标题】Google BigQuery 中的参数化查询错误【英文标题】:Error with parametrized query in Google BigQuery 【发布时间】:2017-11-06 01:12:35 【问题描述】:

我正在尝试使用 Google BigQuery Python API 编写查询。我将项目 ID 和数据集名称设置为参数。我研究了Google Github.io 上的参数化查询实现。但是在执行查询时出现以下错误

google.api_core.exceptions.BadRequest: 400 Invalid table name: @project:@dataset.AIRPORTS

我很困惑我们是否可以用参数替换项目、数据集名称。

下面是我的代码

from google.cloud import bigquery

client = bigquery.Client.from_service_account_json('service_account.json')
project = client.project

datasets = list(client.list_datasets())
dataset = datasets[0]
dataset_id = dataset.dataset_id

QUERY = (
        'SELECT * '
        'FROM `..AIRPORTS`'.format(project, dataset_id)
    )

query = (
        'SELECT * '
        'FROM `@project.@dataset.AIRPORTS`'
    )

TIMEOUT = 30
param1 = bigquery.ScalarQueryParameter('project', 'STRING', project)
param2 = bigquery.ScalarQueryParameter('dataset', 'STRING', dataset_id)
job_config = bigquery.QueryJobConfig()
job_config.query_parameters = [param1, param2]

query_job = client.query(
    query, job_config=job_config)

iterator = query_job.result(timeout=TIMEOUT)
rows = list(iterator)

print(rows)

【问题讨论】:

【参考方案1】:

您只能使用参数代替表达式,例如 WHERE 子句中的column_name = @param_value。表名不是表达式,因此您不能使用参数代替项目或数据集名称。另请注意,您需要使用标准 SQL 才能使用参数。

【讨论】:

以上是关于Google BigQuery 中的参数化查询错误的主要内容,如果未能解决你的问题,请参考以下文章

IN()表达式中的nodejs bigquery参数化查询

如何获取参数化 BigQuery 查询的控制台视图?

将参数化 BigQuery 自定义查询连接到数据洞察

Google Cloud Datalab 中的 BigQuery - 获取查询文本?

Airflow 中的 BigQuery 参数化查询

Google BQ:运行参数化查询,其中参数变量是BQ表目标