GlobalTableNotFoundException

TL;DR — DescribeGlobalTable / UpdateGlobalTable 只能看到版本 2017.11.29(Legacy)的全局表。一个建立在版本 2019.11.21(Current)之上的全局表——也就是你应该使用的那个——是通过 DescribeTable / UpdateTable 作为_一张带副本的常规表_来管理的,而旧版 API 会报告它不存在。在断定表没了之前,先检查你所在的版本。

含义

GlobalTableNotFoundException: The specified global table does not exist.

DynamoDB 有两代全局表,带两套互不相交的 API 表面。旧版(2017.11.29)会注册一个命名的"全局表"对象,DescribeGlobalTableUpdateGlobalTableUpdateGlobalTableSettings 都对它操作。当前版本(2019.11.21)没有这样的对象——副本存在于表本身上——因此那些旧版调用会以这个异常回应,即便你的表复制得非常好。

为什么会发生

  • 该表是一个当前版本(2019.11.21)的全局表——这是目前最常见的原因:旧版 API 干脆没有索引它。
  • 从未以该名称创建过全局表——表存在但没有副本,或者复制设置早前失败了。
  • 区域错误或名称拼错——旧版全局表注册是按精确名称查找的。

如何修复

  1. 确定版本:

    aws dynamodb describe-table --table-name orders \
      --query 'Table.GlobalTableVersion'
    # "2019.11.21" → use DescribeTable/UpdateTable, not the legacy APIs
  2. 通过 UpdateTable 管理当前版本的副本:

    aws dynamodb update-table --table-name orders \
      --replica-updates '[{"Create": {"RegionName": "eu-west-1"}}]'

    并用 describe-tableReplicas 字段)而非 describe-global-table 来检查它们。

  3. 在使用旧版工具? 如果你确实运营 2017.11.29 全局表,核实注册的名称和区域——并规划升级到 2019.11.21,AWS 为了灵活性和更低的复制写入成本而推荐它。

  4. 从零创建: 创建表,然后通过 UpdateTable 添加副本——不要在新代码中动用 CreateGlobalTable(旧版)。

跨区域检查副本健康状况时,把表并排放在一起会更快——DynoTable 桌面应用从一个窗口连接到每个区域,而 DynamoDB 定价计算器会在你添加副本之前估算复制写入成本。

相关错误

References

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。

无需控制台即可使用 DynamoDB

DynoTable 是面向 DynamoDB 的快速桌面客户端 —— 浏览表、运行 SQL 风格的查询,并在本地编辑项。