我最近开始着手于gcp和bigquery的使用,我在使用Google Cloud Composer将CSV文件从Google云端存储加载到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'}
)
我的文件用竖线分隔。
无论我将引号运算符设置为什么值,都会出现以下错误
错误:双引号(“)和字段分隔符之间的数据。'}],'状态':'DONE'}}
我不确定我是否按预期使用了quote选项。
以下是我的工作失败原因的示例行
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)
但是如何将数据重新加载到具有正确模式的表中。
任何建议表示赞赏。
致谢。
答案 0 :(得分:0)
RFC 4180
2.5每个字段可能会或可能不会包含在双引号中...如果字段未包含在双引号中,则字段内可能不会出现双引号。
2.6包含换行符(CRLF),双引号和逗号的字段应用双引号引起来。
2.7如果使用双引号将字段括起来,则必须在字段内部出现的双引号前面加上另一个双引号来转义。例如:
“ aaa”,“ b”,“ bb”,“ ccc”
并非所有内容都完全符合csv。其他定界符也可以,并且引用规则可能会有所不同,因此在此处尝试相互通信的两个库之间可能存在特定于库的问题。 但是,既然您提到要用引号引起来,我建议您尝试使用这种格式(尽管我只是将每个字段都用双引号引起来
100 | I | 50 | 100010012 | F |“ 1”“ PAE” |“ 1-8”“ PAE” | 20190 | C | 1
或者如果该管道也应该在现场,也许您是这个意思?
100 | I | 50 | 100010012 | F |“ 1”“ PAE | 1-8”“ PAE” | 20190 | C | 1
答案 1 :(得分:0)
对于任何好奇的人,我都将整个记录作为blob加载到int表中,并从int表中解析并加载了目标表。到目前为止,转义双引号似乎是不可能的。
答案 2 :(得分:0)
我们在这里遇到了同样的问题,可以通过以下方法解决:
quote_character=""
有趣的是,当我们完成#quote_character
或quote_character=None
\ o /