繁体   English   中英

Airflow:如何获取数据插入BigQuery表的当前日期?

[英]Airflow: How to get the current date of when data is inserted into a BigQuery table?

我正在将数据从 GCS Bucket 插入到 BigQuery,但我不确定如何获取数据插入列的当前日期。

这是我的架构:

load_csv = gcs_to_bq.GoogleCloudStorageToBigQueryOperator(
    task_id='gcs_to_bq_example',
    bucket='cloud-samples-data',
    source_objects=['SOURCE-FILE-LOCATION'],
    destination_project_dataset_table='airflow_test.gcs_to_bq_table',
    schema_fields=[
        {'name': 'item', 'type': 'STRING', 'mode': 'NULLABLE'},
        {'name': 'date', 'type': 'DATE', 'mode': 'NULLABLE'},
    ],
    write_disposition='WRITE_TRUNCATE',
    dag=dag)

所以,在我的架构中,我有itemdate

因此,当触发我的 DAG 将数据从 GCS Bucket 插入到 BigQuery 时,如何使date列包含插入数据的当前日期?

例如,如果我今天插入它,那么date列应该是2022-11-24

可能有 2 种方法可以达到预期的结果,但都不确定。

第一个是使用此处描述的默认值并向您的模式添加一列:

schema_fields=[
    {'name': 'item', 'type': 'STRING', 'mode': 'NULLABLE'},
    {'name': 'date', 'type': 'DATE', 'mode': 'NULLABLE'},

    {'name': 'load_date', 'type': 'DATE', 'default': 'CURRENT_DATE'},
]

然而,这是 pre-GA 所以不确定你是否可以使用它(我还没有测试抱歉)。

其他可能性是使用 Airflow 模板功能并添加另一个步骤:

load_csv = gcs_to_bq.GoogleCloudStorageToBigQueryOperator(
task_id='gcs_to_bq_example',
bucket='cloud-samples-data',
source_objects=['SOURCE-FILE-LOCATION'],
destination_project_dataset_table='airflow_test.gcs_to_bq_table_{{ ds_nodash }}',
schema_fields=[
    {'name': 'item', 'type': 'STRING', 'mode': 'NULLABLE'},
    {'name': 'date', 'type': 'DATE', 'mode': 'NULLABLE'},
],
write_disposition='WRITE_TRUNCATE',
dag=dag)

通过此操作,您将在表中获取文件,表名中包含摄取日期(如果使用ts_nodash时间戳)。 然后,您可以自由使用BigqueryOperator将这个暂存数据插入到您的目标数据中,其中包含一些 SQL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM