Airflow BigQueryToCloudStorageOperator导出CSV行首尾带引号问题求助
解决Airflow 1.10.5中BigQueryToCloudStorageOperator导出CSV带首尾双引号的问题
问题原因
Airflow 1.10.5版本的BigQueryToCloudStorageOperator直接传入quote_character=""参数不生效,是因为该参数未被Operator直接暴露,需要通过底层BigQuery Extract Job的配置参数传递。同时,BigQuery默认会对包含字段分隔符(此处为逗号)的字段添加引号包裹,需显式配置关闭该行为。
解决方案
方案1:通过bigquery_extract_job_kwargs传递底层导出配置
利用Operator的bigquery_extract_job_kwargs参数,直接向BigQuery的Extract Job传递quote_character和field_delimiter配置,覆盖默认的引号行为:
from airflow.contrib.operators.bigquery_to_gcs import BigQueryToCloudStorageOperator export_task = BigQueryToCloudStorageOperator( task_id="export_bq_table_to_gcs", source_project_dataset_table="your-project.your-dataset.your-table", destination_cloud_storage_uris=["gs://your-bucket/path/exported_file.csv"], export_format="CSV", # 传递底层Extract Job的配置参数 bigquery_extract_job_kwargs={ "quote_character": "", # 设置为空字符串,取消引号包裹 "field_delimiter": ",", # 指定字段分隔符,与源内容一致 "print_header": False # 不需要导出表头时可添加此配置 }, dag=your_dag )
方案2:通过SQL查询方式导出(备选)
如果方案1仍未生效,可改用SQL查询作为数据源,直接输出原始字段内容,避免BigQuery自动添加引号:
export_task = BigQueryToCloudStorageOperator( task_id="export_query_result_to_gcs", sql="SELECT your_column_name FROM `your-project.your-dataset.your-table`", destination_cloud_storage_uris=["gs://your-bucket/path/exported_file.csv"], export_format="CSV", bigquery_extract_job_kwargs={ "quote_character": "", "print_header": False }, dag=your_dag )
关键说明
- Airflow 1.10.x版本的
BigQueryToCloudStorageOperator并未将quote_character作为直接参数暴露,必须通过bigquery_extract_job_kwargs传递给底层的BigQuery Extract Job。 - 确保
quote_character设置为空字符串(""),而非省略该参数,这样BigQuery才会禁用字段的引号包裹行为。
内容的提问来源于stack exchange,提问作者lugger1
相关产品推荐
相关产品推荐

