全部產品
Search
文件中心

Tablestore:建立資料表

更新時間:Nov 13, 2024

本文將通過參數說明和範例程式碼為您介紹如何使用 Java SDK 建立資料表。在建立資料表時,您需要指定資料表的結構資訊和配置資訊。高效能型執行個體中的資料表還可以根據需要設定預留讀寫輸送量。

注意事項

  • 建立資料表後需要幾秒鐘進行載入,在此期間對該資料表的讀寫資料操作均會失敗。請等待資料表載入完畢後再進行資料操作。

  • Table Store提供資料加密儲存功能,如果您有高安全性或合規性要求,可以在建立資料表時配置加密相關參數。具體操作,請參見建立加密表

  • 如果您有主鍵資料自增的需求,例如電商網站的商品 ID、論壇文章的 ID 等情境,可以在建立資料時配置主鍵列自增。具體操作,請參見主鍵列自增

前提條件

介面

/**
 * 說明:根據指定表結構資訊建立資料表。
 * 當建立一個資料表後,通常需要等待幾秒鐘時間使partition load完成,才能進行各種操作。
 * 返回:CreateTableResponse。
 */
CreateTableResponse createTable(CreateTableRequest createTableRequest) throws TableStoreException, ClientException

參數說明

createTableRequest包含以下參數:

參數

說明

tableMeta(必選

資料表的結構資訊,包括如下內容:

  • tableName(必選):資料表名稱。

  • primaryKey(必選):資料表的主鍵定義。更多資訊,請參見核心組件

    • 主鍵資料類型可以為 STRING、INTEGER 或 BINARY。

    • 可以設定 1~4 個主鍵列。Table Store將按照設定的順序產生主鍵,預設按升序進行排序。

    • 第一個主鍵列將作為分區鍵。

  • definedColumns(可選):預定義列資訊。資料類型可以為 STRING、INTEGER、BINARY、DOUBLE 或 BOOLEAN。

    說明
    • 預定義列是預先定義的一些非主鍵列,通常被用作二級索引的主鍵列或預定義列,以實現快速查詢資料的需求。

    • 屬性列在建立表時無需定義,您可以在寫入資料時為每行資料指定不同的屬性列和列名。

tableOptions(必選

資料表的配置資訊,包括如下內容:

  • timeToLive(必選):資料生命週期,即資料的到期時間,單位為秒。

    資料生命週期的取值最低為 86400 秒(一天),也可設定為 -1(永不到期)。

    重要

    如果要使用多元索引或二級索引,必須將資料生命週期設定為 -1,或者將 allowUpdate 參數設定為 false。

  • maxVersions(必選):最大版本數,即屬性列能夠保留資料的最大版本個數。

    重要

    如果要使用多元索引或二級索引,最大版本數必須設定為 1。

  • maxTimeDeviation(可選):有效版本偏差,即寫入資料的時間戳記與系統目前時間的偏差允許最大值,單位為秒。

    預設值 86400 秒(一天)。屬性列的有效取值範圍是一個左閉右開的區間:[max{資料寫入時間-有效版本偏差,資料寫入時間-資料生命週期},資料寫入時間+有效版本偏差)

  • allowUpdate(可選):是否允許更新。預設為true。

    重要

    如果要使用多元索引的生命週期功能,必須設定此參數為 false。如果您需要更新資料,可使用 PutRow 介面寫入資料。

indexMeta(可選)

索引列表。每個索引包含以下內容:

  • indexName(必選):索引名稱。

  • primaryKey(必選):索引的主鍵列。可以由資料表的主鍵列和預定義列組成。

    重要

    使用本地二級索引時,索引第一個主鍵列必須是資料表的第一個主鍵列。

  • definedColumns(可選):索引的預定義列。可以由資料表的預定義列組成。

  • indexType(可選):索引類型。取值範圍如下:

    • IT_GLOBAL_INDEX (預設值):全域二級索引。

    • IT_LOCAL_INDEX:本地二級索引。

  • indexUpdateMode(可選):索引更新模式。取值範圍如下:

    • IUM_ASYNC_INDEX(預設值):非同步更新。

      說明

      使用全域二級索引時,索引更新模式必須設定為非同步更新。

    • IUM_SYNC_INDEX:同步更新。

      說明

      使用本地二級索引時,索引更新模式必須設定為同步更新。

reservedThroughtput(可選)

預留讀寫輸送量,單位為 CU。預設值為 0。

重要

僅高效能型執行個體支援設定資料表的預留讀寫輸送量為非零值。

streamSpecification(可選)

資料表的 Stream 配置資訊,包括如下內容:

  • enableStream(可選):是否開啟 stream。預設值為 false,即不開啟 stream。

  • expirationTime(可選):stream 到期時間,表示增量日誌到期時間長度。單位為小時,最大值為 168 小時(7 天)。

    說明

    開啟 stream 時,必須設定 expirationTime 參數。

sseSpecification(可選)

資料表的加密配置。

重要

資料表建立後,不支援修改加密相關配置。

enableLocalTxn(可選)

是否開啟局部事務功能。預設值為 false,表示不開啟局部事務功能。

重要
  • 僅 Java SDK 5.11.0 及以上版本支援此功能。

  • 主鍵列自增和局部事務功能無法同時使用,如果您配置了主鍵列自增,即使開啟局部事務也不會生效。

  • 如果建立資料表時未開啟局部事務功能,建立資料表後需要使用該功能,請提交工單進行申請。

樣本

建立資料表

以下樣本用於建立資料表。

private static void createTable(SyncClient client) {
    //設定資料表名稱。
    TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
    //為資料表添加主鍵列。主鍵為pk1(String類型)和pk2(Integer類型),其中pk1主鍵列為分區鍵,pk2主鍵列為自增列。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER, PrimaryKeyOption.AUTO_INCREMENT));
    //資料的到期時間,-1表示永不到期。
    int timeToLive = -1;
    //最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
    int maxVersions = 1;
    //有效版本偏差,即寫入資料的時間戳記與系統目前時間的偏差允許最大值為86400秒(1天)。
    long maxTimeDeviation = 86400L;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions, maxTimeDeviation);
    //設定預留讀寫輸送量,容量型執行個體下的資料表只能設定為0,高效能型執行個體下的資料表可以設定為非零值。
    ReservedThroughput reservedThroughput = new ReservedThroughput(new CapacityUnit(0, 0));
    
    CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, reservedThroughput);
    client.createTable(request);
}

建立資料表時配置二級索引

建立資料表時配置全域二級索引

以下樣本用於同時建立資料表和全域二級索引。

private static void createTable(SyncClient client) {
    //設定資料表名稱。
    TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
    //為資料表添加主鍵列。主鍵為pk1(String類型)和pk2(Integer類型)。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
    //為資料表添加預定義列。預定義列為defcol1(String類型)和defcol2(Integer類型)。
    tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol1", DefinedColumnType.STRING));
    tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol2", DefinedColumnType.INTEGER));
    //資料永不到期,-1表示永不到期。
    int timeToLive = -1;
    //最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
    int maxVersions = 1;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
    
    //全域二級索引
    ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
    //設定索引名稱。
    IndexMeta indexMeta = new IndexMeta("<INDEX_NAME>");
    //為索引添加主鍵列。主鍵列為defcol1、pk1和pk2
    indexMeta.addPrimaryKeyColumn("defcol1");
    indexMeta.addPrimaryKeyColumn("pk1");
    indexMeta.addPrimaryKeyColumn("pk2");
    //為索引添加預定義列。預定義列為defcol2。
    indexMeta.addDefinedColumn("defcol2");
    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>");
    //為資料表添加主鍵列。主鍵為pk1(String類型)和pk2(Integer類型)。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
    //為資料表添加預定義列。預定義列為defcol1(String類型)和defcol2(Integer類型)。
    tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol1", DefinedColumnType.STRING));
    tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol2", DefinedColumnType.INTEGER));
    //資料的到期時間,-1表示永不到期。1。
    int timeToLive = -1;
    //最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
    int maxVersions = 1;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
    
    //本地二級索引
    ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
    //設定索引名稱。
    IndexMeta indexMeta = new IndexMeta("<INDEX_NAME>");
    //設定索引類型為本地二級索引(IT_LOCAL_INDEX)。
    indexMeta.setIndexType(IT_LOCAL_INDEX);
    //設定索引更新模式為同步更新(IUM_SYNC_INDEX)。當索引類型為本地二級索引時,索引更新模式必須為同步更新。
    indexMeta.setIndexUpdateMode(IUM_SYNC_INDEX);
    //為索引添加主鍵列。主鍵列為pk1、defcol1和pk2。
    indexMeta.addPrimaryKeyColumn("pk1");
    indexMeta.addPrimaryKeyColumn("defcol1");
    indexMeta.addPrimaryKeyColumn("pk2");
    //為索引添加預定義列。預定義列為defcol2。
    indexMeta.addDefinedColumn("defcol2");
    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>");
    //為資料表添加主鍵列。主鍵為pk1(String類型)和pk2(Integer類型)。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
    //資料的到期時間,-1表示永不到期。
    int timeToLive = -1;
    //最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
    int maxVersions = 1;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
    
    CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
    //開啟局部事務。如果資料表配置了主鍵自增列,則開啟局部事務配置不會生效。
    request.setLocalTxnEnabled(true);
    client.createTable(request);
}

相關文檔