【发布时间】: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'
Date 是items 表中类型为DATE 的列。
如何解决这个错误?
【问题讨论】:
-
您能否从 Bigquery UI 运行此查询?
-
@kaxil 是的。我找到了解决方案:更改为
Date = cast('{0}' as DATE)我真的希望在气流文档中对此进行更好的解释。我的本机查询在 BigQuery 上按原样运行......我不明白为什么气流需要不同的语法 -
Airflow 不需要不同的语法,它会将您的查询按原样传递给 BigQuery Api。
-
您在 BigQuery UI 中使用的是 StandardSQL 还是 Legacy SQL?
-
@kaxil 标准。注意:use_legacy_sql = 'False',