【问题标题】:BigQueryOperator : No matching signature for operator = for argument types: DATE, INT64BigQueryOperator :对于参数类型:DATE、INT64 的运算符 = 没有匹配的签名
【发布时间】:2019-02-07 17:12:18
【问题描述】:

当我在 BigQuery UI 上运行此查询时:

DELETE FROM `A.Books.items` where Date='2018-08-31'

查询效果很好。 但是,当我尝试在 Airflow 上执行此操作时:

delete_sql = '''DELETE FROM `A.Books.items` where Date = {0}'''.format('2018-08-31') # // later this will be variable
delete_old= BigQueryOperator(
    task_id='bigquery_delete',
    bql=delete_sql,
    destination_dataset_table=False,
    bigquery_conn_id=CONNECTION_ID,
    delegate_to=False,
    use_legacy_sql = 'False',
    udf_config=False,
    dag=dag,
)

它返回:

Exception: BigQuery job failed. Final error was: {u'reason': u'invalidQuery', u'message': u'No matching signature for operator = for argument types: DATE, INT64. Supported signatures: ANY = ANY at [1:52]', u'location': u'query'

Dateitems 表中类型为DATE 的列。

如何解决这个错误?

【问题讨论】:

  • 您能否从 Bigquery UI 运行此查询?
  • @kaxil 是的。我找到了解决方案:更改为Date = cast('{0}' as DATE) 我真的希望在气流文档中对此进行更好的解释。我的本机查询在 BigQuery 上按原样运行......我不明白为什么气流需要不同的语法
  • Airflow 不需要不同的语法,它会将您的查询按原样传递给 BigQuery Api。
  • 您在 BigQuery UI 中使用的是 StandardSQL 还是 Legacy SQL?
  • @kaxil 标准。注意:use_legacy_sql = 'False',

标签: google-bigquery airflow


【解决方案1】:

以下应该有效:

delete_sql = '''DELETE FROM A.Books.items where Date = '{0}' '''.format('2018-08-31')

要替换字符串时需要引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2017-05-20
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多