![](/img/trans.png)
[英]Airflow - how can I get data from a BigQuery table and use it as a list?
[英]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)
所以,在我的架构中,我有item
和date
。
因此,当触发我的 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.