【发布时间】:2019-08-27 00:35:31
【问题描述】:
我最近开始研究 gcp 和 bigquery,一般来说我在使用谷歌云作曲家将 csv 文件从谷歌云存储加载到 BQ 表时遇到以下错误
下面是我正在使用的代码。
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'}
)
我的文件是用竖线分隔的。
无论我将引号运算符设置为什么值,我得到的都是以下错误
错误:右双引号 (") 和字段分隔符之间的数据。'}], 'state': 'DONE'}}
我不确定我是否按预期使用了报价选项。
下面是我的工作失败原因的示例行
100|I|50|100010012|F|1" PAE|1-8" PAE|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)
但是我如何将数据重新加载到具有正确架构的表中。
任何建议表示赞赏。
问候。
【问题讨论】:
标签: python google-bigquery airflow google-cloud-composer