Java SDK 可查询全局表状态以及成员物理表的位置、可写状态和数据同步状态等信息。
前提条件
安装初始化客户端并初始化客户端。查询全局表信息需使用 5.17.7 及以上版本。
功能说明
调用 describeGlobalTable 方法查询指定全局表的状态和成员物理表信息。
public DescribeGlobalTableResponse describeGlobalTable(DescribeGlobalTableRequest request) throws TableStoreException, ClientException以下示例通过全局表 ID 查询全局表信息。
String globalTableId = "gt-01234567-89ab-cdef-0123-456789abcdef";
String globalTableName = "example_table";
DescribeGlobalTableRequest request = new DescribeGlobalTableRequest(
globalTableId, globalTableName);
DescribeGlobalTableResponse response = client.describeGlobalTable(request);
System.out.println("GlobalTableId: " + response.getGlobalTableId());
System.out.println("Status: " + response.getStatus());
for (GlobalTableTypes.PhyTable table : response.getPhyTables()) {
System.out.println(
table.getRegionId() + "/" + table.getInstanceName()
+ " status=" + table.getStatus()
+ " writable=" + table.isWritable());
}参数说明
DescribeGlobalTableRequest 包含以下参数。
名称 | 类型 | 说明 |
globalTableName(必选) | String | 全局表名称,必须与基础表名称相同。 |
globalTableId(可选) | String | 全局表 ID。 |
phyTable(可选) | GlobalTableTypes.PhyTable | 用于通过成员物理表定位全局表。 |
returnRpo(可选) | boolean | 是否请求返回恢复点目标(RPO)信息。默认值为 |
物理表定位条件
使用成员物理表定位全局表时,phyTable 包含以下参数。
名称 | 类型 | 说明 |
regionId(必选) | String | 成员物理表所在地域 ID。 |
instanceName(必选) | String | 成员物理表所在实例名称。必须与当前客户端访问的实例一致。 |
返回值
DescribeGlobalTableResponse 包含以下字段。
字段 | 类型 | 说明 |
globalTableId | String | 通过 |
status | GlobalTableTypes.GlobalTableStatus | 通过 |
phyTables |
| 通过 |
全局表状态
status 的取值如下。
取值 | 说明 |
INIT | 初始化中。首次创建全局表后进入此状态。 |
RE_CONF | 重新配置中。一个或多个物理表正在配置,可能由创建表、同步存量数据或添加、移除全局表成员引起。 |
ACTIVE | 已激活。 |
物理表信息
phyTables[] 中每个元素的类型为 GlobalTableTypes.PhyTable,包含以下字段。
字段 | 类型 | 说明 |
regionId | String | 通过 |
instanceName | String | 通过 |
tableName | String | 通过 |
status | GlobalTableTypes.PhyTableStatus | 通过 |
statusTimestamp | long | 通过 |
writable | boolean | 通过 |
role | String | 通过 |
tableId | String | 通过 |
stage | GlobalTableTypes.SyncStage | 通过 |
rpo | Instant | 通过 |
isFailed | boolean | 通过 |
message | String | 通过 |
物理表状态
phyTables[].status 的取值如下。
取值 | 说明 |
PENDING | 排队中。等待其他物理表配置完成后继续处理。 |
INIT | 初始化中。正在创建或配置物理表。 |
SYNCDATA | 同步中。正在同步存量数据,并已开启增量数据同步。 |
READY | 准备完成。存量数据同步完成且增量同步通道已开启,物理表暂不可写。 |
ACTIVE | 已激活并持续同步。物理表是否可写以 |
UNBINDING | 移除中。正在从全局表中移除该物理表,物理表及其数据不会被删除。 |
UNBOUND | 已移除。该物理表已从全局表中移除,物理表及其数据未被删除。 |
场景示例
通过物理表定位全局表
如果未记录全局表 ID,可以通过已知成员物理表的名称、地域和实例定位所属全局表。
通过物理表定位时,返回结果中的 phyTables 为空。如需获取完整成员物理表列表,请先通过 getGlobalTableId() 获取全局表 ID,再按全局表 ID 发起查询。
String globalTableName = "example_table";
String regionId = "cn-hangzhou";
String instanceName = "example-instance";
DescribeGlobalTableRequest request = new DescribeGlobalTableRequest(
globalTableName, regionId, instanceName);
DescribeGlobalTableResponse response = client.describeGlobalTable(request);
System.out.println("GlobalTableId: " + response.getGlobalTableId());
System.out.println("Status: " + response.getStatus());