表格存储的 SDK 提供了 CreateTable、ListTable、DeleteTable、UpdateTable 和 DescribeTable 等表级别的操作接口。
创建表(CreateTable)
表格存储建表时需要指定表的结构信息(TableMeta)和配置信息(TableOptions),也可指定表的预留读/写吞吐量(ReservedThroughput)。
建表后服务端需要将表的分片加载到某个节点上,因此需要等待几秒钟才能对表进行读写,否则会抛出异常。
TableMeta
TableMeta 包含表名和表的主键定义。
private static void createTable(SyncClient client) {
TableMeta tableMeta = new TableMeta(TABLE_NAME);
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME, PrimaryKeyType.STRING));
// 数据的过期时间, 单位秒, -1代表永不过期. 假如设置过期时间为一年, 即为 365 * 24 * 3600.
int timeToLive = -1;
// 保存的最大版本数, 设置为3即代表每列上最多保存3个最新的版本.
int maxVersions = 3;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
CreateTableRequestEx request = new CreateTableRequestEx(tableMeta, tableOptions);
// 设置读写预留值,容量型实例只能设置为0,高性能实例可以设置为非零值
request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0)));
client.createTable(request);
}
private static void listTable(SyncClient client) {
ListTableResponse response = client.listTable();
System.out.println("表的列表如下:");
for (String tableName : response.getTableNames()) {
System.out.println(tableName);
}
}
private static void updateTable(SyncClient client) {
int timeToLive = -1;
int maxVersions = 5; //更新最大版本数为5.
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
UpdateTableRequest request = new UpdateTableRequest(TABLE_NAME);
request.setTableOptionsForUpdate(tableOptions);
client.updateTable(request);
}
private static void describeTable(SyncClient client) {
DescribeTableRequest request = new DescribeTableRequest(TABLE_NAME);
DescribeTableResponse response = client.describeTable(request);
TableMeta tableMeta = response.getTableMeta();
System.out.println("表的名称:" + tableMeta.getTableName());
System.out.println("表的主键:");
for (PrimaryKeySchema primaryKeySchema : tableMeta.getPrimaryKeyList()) {
System.out.println(primaryKeySchema);
}
TableOptions tableOptions = response.getTableOptions();
System.out.println("表的TTL:" + tableOptions.getTimeToLive());
System.out.println("表的MaxVersions:" + tableOptions.getMaxVersions());
ReservedThroughputDetails reservedThroughputDetails = response.getReservedThroughputDetails();
System.out.println("表的预留读吞吐量:"
+ reservedThroughputDetails.getCapacityUnit().getReadCapacityUnit());
System.out.println("表的预留写吞吐量:"
+ reservedThroughputDetails.getCapacityUnit().getWriteCapacityUnit());
}
private static void deleteTable(SyncClient client) {
DeleteTableRequest request = new DeleteTableRequest(TABLE_NAME);
client.deleteTable(request);
}
private static void describeTable(SyncClient client) {
// 以200MB划分分片
ComputeSplitsBySizeRequest request = new ComputeSplitsBySizeRequest(TABLE_NAME, 2);
ComputeSplitsBySizeResponse response = client.computeSplitsBySize(computeSplitsBySizeRequest);
System.out.println("ConsumedCapacity=" + response.getConsumedCapacity().jsonize());
System.out.println("PrimaryKeySchema=" + response.getPrimaryKeySchema());
System.out.println("RequestId=" + response.getRequestId());
System.out.println("TraceId=" + response.getTraceId());
List<Split> splits = response.getSplits();
System.out.println("splits.size=" + splits.size());
Iterator<Split> iterator = splits.iterator();
while (iterator.hasNext()) {
Split split = iterator.next();
System.out.println("split.getLocation()=" + split.getLocation());
// split.getLowerBound()和split.getUpperBound()可以直接灌进RangeRowQueryCriteria交给getRange()或createRangeIterator()
System.out.println("split.getLowerBound()=" + split.getLowerBound().jsonize());
System.out.println("split.getLowerBound()=" + split.getUpperBound().jsonize());
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。