带有双引号和逗号的 AWS Glue 问题
AWS Glue issue with double quote and commas
我有这个 CSV 文件:
reference,address
V7T452F4H9,"12410 W 62TH ST, AA D"
table 定义中使用了以下选项
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'quoteChar'='\"',
'separatorChar'=',')
但它仍然无法识别数据中的双引号,而且双引号字段中的逗号会弄乱数据。当我 运行 Athena 查询时,结果看起来像这样
reference address
V7T452F4H9 "12410 W 62TH ST
我该如何解决这个问题?
看来您还需要添加 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/';
我这样做是为了解决:
1 - 创建一个不覆盖目标 table 属性的爬虫,我为此使用了 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 控制台中这样做 post (https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#schema-csv-quotes)
只是改变这个:
3 - 运行 再次爬虫。 运行 一如既往的爬虫:
4 - 就是这样,您的第二个 运行 不应更改 table 中的任何数据,它只是为了测试它是否有效 ¯\_(ツ)_/¯。
我有这个 CSV 文件:
reference,address
V7T452F4H9,"12410 W 62TH ST, AA D"
table 定义中使用了以下选项
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'quoteChar'='\"',
'separatorChar'=',')
但它仍然无法识别数据中的双引号,而且双引号字段中的逗号会弄乱数据。当我 运行 Athena 查询时,结果看起来像这样
reference address
V7T452F4H9 "12410 W 62TH ST
我该如何解决这个问题?
看来您还需要添加 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/';
我这样做是为了解决:
1 - 创建一个不覆盖目标 table 属性的爬虫,我为此使用了 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 控制台中这样做 post (https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#schema-csv-quotes) 只是改变这个:
3 - 运行 再次爬虫。 运行 一如既往的爬虫:
4 - 就是这样,您的第二个 运行 不应更改 table 中的任何数据,它只是为了测试它是否有效 ¯\_(ツ)_/¯。