You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB全局二级索引(GSI)始终为空问题排查求助

DynamoDB GSI无数据问题排查与解决

核心原因:属性名大小写不匹配

你的GSI排序键定义的是createdAt(小写c开头),但写入数据时使用的是CreatedAt(大写C开头)。DynamoDB属性名严格区分大小写,这直接导致GSI无法识别到对应的排序键属性,因此不会将条目纳入索引范围。

对比表结构中的属性定义:

{
    "AttributeName": "createdAt",
    "AttributeType": "N"
}

对比你写入的数据:

"CreatedAt": {
    "N": str(current_time)
},

修复步骤

  1. 修正写入数据的属性名,将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"}
    }
    
  2. 重新写入数据后,GSI会自动同步符合条件的条目(你的GSI投影类型为ALL,只要属性名称匹配就会被索引)。
  3. 对于已写入的旧数据,需要更新其属性名,将CreatedAt改为createdAt,才能被GSI索引到。

额外验证项

  • 确认GSI状态为ACTIVE(你的表结构显示已处于ACTIVE状态,无异常)。
  • 确保写入数据中的ClusterID值与查询条件一致(比如你要查询的"foo"),同时createdAt是合法的数字类型(str(current_time)需保证转换后为有效数字字符串,比如时间戳整数)。

内容的提问来源于stack exchange,提问作者Alexander Shitikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:37:24