Bigquery视图从python代码获取错误

时间:2017-02-23 09:54:50

标签: python view google-bigquery

我们在数据集中的两个表上创建了一个视图。我们可以从控制台Web UI查询视图。但是当我们尝试使用服务帐户密钥从Python客户端代码查询视图时,我们收到错误 - 错误代码: 200,错误请求,无效的表名。我们可以使用相同的代码查询基础表。当我们尝试用视图名称替换表名时,代码停止工作。

from google.cloud import bigquery


def test():
    client = bigquery.Client(project='project-name')
    query_results = client.run_sync_query("""
        SELECT column-names
        FROM `dataset.viewname`
        WHERE conditions
        ;""")

    query_results.use_legacy_sql = False
    query_results.run()
    page_token = None

    while True:
        rows, total_rows, page_token = query_results.fetch_data(
            max_results=1,
            page_token=page_token)

        for row in rows:
            print row
        if not page_token:
            break

if __name__ == '__main__':
    test()

此外,当我们设置query_results.use_legacy_sql = False时,我们会收到以下错误:

BadRequest: 400 Cannot reference a Legacy SQL view in a SQL query

当我们设置query_results.use_legacy_sql = True时,我们会收到不同的错误:

BadRequest: 400 Invalid table name: 'dataset.viewname'

1 个答案:

答案 0 :(得分:0)

如果您使用的是旧版SQL,请尝试使用括号而不是反引号来转义dataset.viewname。

所以,查询将是:

query_results = client.run_sync_query("""
SELECT column-names
FROM [dataset.viewname]
WHERE conditions
;""")

标准SQL和旧版SQL之间的转义差异的文档: https://cloud.google.com/bigquery/docs/reference/standard-sql/migrating-from-legacy-sql#escaping_reserved_keywords_and_invalid_identifiers

我们建议转移到标准SQL。