Форматирование вывода BIGQUERY для SQL CSV, привязанного к серверу - PullRequest
0 голосов
/ 30 мая 2020

Я использую Airflow для перемещения таблицы данных с bigquery на SQL Server.

Логический процесс - запрос таблицы, экспорт в GCS, локальная загрузка и BCP на SQL Server.

Export_TABLE_to_GCS = BigQueryToCloudStorageOperator(
    task_id='Export_to_GCS',
    bigquery_conn_id='myconn1',
    source_project_dataset_table='database.dataset.table',
    field_delimiter='~',
    destination_cloud_storage_uris=['gs://dataset/table*.txt'],
    dag=dag
)

def DownloadFiles(set):
    gcsbucket = 'dataset'
    gcspath = '{}'.format(set)
    gcs = GoogleCloudStorageHook(gcp_conn_id='myconn1')
    gcs.get_conn()
    files = gcs.list(bucket_name=gcsbucket, prefix=gcspath)
    print(files)
    for file in files:
        print('downloading file {}'.format(file))
        gcs.download(gcsbucket, file, Variable.get("temp_directory") + "dataset/{}".format(file))


Export_GCS_to_Local = PythonOperator(
    task_id='Download_GCS_Files_to_Local',
    python_callable=DownloadFiles,
    op_kwargs={'set': 'dataset'},
    dag=dag
)

def bcp_in(set):
    files = []
    for file in glob.glob(Variable.get("temp_directory") + "dataset/{}*.txt".format(set)):
        files.append(file)
    print("LOCAL FILES {}".format(files))
    for file in files:
        print('Importing File {}'.format(file))
        cmd = '/opt/mssql-tools/bin/bcp buyerhero_staging.dbo.{table} IN "{file}" -F2  -U<<USER>> -P<<Password>> -S<<Server>> -t"~" -c'.format(table=set, file=file)
        print(subprocess.check_output(cmd, shell=True).decode("utf-8"))


BCP_Import_Files = PythonOperator(
    task_id='BCP_Import_Files_to_DB3_Staging',
    python_callable=bcp_in,
    op_kwargs={'set': 'dataset'},
    dag=dag
)

Моя проблема заключается в приеме столбца с набором данных временной метки.

Примеры:

field1
---------------
2020-05-18 18:37:30
2020-05-18 20:19:11
2020-05-18 19:30:20
2020-05-19 08:27:35
2020-05-18 19:43:12

Проблема в SQL. Я создал table1, экспортировав метку времени в строку, используя:

FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', field1) END AS field1

Формат в таблице работает, и таблица регистрирует string. Таблица работает и выводит в вебуи нормально. Но когда я экспортирую таблицу в CSV, я получаю следующее:

2020-05-18 19:37:00 UTC      <-- notice the UTC

Как мне избавиться от UT C? Я знаю, что FORMAT_TIMESTAMP должен выводить в строку. Что мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...