如何处理及调试Redshift错误代码15004(AQUA扫描错误)
根因说明
这个偶发报错和SQL写法、表数据、连接配置都没关系,是Redshift AQUA高级查询加速层的内部故障:当查询被路由到AQUA节点执行扫描时,节点本地缓存的数据块元数据和S3上实际存储的块位置不匹配,就会抛出AQUA Scan Error: File not found的15004错误,属于Redshift托管侧的偶发基础设施问题,公开文档没收录这个内部错误码是正常情况。
处理方案
- 第一优先级给Airflow任务加重试配置:给对应PythonOperator设置
retries=2、retry_delay=30s即可,绝大多数偶现场景第一次重试就能成功——重试时Redshift会自动重新路由查询、刷新失效的块缓存,不会重复触发问题。 - 如果单查询重试3次以上还是报同样的错,执行查询前先跑一句会话级配置关闭AQUA扫描绕过问题:
SET enable_aqua_scan = OFF;
关闭后查询会直接走Redshift主计算节点扫描,跳过AQUA缓存层,彻底规避这类块不匹配问题,常规查询的性能损耗通常在10%以内,对日常调度任务几乎无感知。
- 如果关了AQUA扫描还是持续报同类错误,直接提AWS支持工单,让后台运维刷新对应集群的AQUA缓存元数据即可——这个是托管侧的运维操作,用户侧没有权限执行,报上错误详情里的query id(比如你贴出的案例里ID是91201921),运维一般10分钟内就能定位修复。
避坑提示
- 不用因为这个报错重建表、重导数据,表内的实际数据没有任何损坏,只是AQUA层的缓存索引出了问题。
- 你用Postgres Hook搭配PythonOperator的用法本身没有问题,这个报错和连接驱动、Hook选型无关,不需要特意替换成Redshift专用Hook。
内容的提问来源于stack exchange,提问作者Cslayer20
相关产品推荐
相关产品推荐

