本文将通过参数说明和示例代码为您介绍如何使用 .NET SDK 创建数据表。在创建数据表时,您需要指定数据表的结构信息和配置信息。CU 模式(原按量模式)下高性能型实例中的数据表还可以根据需要设置预留读写吞吐量。
注意事项
创建数据表后需要几秒钟进行加载,在此期间对该数据表的读写数据操作均会失败。请等待数据表加载完毕后再进行数据操作。
如果您有主键数据自增的需求,例如电商网站的商品 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(可选) | 索引列表。每个索引包含以下内容:
说明 表格存储提供了全局和本地两种类型的二级索引,当前 .NET SDK 只支持全局二级索引。 |
reservedThroughput(必选) | 预留读写吞吐量,单位为 CU。默认值为 0。 重要 仅 CU 模式下高性能型实例支持设置数据表的预留读写吞吐量为非零值。 |
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放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);
}