带双引号和逗号的aws胶水问题

p1iqtdky  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(429)

我有这个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

如何解决此问题?

envsm3lx

envsm3lx1#

看起来你还需要加上 escapeChar . aws雅典娜文件展示了这个例子:

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

smtd7mpg2#

我这样做是为了解决:
1-创建一个不会覆盖目标表属性的爬虫程序,我使用boto3实现了这一点,但是可以在aws控制台中创建它,这样做(更改de 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引号)只需更改以下内容:

再次运行爬虫。一如既往地运行爬虫程序:

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

相关问题