双引号和逗号的 AWS Glue 问题

Posted

技术标签:

【中文标题】双引号和逗号的 AWS Glue 问题【英文标题】:AWS Glue issue with double quote and commas 【发布时间】: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

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

看来您还需要添加escapeChar。 AWS 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 - 就是这样,你的第二次运行不应该改变表中的任何数据,它只是为了测试它的工作原理¯\_(ツ)_/¯。

【讨论】:

我遇到的另一个有用的链接 --> docs.aws.amazon.com/athena/latest/ug/csv-serde.html

以上是关于双引号和逗号的 AWS Glue 问题的主要内容,如果未能解决你的问题,请参考以下文章

MySQL双引号加逗号,是啥分隔符

从 .CSV 文件的数值中删除双引号和逗号

Pig CSVExcelStorage 双引号逗号

opencsv写入时去掉双引号

hive导入csv文件,字段中双引号内有逗号

使用单引号和双引号混合创建粘合字符串