Amazon web services 读取AWS athena中值包含逗号的csv文件

Amazon web services 读取AWS athena中值包含逗号的csv文件,amazon-web-services,amazon-s3,amazon-athena,Amazon Web Services,Amazon S3,Amazon Athena,嗨,目前我已经在AWS Athena中创建了一个表模式,如下所示 CREATE EXTERNAL TABLE IF NOT EXISTS axlargetable.AEGIntJnlActivityLogStaging ( `clientcomputername` string, `intjnltblrecid` bigint, `processingstate` string, `sessionid` int, `sessionlogindatetime` string,

嗨,目前我已经在AWS Athena中创建了一个表模式,如下所示

CREATE EXTERNAL TABLE IF NOT EXISTS axlargetable.AEGIntJnlActivityLogStaging (
  `clientcomputername` string,
  `intjnltblrecid` bigint,
  `processingstate` string,
  `sessionid` int,
  `sessionlogindatetime` string,
  `sessionlogindatetimetzid` bigint,
  `recidoriginal` bigint,
  `modifieddatetime` string,
  `modifiedby` string,
  `createddatetime` string,
  `createdby` string,
  `dataareaid` string,
  `recversion` int,
  `partition` bigint,
  `recid` bigint 
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '\"',
   'escapeChar' = '\\'
   ) 
LOCATION 's3://ax-large-table/AEGIntJnlActivityLogStaging/'
TBLPROPERTIES ('has_encrypted_data'='false');
但其中一个字段(processingstate)值包含逗号“Europe、Middle East和Africa”,它按顺序替换列


那么,阅读此文件的最佳方式是什么呢。谢谢作为解决办法-看看aws glue项目

不是通过
创建外部表来创建表

  • 为您的表调用
  • 然后为
  • 合并以下
    StorageDescriptor
    部分:

    { “存储描述符”:{ “SerdeInfo”:{ “序列化库”:“org.apache.hadoop.hive.serde2.OpenCSVSerde” ... } ... }

  • 通过aws cli执行创建。您将在aws glue中获得此表,并且athena能够选择正确的列

  • 注释

  • 如果您的表已经定义了
    OpenCSVSerde
    ,则可以修复此问题,您可以简单地重新创建此表
  • 我对雅典娜不太了解,但在aws glue中,您可以删除或创建表,而不会丢失任何数据
  • 在通过添加此表之前,您必须首先检查glue或/和athena hadles表是如何重复的

  • 当我取下这个零件时

    WITH SERDEPROPERTIES (
    'separatorChar' = ',',
    'quoteChar' = '\"',
    'escapeChar' = '\\'
    ) 
    

    我能够读取带逗号的引用文本

    这是一种常见的混乱CSV文件情况,其中某些值包含逗号。雅典娜的解决方案是使用AWS文档中描述的SerdeProperty[url可能会更改,因此只需搜索“OpenCSVSerDe进行处理”]

    以下是提供的基本创建表示例。根据您的数据,您必须确保正确指定了数据类型(例如字符串)

    创建外部表test1( f1字符串, s2(字符串) 行格式SERDE'org.apache.hadoop.hive.serde2.OpenCSVSerde' 使用SerdeProperty(“分离器“=”,“,”escapeChar“=”\”)
    位置“s3://user test region/dataset/test1/”

    能否显示输入行的示例?具体来说,我们需要查看字符串字段是否用引号括起来。如果用引号括起来,它将读取整个字符串作为一个字段。尝试使用regEx-serde。这可能是可行的。您能分享一些示例记录吗?嗨,John,谢谢您的广告vice和你是对的,因为我的值被引用了,它应该正确显示。但是我发现问题出在下一列,但是我不知道为什么当显示错误消息时,它指向上一列。问题出在第3列而不是第2列。我现在已经解决了。