Athena查询S3数据源返回行数多于实际值问题求助
Athena查询行数与S3实际CSV行数不符问题排查
我将数据源存储在S3中,使用Athena查询总行数时,结果比S3里CSV文件的实际行数多,还出现未知值导致数据不一致。已为Athena查询结果指定了和数据源文件夹不同的独立S3路径,恳请协助排查原因。
以下是创建Athena数据库和表的代码:
创建数据库
athena_client.start_query_execution( QueryString='create database cms_data', ResultConfiguration={'OutputLocation': 's3://cms-dashboard-automation/Athenaoutput/'} )
创建外部表
context = {'Database': 'cms_data'} athena_client.start_query_execution( QueryString='''CREATE EXTERNAL TABLE IF NOT EXISTS `cms_data`.`mpf_data` ( `State` String, `County` String, `Org_Name` String, `Contract_ID` String, `Plan_ID` double, `Segment_ID` double, `Plan_Type_Desc` String, `Contract_Year` double, `Category_Name` String, `Service_Name` String, `Limit_Flag` double, `Authorization_Flag` double, `Referral_Flag` double, `Network_Description` String, `Cost_Share` String ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = ',', 'field.delim' = ',' ) LOCATION 's3://cms-dashboard-automation/MPF_Data/' TBLPROPERTIES ('has_encrypted_data'='false');''', QueryExecutionContext=context, ResultConfiguration={'OutputLocation': 's3://cms-dashboard-automation/Athenaoutput/'} )
排查方向
- CSV格式解析问题:LazySimpleSerDe无法正确处理字段内包含换行或引号的CSV,会把这类内容识别为新行。建议改用OpenCSVSerDe,修改表的ROW FORMAT配置:
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerDe' WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "\"", "escapeChar" = "\\" ) - S3路径冗余文件:检查数据源路径
s3://cms-dashboard-automation/MPF_Data/下是否存在隐藏文件(如.DS_Store)、Hadoop生成的_SUCCESS文件、临时上传文件等,这些文件会被Athena扫描计入总行数,需清理或排除。 - 未跳过表头:如果CSV文件包含表头,Athena会将表头视为一行数据统计。可在表的TBLPROPERTIES中添加
'skip.header.line.count'='1'来跳过第一行。 - 数据类型不匹配:表中多个字段定义为double类型(如Plan_ID、Limit_Flag),若CSV对应字段存在非数值内容,解析时会产生异常行或错误值。建议检查这些字段的实际数据,必要时改为String类型。
- 元数据未刷新:若S3数据有更新但表元数据未同步,会导致统计异常。执行
MSCK REPAIR TABLE cms_data.mpf_data;刷新元数据。
内容的提问来源于stack exchange,提问作者Ipshita Saxena
相关产品推荐
相关产品推荐

