【问题标题】:Airflow - Bigquery operator not working as intendedAirflow - Bigquery 运算符未按预期工作
【发布时间】:2020-12-29 17:00:50
【问题描述】:

我是 Airflow 的新手,目前遇到了 Bigquery 运算符的问题。 我正在尝试对给定数据集中的表执行简单查询,并将结果复制到同一数据集中的新表上。我正在使用 bigquery 运算符来执行此操作,因为根据文档,“destination_dataset_table”参数应该完全符合我的要求(来源:https://airflow.apache.org/docs/stable/_api/airflow/contrib/operators/bigquery_operator/index.html#airflow.contrib.operators.bigquery_operator.BigQueryOperator)。

但是我得到的不是复制数据,而是一个新的空表,其中包含我正在查询的那个表的架构。

这是我的代码

default_args = {
    'owner':'me',
    'depends_on_past':False,
    'start_date':datetime(2019,1,1),
    'end_date':datetime(2019,1,3),
    'retries':10,
    'retry_delay':timedelta(minutes=1),
}

dag = DAG(
    dag_id='my_dag',
    default_args=default_args,
    schedule_interval=timedelta(days=1)
)

copyData = BigQueryOperator(
    task_id='copyData',
    dag=dag,
    sql=
        "SELECT some_columns,x,y,z FROM dataset_d.table_t WHERE some_columns=some_value",
    destination_dataset_table='dataset_d.table_u',
    bigquery_conn_id='something',
)

我没有收到任何警告或错误,代码正在运行并且任务被标记为成功。它确实创建了我想要的表,其中包含我指定的列,但完全是空的。

知道我做错了什么吗?

编辑:我在一个小得多的表(从 10Gb 到几 Kb)上尝试了相同的代码,执行结果更小的查询(从 500Mb 到几 Kb),这次它确实有效。您认为表的大小/查询结果重要吗?有限制吗?还是执行过大的查询会导致某种滞后?

EDIT2:经过几次测试后,我可以确认此问题与查询或表的大小无关。它似乎与日期格式有关。在我的代码中,WHERE 条件实际上是检查 date_column = 'YYYY-MM-DD'。当我用 int 或 string 比较替换这个条件时,它工作得很好。你们知道 Bigquery 是使用特定的日期格式还是需要特定的语法?

EDIT3:终于到了某个地方:当我将 date_column 转换为日期 (CAST(date_column AS DATE)) 以强制其类型为 DATE 时,我收到一条错误消息,指出我的字段实际上是 int-32(参数类型不匹配)。但我确信该字段是一个日期,因此这意味着 Bigquery 将其存储为 int 而将其显示为日期,或者 Bigquery 运算符在加载表时进行某种隐藏的类型转换。关于如何解决这个问题的任何想法?

【问题讨论】:

  • 您给出的示例似乎是正确的,我怀疑该查询没有给出任何结果。您是否尝试过复制呈现的 sql(在 ui 中)并在 BigQuery 中运行?
  • 是的,我做到了,但别担心我找到了答案,它是 legacy_sql 参数,似乎默认设置为 True,我只是将其关闭,一切正常 :)这么多时间在这么愚蠢的事情上x)
  • 你不是第一个@armaaj ;)

标签: sql google-bigquery airflow


【解决方案1】:

我在从其他数据源传输数据时遇到了类似的问题,而不是大查询。

我建议按如下方式转换 date_column:to_char(date_column, 'YYYY-MM-DD') as date

一般来说,我发现大查询自动检测架构经常存在问题。最安全的方法是始终在执行相应的查询之前指定架构,或者使用支持架构定义的运算符。

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 2019-06-20
    • 2021-04-13
    • 1970-01-01
    • 2021-04-30
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多