DynamoDB导入S3 CSV未全量入库?仅导入900条而非15000条
以下是几个常见的原因及排查方向:
CSV格式或字段匹配错误
DynamoDB对导入的CSV格式有严格要求:如果存在未闭合的引号、分隔符与导入配置不一致、字段名和表的键/属性不匹配,或者某行数据格式不符合表定义的类型,这些行都会被直接跳过。
排查方法:去导入任务指定的S3输出位置查看日志文件,里面会记录跳过的行及具体错误原因;同时核对CSV的字段顺序、分隔符是否和导入时的配置一致,确保所有主键字段(分区键+排序键)在CSV中都存在且格式正确。主键重复导致数据覆盖
如果CSV中存在大量重复的主键组合(分区键+排序键),DynamoDB会用后续的条目覆盖之前的,最终只保留每个唯一主键的最后一条记录。如果15000条数据里只有900个唯一主键,就会出现这种情况。
排查方法:统计CSV中主键列的唯一值数量;查看导入任务的执行报告,里面会显示“写入成功”和“因主键重复跳过”的记录数。导入任务未完全执行
有时候控制台显示任务“完成”,但实际因权限问题(比如S3 bucket的权限未正确配置,导致DynamoDB无法读取全部文件)、网络中断或DynamoDB写入吞吐量限制,任务只处理了部分数据。
排查方法:查看导入任务的详细状态,确认“处理的记录数”是否接近15000;检查CloudWatch中的DynamoDB导入指标,看是否有中断或错误;同时确认S3 bucket的权限是否允许DynamoDB服务角色读取所有CSV文件。数据类型不兼容
如果CSV中的数据类型与表定义的属性类型不匹配,比如表定义的是数字类型,但CSV中对应字段包含非数字字符(如千分位逗号、字母),这些行会被跳过。
排查方法:核对表的每个属性类型与CSV对应字段的格式,比如数字字段不能有非数字字符,布尔值必须是true/false(小写)等;查看导入日志中的类型错误记录。“Get live item count”计数延迟
DynamoDB控制台的“Get live item count”是近似值,刚完成导入时可能还未同步最新数据,存在延迟。
排查方法:可以通过控制台的“Table details”页面查看“Item count”(虽然也是定期更新,但比实时计数更准确);或者使用aws dynamodb scan --table-name <你的表名> --select COUNT命令获取精确计数(注意扫描大表会消耗吞吐量)。
内容的提问来源于stack exchange,提问作者appm

