全部产品
Search
文档中心

表格存储:创建全局表

更新时间:Feb 04, 2026

本文介绍如何通过Java SDK创建表格存储的全局表。

注意事项

创建操作返回成功后,系统会以异步方式同步数据,可通过调用DescribeGlobalTable查看全局表的当前状态。当返回状态为active时,表示全局表创建成功。

前提条件

  • 在源地域和目标地域创建实例。

  • 在源地域创建数据表。数据表的配置必须是数据生命周期TTL为-1(数据永不过期)、最大版本数为1、最大版本偏差无限制(即Integer.MAX_VALUE)以及开启行版本(即updateFullRow为True)。

    重要

    开启行版本后存在如下限制:

    • 单行数据最多支持 256 列。

    • 写入数据时不支持手动指定版本号,只能由系统自动生成。

    • 执行 Update 操作时,系统需先读取当前行版本,因此会带来少量额外的读取负载。

  • 初始化客户端

    重要

    当使用RAM用户的AccessKey初始化客户端时,请确保RAM用户具有创建全局表相关的权限。具体Action定义请参见表格存储的API类型

方法说明

public CreateGlobalTableResponse createGlobalTable(CreateGlobalTableRequest createGlobalTableRequest) throws TableStoreException, ClientException

CreateGlobalTableRequest参数说明

  • baseTable(必选)BaseTable:基础表信息,默认可写入数据,包含以下参数。

    名称

    类型

    说明

    regionId(必选)

    String

    地域ID,例如cn-hangzhou。

    instanceName(必选)

    String

    实例名称。

    tableName(必选)

    String

    基础表名称,也是全局表名称。

  • placements(必选)List<Placement>:表的分布位置配置列表。包含以下参数。

    名称

    类型

    说明

    regionId(必选)

    String

    地域ID,例如cn-beijing。

    instanceName(必选)

    String

    实例名称。

    writable(必选)

    boolean

    是否可写。默认值为false。当使用主备模式时,请保持默认配置。当使用多写模式时,请按需配置此项为true。

  • syncMode(必选)SyncMode:数据同步模式。目前支持ROW(行级同步)。

  • serveMode(可选)ServeMode:服务模式。取值范围:

    • PRIMARY_SECONDARY(默认值):主备模式。主地域可读写,备地域为只读。数据由主地域同步至备地域。适用于一写多读(本地读)、容灾备份、异地热备的场景。

    • PEER_TO_PEER:多活模式。所有地域可同时读写。基于最后一次写入优先原则LWW(Last Write Wins)按行或按列解决冲突。适用于多地域低延迟读写业务的场景。

示例

创建主备模式的全局表

private static void createGlobalTableExample(SyncClient client){
    // 构造请求
    CreateGlobalTableRequest req = new CreateGlobalTableRequest(
            // 基础表配置,必须是已存在的表
            new GlobalTableTypes.BaseTable(
                    // 基础表所在地域 ID
                    "cn-hangzhou",  
                    // 基础表所在实例名称   
                    "i-gt-test",  
                    // 基础表的表名(同时也是全局表的表名)     
                    "t-gt-test-1"
            ),
            // 全局表同步模式:目前仅支持 ROW 模式(行级同步)
            GlobalTableTypes.SyncMode.ROW
    );

    // 添加关联表(可添加多个)
    req.addPlacement(new GlobalTableTypes.Placement(
            // 关联表所在地域 ID
            "cn-shanghai", 
            // 关联表所在实例名称,实例必须已存在
            // 实例中不能存在与基础表同名的表,表由系统自动创建     
            "i-dest-test",         
            // 是否可写,false表示只读。主备模式下只能设置为false
            false
    ));

    // 设置服务模式为主备架构(PRIMARY_SECONDARY)
    req.setServeMode(GlobalTableTypes.ServeMode.PRIMARY_SECONDARY);

    // 发起请求
    CreateGlobalTableResponse createResp = client.createGlobalTable(req);

    // 打印响应结果
    System.out.println("Global table creation initiated.");
    System.out.println("RequestId: " + createResp.getRequestId());
    System.out.println("GlobalTableId: " + createResp.getGlobalTableId());
}

创建多活模式的全局表

private static void createGlobalTableExample(SyncClient client){
    // 构造请求
    CreateGlobalTableRequest req = new CreateGlobalTableRequest(
            // 基础表配置,必须是已存在的表
            new GlobalTableTypes.BaseTable(
                    // 基础表所在地域 ID
                    "cn-hangzhou",
                    // 基础表所在实例名称                         
                    "i-gt-test", 
                    // 基础表的表名(同时也是全局表的表名)       
                    "t-gt-test-1"      
            ),
            // 全局表同步模式:目前仅支持 ROW 模式(行级同步)
            GlobalTableTypes.SyncMode.ROW   
    );

    // 添加关联表(可添加多个)
    req.addPlacement(new GlobalTableTypes.Placement(
            // 关联表所在地域 ID
            "cn-shanghai",
            // 关联表所在实例名称,实例必须已存在
            // 实例中不能存在与基础表同名的表,表由系统自动创建     
            "i-dest-test",        
            // 是否可写:多写模式下可按需设置为true或false
            true          
    ));

    // 设置服务模式为多活模式(PEER_TO_PEER)
    req.setServeMode(GlobalTableTypes.ServeMode.PEER_TO_PEER);

    // 发起请求
    CreateGlobalTableResponse createResp = client.createGlobalTable(req);

    // 打印响应结果
    System.out.println("Global table creation initiated.");
    System.out.println("RequestId: " + createResp.getRequestId());
    System.out.println("GlobalTableId: " + createResp.getGlobalTableId());
}