SDK提供了CreateTable、ListTable、UpdateTable、DescribeTable和DeleteTable等表層級的操作介面。

说明 以下操作為同步介面的樣本,非同步介面的操作請參見非同步介面

建立表(CreateTable)

建立表時必須指定表的名字和主鍵。主鍵包含 1~4 個主鍵列,每一個主鍵列都有名字和類型。

Table Store的表可以設定自增主鍵列,詳情參見主鍵列自增

樣本

在本樣本中,表名為simple_create_delete_table,主鍵只含一個主鍵列,名為pkey,類型為整型(kPKT_Integer)。

CreateTableRequest req;
{
    // immutable configurations of the table
    TableMeta& meta = req.mutableMeta();
    meta.mutableTableName() = "simple_create_delete_table";
    {
        // with exactly one integer primary key column
        Schema& schema = meta.mutableSchema();
        PrimaryKeyColumnSchema& pkColSchema = schema.append();
        pkColSchema.mutableName() = "pkey";
        pkColSchema.mutableType() = kPKT_Integer;
    }
}
CreateTableResponse resp;
Optional<OTSError> res = client.createTable(resp, req);
说明 詳細代碼在createTable@GitHub擷取。

可變參數

您可以在資料表上設定若干可變參數。可變參數可以在建表時設定,也可以通過更新表來修改。

可變參數包括以下幾項:

可變參數 名稱 預設值
mutableTimeToLive() 資料生命週期 -1(即永不到期)
mutableMaxVersions() 最大版本數 1
mutableMaxTimeDeviation() 有效版本偏差 86400秒(即一天)
mutableReservedThroughput() 預留讀寫輸送量 0(即全部讀寫隨用隨付)

以下是一個建表時設定預留讀寫輸送量的樣本:

CreateTableRequest req;
{
    // immutable configurations of the table
    TableMeta& meta = req.mutableMeta();
    meta.mutableTableName() = "create_table_with_reserved_throughput";
    {
        // with exactly one integer primary key column
        Schema& schema = meta.mutableSchema();
        PrimaryKeyColumnSchema& pkColSchema = schema.append();
        pkColSchema.mutableName() = "pkey";
        pkColSchema.mutableType() = kPKT_Integer;
    }
}
{
    TableOptions& opts = req.mutableOptions();
    {
        // 0 reserved read capacity-unit, 1 reserved write capacity-unit
        CapacityUnit cu(0, 1);
        opts.mutableReservedThroughput().reset(util::move(cu));
    }
}
CreateTableResponse resp;
Optional<OTSError> res = client.createTable(resp, req);

列出表名稱(ListTable)

擷取當前執行個體下已建立的所有表的表名。

介面

使用SyncClient::listTable()來列舉執行個體下的所有表。

SyncClient* client = ...;
ListTableRequest req;
ListTableResponse resp;
Optional<OTSError> res = client->listTable(resp, req);

樣本

擷取執行個體下的所有表名。

const IVector<string>& xs = resp.tables();
for(int64_t i = 0; i < xs.size(); ++i) {
    cout << xs[i] << endl;
}
说明 詳細代碼在listTable@GitHub擷取。

更新表(UpdateTable)

更新指定表的可變參數

樣本

更新預留輸送量。

UpdateTableRequest req;
req.mutableTable() = "YourTable";
UpdateTableResponse resp;
{
    TableOptions& opts = req.mutableOptions();
    {
        // 0 reserved read capacity-unit, 1 reserved write capacity-unit
        CapacityUnit cu(0, 1);
        opts.mutableReservedThroughput().reset(util::move(cu));
    }
}
Optional<OTSError> res = client.updateTable(resp, req);
说明 詳細代碼在updateTable@GitHub擷取。

查詢表資訊(DescribeTable)

通過describeTable()介面可以查詢如下表資訊:

資訊項 描述
表的狀態 包括:
  • kTS_Active:表可以正常提供讀寫服務。
  • kTS_Inactive:表上不可讀寫,但表上資料保留。通常這個狀態出現在主備表切換時。
  • kTS_Loading:正在建表過程中。表上不可讀寫。
  • kTS_Unloading:正在刪表過程中。表上不可讀寫。
  • kTS_Updating:正在更新表可變參數中。表上不可讀寫。
表meta 參見建立表
表的可變參數 參見可變參數
分區之間的分割點 Table Store上的一張表被水平切分成若干分區。通過這個介面可以擷取各分區間的分割點。
说明 由於Table Store會在後台根據負載進行自動分裂與合并,這個介面取到的分割點保證是曾經出現過的分區情況,但不保證與當前情況完全吻合。

樣本

DescribeTableRequest req;
req.mutableTable() = "YourTable";
DescribeTableResponse resp;
Optional<OTSError> res = client.describeTable(resp, req);
说明 詳細代碼在describeTable@GitHub擷取。

刪除表(DeleteTable)

刪除本執行個體下指定的表。只需指定表名。

樣本

DeleteTableRequest req;
req.mutableTable() = "YourTable";
DeleteTableResponse resp;
Optional<OTSError> res = client.deleteTable(resp, req);
说明 詳細代碼在deleteTable@GitHub擷取。