Athena无OutputRows字段时,如何计算查询输出总行数?
问题解答
不能用EngineExecutionTimeInMillis、DataScannedInBytes这类现有统计数据计算输出总行数,原因很直接:
DataScannedInBytes是查询扫描的原始数据字节量,输出行的大小和原始行可能差异极大(比如经过过滤、聚合、字段裁剪后),字节数和行数没有固定对应关系。EngineExecutionTimeInMillis是查询引擎的执行耗时,它取决于数据分布、查询复杂度、集群资源等因素,和输出行数完全不挂钩。
给你几个可行的替代方案:
- 修改原查询直接获取行数:如果允许调整查询语句,在原查询外层嵌套
COUNT(*)(比如原查询是SELECT * FROM table WHERE ...,改成SELECT COUNT(*) FROM (SELECT * FROM table WHERE ...) t),执行后就能直接得到总行数。如果需要保留原查询结果,可考虑用CTE或者分两次执行查询。 - 读取S3输出文件统计行数:Athena的查询结果默认存储在S3桶中,你可以直接读取输出文件统计行数。比如用AWS CLI命令:
aws s3 cp s3://your-result-bucket/path/to/output.csv - | wc -l(注意如果输出包含表头,需要减去表头行),或者在代码里通过S3 SDK拉取文件内容后计数。 - 排查OutputRows字段缺失的原因:先确认查询类型——如果是DDL语句(比如CREATE TABLE、ALTER),本身没有输出行数,自然不会有
OutputRows字段。如果是DML查询却缺失该字段,检查查询是否已完全执行完成(处于SUCCEEDED状态),另外确认你的IAM角色是否有足够权限获取完整的查询统计信息,权限受限可能导致字段缺失。
内容的提问来源于stack exchange,提问作者Azima
相关产品推荐
相关产品推荐

