全部產品
Search
文件中心

Tablestore:建立資料表

更新時間:Nov 13, 2024

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

注意事項

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

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

前提條件

介面

/// <summary>
/// 根據指定表結構資訊建立資料表。
/// </summary>
/// <param name="request">請求參數</param>
/// <returns>CreateTable的返回,此返回執行個體是空的,不包含具體資訊。</returns>
public CreateTableResponse CreateTable(CreateTableRequest request);

/// <summary>
/// CreateTable的非同步形式,其參數和調用方式與CreateTable保持一致。
/// </summary>
public Task<CreateTableResponse> CreateTableAsync(CreateTableRequest request);

參數說明

request包含以下參數:

參數

說明

tableMeta(必選

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

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

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

    • 主鍵資料類型可以為 String、Integer 或 Binary。

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

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

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

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

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

tableOptions(可選)

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

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

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

    重要

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

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

    預設值為 1,表示每列上最多儲存一個版本,即儲存最新的版本。

    重要

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

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

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

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

    重要

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

indexMetas(可選)

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

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

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

    重要

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

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

  • indexType(可選):索引類型,當前只支援全域二級索引。

  • indexUpdateModel(可選):索引更新模式,當前只支援非同步更新。

說明

Table Store提供了全域和本地兩種類型的二級索引,當前 .NET SDK 只支援全域二級索引。

reservedThroughput(必選

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

重要

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

streamSpecification(可選)

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

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

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

    說明

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

樣本

建立資料表

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

 //建立主鍵列的schema,包括PK的個數、名稱和類型。
 //第一個PK列為整數,名稱是pk0,這個同時也是分區鍵。
 //第二個PK列為字串,名稱是pk1。
 var primaryKeySchema = new PrimaryKeySchema();
 primaryKeySchema.Add("pk0", ColumnValueType.Integer);
 primaryKeySchema.Add("pk1", ColumnValueType.String);

 //通過表名和主鍵列的schema建立一個tableMeta。
 var tableMeta = new TableMeta("SampleTable", primaryKeySchema);

 //設定預留讀輸送量為0,預留寫輸送量為0。
 var reservedThroughput = new CapacityUnit(0, 0);

 try
 {
     //構造CreateTableRequest對象。
     var request = new CreateTableRequest(tableMeta, reservedThroughput);

     //調用client的CreateTable介面,如果沒有拋出異常,則說明執行成功。
     otsClient.CreateTable(request);

     Console.WriteLine("Create table succeeded.");
 }
 //如果拋出異常,則說明失敗,處理異常。
 catch (Exception ex)
 {
     Console.WriteLine("Create table failed, exception:{0}", ex.Message);
 }
            

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

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

public static void CreateTableWithGlobalIndex()
{
    //建立資料表,兩列主鍵為Pk1、Pk2,預定義列為Col1、Col2。
    //建立索引表,索引表中Col1放Pk0。
    OTSClient otsClient = Config.GetClient();

    Console.WriteLine("Start create table with globalIndex...");
    PrimaryKeySchema primaryKeySchema = new PrimaryKeySchema
        {
            { Pk1, ColumnValueType.String },
            { Pk2, ColumnValueType.String }
        };
    TableMeta tableMeta = new TableMeta(TableName, primaryKeySchema);
    tableMeta.DefinedColumnSchema = new DefinedColumnSchema {
            { Col1, DefinedColumnType.STRING},
            { Col2, DefinedColumnType.STRING}
        };

    IndexMeta indexMeta = new IndexMeta(IndexName);
    indexMeta.PrimaryKey = new List<string>() { Col1 };
    indexMeta.DefinedColumns = new List<string>() { Col2 };
    //indexMeta.IndexType = IndexType.IT_GLOBAL_INDEX;
    //indexMeta.IndexUpdateModel = IndexUpdateMode.IUM_ASYNC_INDEX;

    List<IndexMeta> indexMetas = new List<IndexMeta>() { };
    indexMetas.Add(indexMeta);

    CapacityUnit reservedThroughput = new CapacityUnit(0, 0);
    CreateTableRequest request = new CreateTableRequest(tableMeta, reservedThroughput, indexMetas);
    otsClient.CreateTable(request);

    Console.WriteLine("Table is created: " + TableName);
}

相關文檔