Presto (Athena) 加载带有引号转义逗号的 CSV 文件

Ame*_*ina 3 csv presto amazon-athena

考虑 CSV 文件中的以下行:

\n\n
1,0,True,"{""foo"":null,""bar"":null}",0,1\n                       \xe2\x96\xb2\n
Run Code Online (Sandbox Code Playgroud)\n\n

突出显示的,列的一部分。也就是说,这个全文:" {""foo"":null,""bar"":null}"是单列的值。但是,AWS Athena 会将突出显示的内容解释,列分隔逗号,从而错误地将文本拆分为多列。

\n\n

我知道我可以将列分隔符更改为其他内容以避免此问题。我的问题是:这是 AWS Athena / Presto 中的错误吗?我怎样才能逃脱这些逗号?

\n

Tan*_*din 5

如果您的数据用双引号引起来,则需要使用OpenCSVSerDe

对于示例数据,下表定义有效:

1,0,True,"{""foo"":null,""bar"":null}",0,1
Run Code Online (Sandbox Code Playgroud)

如何转义数据中的逗号

CREATE EXTERNAL TABLE `extra_comma`(
  `a` string COMMENT 'from deserializer', 
  `b` string COMMENT 'from deserializer', 
  `c` string COMMENT 'from deserializer', 
  `d` string COMMENT 'from deserializer',
  `e` string COMMENT 'from deserializer',
  `f` string COMMENT 'from deserializer'
  )
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://aws-glue-stackoverflow/comma_in_data/'
Run Code Online (Sandbox Code Playgroud)