您好目前我已在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');
但其中一个提交(处理状态)值包含逗号“欧洲,中东和非洲”,它取代了列顺序。
那么读取此文件的最佳方法是什么。感谢
答案 0 :(得分:0)
作为解决方法 - 查看aws glue项目。
而不是通过CREATE EXTERNAL TABLE
创建表格:
合并以下StorageDescriptor
部分:
{ “StorageDescriptor”:{ “SerdeInfo”:{ “SerializationLibrary”:“org.apache.hadoop.hive.serde2.OpenCSVSerde” ... } ... }
通过aws cli执行创建。您将在aws glue中获得此表,并且athena能够选择正确的列。
备注强>
OpenCSVSerde
- 可能会解决此问题,您可以简单地重新创建此表。答案 1 :(得分:0)
当我删除此部分时
WITH SERDEPROPERTIES (
'separatorChar' = ',',
'quoteChar' = '\"',
'escapeChar' = '\\'
)
我能够阅读引号中带有逗号的文字
答案 2 :(得分:0)
这是一种常见的混乱 CSV 文件情况,其中某些值包含逗号。 Athena 中的解决方案是使用 AWS doc https://docs.aws.amazon.com/athena/latest/ug/csv-serde.html 中所述的 SERDEPROPERTIES [url 可能会更改,因此只需搜索“OpenCSVSerDe for Processing”]
以下是提供的基本创建表示例。根据您的数据,您必须确保正确指定数据类型(例如字符串)
创建外部表 test1 ( f1 字符串, s2 字符串) 行格式 SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ("separatorChar" = ",", "escapeChar" = "\") LOCATION 's3://user-test-region/dataset/test1/'