【问题标题】:AWS Glue issue with double quote and commas双引号和逗号的 AWS Glue 问题
【发布时间】:2018-10-25 12:27:15
【问题描述】:

我有这个 CSV 文件:

reference,address
V7T452F4H9,"12410 W 62TH ST, AA D"

在表定义中使用了以下选项

ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES ( 
  'quoteChar'='\"', 
  'separatorChar'=',') 

但它仍然无法识别数据中的双引号,并且双引号字段中的逗号会弄乱数据。当我运行 Athena 查询时,结果如下所示

reference     address
V7T452F4H9    "12410 W 62TH ST

我该如何解决这个问题?

【问题讨论】:

    标签: hadoop hive presto amazon-athena aws-glue


    【解决方案1】:

    看来您还需要添加escapeCharAWS Athena docs 展示了这个例子:

    CREATE EXTERNAL TABLE myopencsvtable (
       col1 string,
       col2 string,
       col3 string,
       col4 string
    )
    ROW FORMAT SERDE 
    'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    WITH SERDEPROPERTIES (
       'separatorChar' = ',',
       'quoteChar' = '\"',
       'escapeChar' = '\\'
       )
    STORED AS TEXTFILE
    LOCATION 's3://location/of/csv/';
    

    【讨论】:

      【解决方案2】:

      我这样做是为了解决:

      1 - 创建一个不覆盖目标表属性的爬虫,我为此使用了 boto3,但可以在 AWS 控制台中创建它,执行此操作(更改 de xxx-var):

      import boto3
      
      client = boto3.client('glue')
      
      response = client.create_crawler(
          Name='xxx-Crawler-Name',
          Role='xxx-Put-here-your-rol',
          DatabaseName='xxx-databaseName',
          Description='xxx-Crawler description if u need it',
          Targets={
              'S3Targets': [
                  {
                      'Path': 's3://xxx-Path-to-s3/',
                      'Exclusions': [
                      ]
                  },
              ]
          },
          SchemaChangePolicy={
              'UpdateBehavior': 'LOG',
              'DeleteBehavior': 'LOG'
          },
          Configuration='{ \
              "Version": 1.0, \
              "CrawlerOutput": { \
                  "Partitions": {"AddOrUpdateBehavior": "InheritFromTable" \
                  }, \
                  "Tables": {"AddOrUpdateBehavior": "MergeNewColumns" } \
              }  \
          }'
      )
      
      # run the crawler
      response = client.start_crawler(
          Name='xxx-Crawler-Name'
      )
      

      2 - 编辑序列化库,我在 AWS 控制台中执行此操作,就像说这篇文章 (https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#schema-csv-quotes) 改变这个:

      3 - 再次运行爬虫。像往常一样运行爬虫:

      4 - 就是这样,你的第二次运行不应该改变表中的任何数据,它只是为了测试它的工作原理¯\_(ツ)_/¯。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2019-05-05
      相关资源
      最近更新 更多