BigQuery正在使用Legacy SQL而不是标准SQL,尽管我们使用标志" useLegacySQL:False"发送JSON有效负载。标准SQL被拒绝 - 但系统将使用下面的JSON接受旧版SQL。
据我们所知,我们正在关注BigQuery's documentation。我们需要什么才能让BigQuery在此API调用中使用标准SQL?
这是我们的BigQuery JSON有效负载:
{
'jobReference': {
'jobId': '####',
'projectId': 'healthlabs-4'
},
'configuration': {
'query': {
'destinationTable': {
'tableId': u 'our_table_name',
'datasetId': 'our_dataset_id',
'projectId': 'our_project_id'
},
'useLegacySQL': False,
'priority': 'INTERACTIVE',
'query': u "SELECT ... FROM our_table WHERE ... GROUP BY ... ORDER BY ...",
'allowLargeResults': True
}
}
}
我们可以告诉查询被拒绝来自BigQuery的返回消息,该消息接受我们的Legacy SQL但拒绝我们的标准SQL并出现此错误:
{'create_table_error': [{u'location': u'query', u'message': u'Encountered " "FROM" "FROM "" at line 1, column 333.\nWas expecting:\n ")" ...\n ', u'reason': u'invalidQuery'}], 'bq_table_exists': 'no'}
答案 0 :(得分:3)
我们刚刚注意到JSON键区分大小写。这是一个大写问题。 SQL不应该大写。正确的密钥是:
'useLegacyS ql ':错误
答案 1 :(得分:1)
作为替代方案,不要定义useLegacySQL
,而是使用#standardSQL为查询添加前缀,如:
#standardSQL
SELECT COUNT(*)
FROM `bigquery-public-data.noaa_gsod.gsod2016`
(当通过无法处理额外API选项的库时,这非常有用)
https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql#sql-prefix