本文將通過參數說明和範例程式碼為您介紹如何使用 .NET SDK 建立資料表。在建立資料表時,您需要指定資料表的結構資訊和配置資訊。高效能型執行個體中的資料表還可以根據需要設定預留讀寫輸送量。
注意事項
建立資料表後需要幾秒鐘進行載入,在此期間對該資料表的讀寫資料操作均會失敗。請等待資料表載入完畢後再進行資料操作。
如果您有主鍵資料自增的需求,例如電商網站的商品 ID、論壇文章的 ID 等情境,可以在建立資料時配置主鍵列自增。具體操作,請參見主鍵列自增。
前提條件
已通過控制台建立執行個體。具體操作,請參見建立執行個體。
已初始化 OTSClient,詳情請參見初始化 OTSClient。
介面
/// <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(必選) | 資料表的結構資訊,包括如下內容:
|
tableOptions(可選) | 資料表的配置資訊,包括如下內容:
|
indexMetas(可選) | 索引列表。每個索引包含以下內容:
說明 Table Store提供了全域和本地兩種類型的二級索引,當前 .NET SDK 只支援全域二級索引。 |
reservedThroughput(必選) | 預留讀寫輸送量,單位為 CU。預設值為 0。 重要 僅高效能型執行個體支援設定資料表的預留讀寫輸送量為非零值。 |
streamSpecification(可選) | 資料表的 Stream 配置資訊,包括如下內容:
|
樣本
建立資料表
以下樣本用於建立資料表。
//建立主鍵列的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,預定義列為Col2。
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);
}