Я использую 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
должен выводить в строку. Что мне не хватает?