首页 文章

如何让BigQuery的API使用标准SQL进行查询?

提问于
浏览
3

尽管我们使用标志“useLegacySQL:False”发送JSON有效负载,但BigQuery使用的是Legacy SQL而不是标准SQL . 标准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'}

2 回答

  • 3

    我们刚刚注意到JSON键区分大小写 . 这是一个大写问题 . SQL不应该大写 . 正确的关键是:

    'useLegacyS ql ':错误

  • 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

相关问题