Недавно я начал работать над gcp и bigquery в целом. Я получаю следующую ошибку при загрузке файла csv из облачного хранилища Google в таблицу BQ с помощью облачного композитора Google.
Ниже приведен код, который я использую.
t1 = GoogleCloudStorageToBigQueryOperator(
task_id='gcs_to_bq_mak',
bucket='bucketname',
source_objects=['FULL/mak.csv'],
field_delimiter='|',
destination_project_dataset_table='{0}.mak_initial_f'
.format(BQ_DATASET_NAME),
schema_fields= mak_schemas.mak_schema(),
#create_disposition='CREATE_IF_NEEDED',
skip_leading_rows=1,
#quote = '""',
#quote = ''
#quote = '"'
#allowQuotedNewlines = True,
write_disposition='WRITE_APPEND',
time_partitioning={'Date':'timestamp'}
)
Мой файл разделен трубой.
Независимо от того, какое значение я установил для своего оператора кавычек, все, что я получаю, это ошибка ниже
Ошибка: данные между закрывающей двойной кавычкой ("") и разделителем полей. '}], 'состояние': 'ГОТОВО'}}
Я не уверен, что использую опцию цитаты по назначению.
Ниже приведен пример строки, почему моя работа не выполняется.
100|I|50|100010012|F|1" ПАЭ|1-8" ПАЭ|20190|C|1
как вы видите, " был закрыт после разделителя, который является каналом, поэтому моя работа не удалась.
Есть ли какой-либо обходной путь для этого? Я ссылался на многие сообщения, все упоминали об использовании оператора кавычек, но это не работает для меня или я не использую его должным образом.
Теперь, если невозможно избежать кавычек в поле, я планирую загрузить всю строку в виде текста в таблицу int.
но каким должен быть мой следующий шаг, как снова загрузить эту единственную строку обратно в исходную таблицу.
пример кода, который я планирую реализовать.
t3 = GoogleCloudStorageToBigQueryOperator(
task_id='mak_load_one_column',
bucket='bucketname',
source_objects=['mak.csv'],
field_delimiter='\t',
allow_jagged_rows=True,
destination_project_dataset_table='{0}.mak_init_singlecolumn'
.format(BQ_DATASET_NAME),
schema_fields=[{"name": "singlecolumn","type": "TEXT","description":
"load all the rows into one column"}],
skip_leading_rows=1,
write_disposition='WRITE_APPEND',
#time_partitioning={'Date':'timestamp'},
#provide_context=True,
#trigger_rule=TriggerRule.ALL_FAILED)
но как перезагрузить данные в таблицу с правильной схемой.
Любые советы приветствуются.
С уважением.