BigQuery Paramaterized Search

时间:2018-01-26 17:47:07

标签: sql google-bigquery google-cloud-platform

我正在尝试在SQL语句中使用ParaQuery来实现B​​igQuery。

我正在使用https://cloud.google.com/bigquery/docs/parameterized-queries上找到的代码 我尝试连接到他们使用的相同数据表和我自己的数据表。

一切都执行得很好,没有错误弹出但也没有结果。我觉得我做错了一些小事但却无法弄清楚它是什么。还有其他人吗?

from google.cloud import bigquery

def query_named_params(corpus, word_count):
    client = bigquery.Client()
    query = """
        SELECT word, word_count
        FROM `bigquery-public-data.samples.shakespeare`
        WHERE corpus = @corpus
        AND word_count >= @min_word_count
        ORDER BY word_count DESC;
        """
    query_params = [
        bigquery.ScalarQueryParameter('corpus', 'STRING', 'sonnets'),
        bigquery.ScalarQueryParameter(
            'min_word_count', 'INT64', 126)
    ]
    job_config = bigquery.QueryJobConfig()
    job_config.use_legacy_sql = False
    job_config.query_parameters = query_params
    query_job = client.query(query, job_config=job_config)
    r = query_job.result()  # Wait for job to complete
    for row in r:
        print(row)

if __name__ == '__main__':
    query_named_params('corpus', 'min_word_count')

这是最终的代码。问题是谷歌给出的例子设置了两个参数的相同部分(语料库和语料库)等我交换了它们。我还需要在最终查询中传递参数名称。以下工作正常。

{{1}}

1 个答案:

答案 0 :(得分:2)

看看这是否有效:

(...)
job_config = bigquery.QueryJobConfig()
job_config.use_legacy_sql = False
job_config.query_parameters = query_params
query_job = client.query(query, job_config=job_config)

r = query_job.result()  # Wait for job to complete
for row in r:
    print(row)

在您的代码中,您尝试连接到临时表以加载可以直接从QueryResults检索的结果。