DynamoDB全局二级索引(GSI)始终为空问题排查求助
DynamoDB GSI无数据问题排查与解决
核心原因:属性名大小写不匹配
你的GSI排序键定义的是createdAt(小写c开头),但写入数据时使用的是CreatedAt(大写C开头)。DynamoDB属性名严格区分大小写,这直接导致GSI无法识别到对应的排序键属性,因此不会将条目纳入索引范围。
对比表结构中的属性定义:
{ "AttributeName": "createdAt", "AttributeType": "N" }
对比你写入的数据:
"CreatedAt": { "N": str(current_time) },
修复步骤
- 修正写入数据的属性名,将
CreatedAt改为createdAt,确保与GSI定义的排序键名称完全一致:item = { "userID": {"S": user_id}, "ServiceID": {"S": app}, "ClusterID": {"S": cluster_name}, "createdAt": {"N": str(current_time)}, # 改为小写开头的属性名 "Namespace": {"S": "namespace"}, "Ingress": {"S": "ingress"} } - 重新写入数据后,GSI会自动同步符合条件的条目(你的GSI投影类型为
ALL,只要属性名称匹配就会被索引)。 - 对于已写入的旧数据,需要更新其属性名,将
CreatedAt改为createdAt,才能被GSI索引到。
额外验证项
- 确认GSI状态为
ACTIVE(你的表结构显示已处于ACTIVE状态,无异常)。 - 确保写入数据中的
ClusterID值与查询条件一致(比如你要查询的"foo"),同时createdAt是合法的数字类型(str(current_time)需保证转换后为有效数字字符串,比如时间戳整数)。
内容的提问来源于stack exchange,提问作者Alexander Shitikov
相关产品推荐
相关产品推荐

