資料表主要用於資料的儲存與查詢。建立資料表後,您可以根據實際管理資料表,例如擷取執行個體中的所有表名稱、查詢資料表的配置資訊、更新資料表的配置資訊等。
介面
表操作包括CreateTable、ListTable、UpdateTable、DescribeTable和DeleteTable介面,詳細說明請參見下表。
介面 | 說明 |
---|---|
CreateTable | 建立一張資料表或者建立一張帶有索引表的資料表。 |
ListTable | 擷取當前執行個體下已建立的所有表的表名。 |
UpdateTable | 更新資料表的配置資訊。 |
DescribeTable | 查詢資料表的配置資訊。 |
DeleteTable | 刪除一張資料表。 |
建立資料表(CreateTable)
使用CreateTable介面建立資料表時,需要指定資料表的結構資訊和配置資訊,高效能執行個體中的資料表還可以根據需要設定預留讀/寫輸送量。建立資料表的同時支援建立一個或者多個索引表。
使用SDK
參數
參數 | 說明 |
---|---|
tableMeta | 資料表的結構資訊,包括如下內容:
|
tableOptions | 資料表的配置資訊。更多資訊,請參見資料版本和生命週期。
配置資訊包括如下內容:
|
reservedThroughtput | 為資料表配置預留讀輸送量或預留寫輸送量。
容量型執行個體中的資料表的預留讀/寫輸送量只能設定為0,不允許預留。 預設值為0,即完全隨用隨付。 單位為CU。
|
indexMetas | 索引表的結構資訊,每個indexMeta都包括如下內容:
|
樣本
- 建立資料表(不帶索引)
private static void createTable(SyncClient client) { TableMeta tableMeta = new TableMeta(TABLE_NAME); tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME, PrimaryKeyType.STRING)); //為主表添加主鍵列。 int timeToLive = -1; //資料的到期時間,單位為秒,-1表示永不到期。帶索引表的資料表資料生命週期必須設定為-1。 int maxVersions = 3; //儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引表的資料表最大版本數必須設定為1。 TableOptions tableOptions = new TableOptions(timeToLive, maxVersions); CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions); request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0))); //設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能執行個體中的資料表可以設定為非零值。 client.createTable(request); }
- 建立資料表(帶索引且索引類型為全域二級索引)
private static void createTable(SyncClient client) { TableMeta tableMeta = new TableMeta(TABLE_NAME); tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME_1, PrimaryKeyType.STRING)); //為資料表添加主鍵列。 tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME_2, PrimaryKeyType.INTEGER)); //為資料表添加主鍵列。 tableMeta.addDefinedColumn(new DefinedColumnSchema(DEFINED_COL_NAME_1, DefinedColumnType.STRING)); //為資料表添加預定義列。 tableMeta.addDefinedColumn(new DefinedColumnSchema(DEFINED_COL_NAME_2, DefinedColumnType.INTEGER)); //為資料表添加預定義列。 int timeToLive = -1; //資料的到期時間,單位為秒,-1表示永不到期。帶索引表的資料表資料生命週期必須設定為-1。 int maxVersions = 1; //儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引表的資料表最大版本數必須設定為1。 TableOptions tableOptions = new TableOptions(timeToLive, maxVersions); ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>(); IndexMeta indexMeta = new IndexMeta(INDEX_NAME); indexMeta.addPrimaryKeyColumn(DEFINED_COL_NAME_1); //為索引表添加主鍵列。 indexMeta.addDefinedColumn(DEFINED_COL_NAME_2); //為索引表添加屬性列。 indexMetas.add(indexMeta); CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, indexMetas); //建立資料表的同時建立索引表。 client.createTable(request); }
- 建立資料表(帶索引且索引類型為本地二級索引)
private static void createTable(SyncClient client) { TableMeta tableMeta = new TableMeta(TABLE_NAME); tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME_1, PrimaryKeyType.STRING)); //為資料表添加主鍵列。 tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME_2, PrimaryKeyType.INTEGER)); //為資料表添加主鍵列。 tableMeta.addDefinedColumn(new DefinedColumnSchema(DEFINED_COL_NAME_1, DefinedColumnType.STRING)); //為資料表添加預定義列。 tableMeta.addDefinedColumn(new DefinedColumnSchema(DEFINED_COL_NAME_2, DefinedColumnType.INTEGER)); //為資料表添加預定義列。 int timeToLive = -1; //資料的到期時間,單位為秒,-1表示永不到期。帶索引表的資料表資料生命週期必須設定為-1。 int maxVersions = 1; //儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引表的資料表最大版本數必須設定為1。 TableOptions tableOptions = new TableOptions(timeToLive, maxVersions); ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>(); IndexMeta indexMeta = new IndexMeta(INDEX_NAME); indexMeta.setIndexType(IT_LOCAL_INDEX); //設定索引類型為本地二級索引(IT_LOCAL_INDEX)。 indexMeta.setIndexUpdateMode(IUM_SYNC_INDEX); //設定索引更新模式為同步更新(IUM_SYNC_INDEX)。當索引類型為本地二級索引時,索引更新模式必須為同步更新。 indexMeta.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1); //為索引表添加主鍵列。索引表的第一列主鍵必須與資料表的第一列主鍵相同。 indexMeta.addPrimaryKeyColumn(DEFINED_COL_NAME_1); //為索引表添加主鍵列。 indexMeta.addDefinedColumn(DEFINED_COL_NAME_2); //為索引表添加屬性列。 indexMetas.add(indexMeta); CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, indexMetas); //建立資料表的同時建立索引表。 client.createTable(request); }
列出表名稱(ListTable)
使用ListTable介面擷取當前執行個體下已建立的所有表的表名。
使用SDK
樣本
擷取執行個體下所有表的表名。
private static void listTable(SyncClient client) {
ListTableResponse response = client.listTable();
System.out.println("表的列表如下:");
for (String tableName : response.getTableNames()) {
System.out.println(tableName);
}
}
更新表資訊(UpdateTable)
使用UpdateTable介面修改配置資訊(TableOptions)、預留讀輸送量或者預留寫輸送量(ReservedThroughput)。
使用SDK
參數
- TableOptions
TableOptions 包含表的 TTL、MaxVersions 和 MaxTimeDeviation 。
參數 定義 說明 TTL TimeToLive,資料存活時間 - 單位:秒。
- 如果期望資料永不到期,TTL 可設定為 -1。
- 資料是否到期是根據資料的時間戳記、目前時間、表的 TTL三者進行判斷的。
目前時間 - 資料的時間戳記 > 表的 TTL
時,資料會到期並被清理。 - 在使用 TTL 功能時需要注意寫入時是否指定了時間戳記,以及指定的時間戳記是否合理。如需指定時間戳記,建議設定MaxTimeDeviation。
MaxTimeDeviation 寫入資料的時間戳記與系統目前時間的偏差允許最大值 - 預設情況下系統會為新寫入的資料產生一個時間戳記,資料自動到期功能需要根據這個時間戳記判斷資料是否到期。使用者也可以指定寫入資料的時間戳記。如果使用者寫入的時間戳記非常小,與目前時間偏差已經超過了表上設定的 TTL 時間,寫入的資料會立即到期。設定 MaxTimeDeviation 可以避免這種情況。
- 單位:秒。
MaxVersions 每個屬性列保留的最大版本數 如果寫入的版本數超過 MaxVersions,服務端只會保留 MaxVersions 中指定的最大的版本。 - ReservedThroughtput
表的預留讀/寫輸送量配置。
- ReservedThroughput 的調整有時間間隔限制,目前調整間隔為 1 分鐘。
- 設定 ReservedThroughtput 後,Tablestore按照您預留讀/寫輸送量進行計費。
- 當 ReservedThroughtput 大於 0 時,Tablestore會按照預留量和期間進行計費,超出預留的部分進行隨用隨付。更多資訊參見計費,以免產生未期望的費用。
- 預設值為 0,即完全隨用隨付。
- 容量型執行個體的預留讀/寫輸送量只能設定為 0,不允許預留。
樣本
更新表的TTL和最大版本數。
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);
}
查詢表描述資訊(DescribeTable)
使用DescribeTable介面可以查詢指定表的結構、預留讀/寫輸送量詳情等資訊。
使用SDK
參數
參數 | 說明 |
---|---|
tableName | 表名。 |
樣本
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());
}
刪除資料表(DeleteTable)
使用DeleteTable介面刪除當前執行個體下指定資料表。
使用SDK
參數
參數 | 說明 |
---|---|
tableName | 資料表名稱。 |
樣本
private static void deleteTable(SyncClient client) {
DeleteTableRequest request = new DeleteTableRequest(TABLE_NAME);
client.deleteTable(request);
}
其他動作方式
您還可以使用控制台或者命令列工具進行表操作。