bigquery_operator не позволяет переопределять параметры по умолчанию в GCP Airflow 1.10.15

# #google-cloud-platform #google-cloud-storage #airflow

Вопрос:

Я пытаюсь экспортировать таблицу BQ в GCS с помощью airflow.contrib.operators.bigquery_operator , однако мне нужен пользовательский делиметр и без заголовка. Когда я изменяю настройки, это никак не влияет на результирующую таблицу. Что я делаю не так?

     export_to_gcs_op = BigQueryToCloudStorageOperator(
        task_id=f'bq_transfer_{TABLE}_to_gcs',
        source_project_dataset_table=f'{PROJECT_ID}.{DATASET}.{TABLE}',
        export_format='csv',
        field_delimiter='',
        print_header=False,
        destination_cloud_storage_uris=[f"gs://{GCS_BUCKET}/{TABLE}.csv"],
    )
 

Версия воздушного потока, которую я установил в своей компании, я не могу ее обновить:

 apache-airflow = "1.10.15"
apache-airflow-backport-providers-google = "2021.3.3"
 

Ответ №1:

Я думаю, вам нужно export_format='CSV' писать в верхнем регистре. Это также значение по умолчанию, поэтому вы можете опустить это поле, если хотите.

От https://github.com/apache/airflow/blob/1.10.15/airflow/contrib/hooks/bigquery_hook.py#L976-L981

 if export_format == 'CSV':
    # Only set fieldDelimiter and printHeader fields if using CSV.
    # Google does not like it if you set these fields for other export
    # formats.
    configuration['extract']['fieldDelimiter'] = field_delimiter
    configuration['extract']['printHeader'] = print_header
 

Комментарии:

1. @MStikh — это решает вашу проблему?

2. нет, это не работает, вот почему у меня такой вопрос..

3. @MStikh код, который вы опубликовали csv , написан в нижнем регистре, убедитесь, что вы используете CSV верхний регистр вместо этого.