我们在数据集中的两个表上创建了一个视图。我们可以从控制台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'
答案 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。