python - 在 BigQuery API 中使用标准 SQL 时出现 BigQuery 无效表名错误

标签 python google-bigquery google-api-python-client airflow

我正在尝试使用 python BigQuery API 查询表并将结果存储在另一个 BigQuery 表中。但是当我在查询部分使用标准 SQL 时,它会抛出无效表名错误。如何在 BigQuery API 中使用标准 SQL?我正在使用 Airflow BigQuery 钩子(Hook)

'configuration': {
        'query': {
            'destinationTable': {
                'tableId': u 'our_table_name',
                'datasetId': 'our_dataset_id',
                'projectId': 'our_project_id'
            },
            'useLegacySql': False,
            'allowLargeResults': True,
            'writeDisposition': 'WRITE_TRUNCATE',
            'query': u'SELECT * FROM `projectID.datasetId.tablename`',
            
        }
    }

Exception: BigQuery job failed. Final error was: {u'reason': u'invalid', u'message': u'Invalid table name: `projectId:datasetId.tableId`', u'location': u'`projectId:datasetId.tableId`'}.

最佳答案

错误令人困惑,但根本原因是此查询被解释为旧版 SQL,而不是标准 SQL。在 JSON 中(不像在 Python 中), bool 文字 truefalse 必须是小写的,根据 JSON standard Section 3 :

A JSON value MUST be an object, array, number, or string, or one of
the following three literal names:

  false null true

The literal names MUST be lowercase. No other literal names are
allowed.

如果你改变

        `'useLegacySql': False,`

        `'useLegacySql': false,`

它应该工作

关于python - 在 BigQuery API 中使用标准 SQL 时出现 BigQuery 无效表名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42942926/

相关文章:

python - 我应该使用哪个 Youtube API 范围才能访问 Youtube API v3 中我自己的视频标签

node.js - 使用 Nodejs 连接到 Google BigQuery 时,BigQuery 不是构造函数错误

python - 将 pandas 列转换为 "increasing"索引的 pythonic 和 uFunc-y 方法?

python - 如何删除 DataFrame 字符串中的特殊字符(例如 ",")?

python - 访问另一个实例的损坏成员

将 CSV 数据从 Google 存储加载到 Bigquery 的 Python 代码?

python - 从 Google BigQuery 中过滤掉或替换非英文字符

python - bq.py 不是分页结果

terminal - 如何使用 nbconvert 将 .ipynb 转换为幻灯片?

python - 我的 Py_NoneStruct 符号(python、boost.python)在哪里?