代码之家  ›  专栏  ›  技术社区  ›  Amelio Vazquez-Reina

preto(雅典娜)加载带引号转义逗号的csv文件

  •  0
  • Amelio Vazquez-Reina  · 技术社区  · 6 年前

    在csv文件中考虑以下行:

    1,0,True,"{""foo"":null,""bar"":null}",0,1
                           ▲
    

    高亮显示 , 列的一部分 . 也就是说,全文如下: " {""foo"":null,""bar"":null}" 是单个列的值。但是,Aws Athena正在解释突出显示的 , 作为一个 列分隔逗号 ,错误地将该文本拆分为多列。

    我知道我可以将列分隔符更改为其他内容以避免这个问题。我的问题是:这是一个漏洞在AWS雅典娜/普雷斯托?我怎样才能避开这些逗号?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tanveer Uddin    6 年前

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

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

    1,0,True,"{""foo"":null,""bar"":null}",0,1
    

    如何在数据中转义逗号

    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/'