すべてのプロダクト
Search
ドキュメントセンター

Tablestore:データテーブルを作成する

最終更新日:Dec 28, 2024

このトピックでは、.NET 用 Tablestore SDK を使用して、パラメータとサンプルコードを使用してデータテーブルを作成する方法について説明します。データテーブルを作成する際には、データテーブルのスキーマ情報と構成情報を指定する必要があります。ハイパフォーマンスインスタンスのデータテーブルに対して、予約読み取りスループットと書き込みスループットを指定できます。

使用上の注意

  • データテーブルを作成した後、データテーブルのロードに数秒かかります。この期間中、データテーブルに対するすべての読み取り操作と書き込み操作は失敗します。データテーブルがロードされた後に、データテーブルに対する操作を実行してください。

  • eコマース Web サイトのアイテム ID やフォーラムの投稿 ID など、自動インクリメント主キー列が必要なシナリオでは、データテーブルの作成時に自動インクリメント主キー列を指定できます。詳細については、自動インクリメント主キー列を構成するを参照してください。

前提条件

API 操作

/// <summary>
/// 指定されたテーブルスキーマに基づいてデータテーブルを作成します。
/// </summary>
/// <param name="request">リクエストパラメータ</param>
/// <returns>CreateTable 操作によって返される情報。結果は null です。</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 つの主キー列を指定できます。Tablestore は、主キー列が指定された順序で主キーを生成します。デフォルトでは、データテーブルの行は主キーによって降順にソートされます。

    • 最初の主キー列はパーティションキーです。

  • definedColumnSchema: このパラメータはオプションであり、データテーブルの定義済み列を指定します。定義済み列のタイプは、String、Integer、Binary、Double、または Boolean にすることができます。

    説明
    • 定義済み列は、データクエリを高速化するためにデータテーブルに作成されたセカンダリインデックスの主キー列または定義済み列として使用できる、主キー以外の列です。

    • データテーブルを作成するときに、属性列のスキーマを指定する必要はありません。データテーブルにデータを書き込むときに、行ごとに異なる数の属性列と異なる属性列名を指定できます。

tableOptions (オプション)

データテーブルに関する構成情報。次のパラメータを構成して、構成情報を指定できます。

  • timeToLive: このパラメータはオプションであり、データテーブル内のデータの保持期間を指定します。単位:秒。

    デフォルト値:-1。-1 の値は、データが期限切れにならないことを指定します。このパラメータは、86400 以上または -1 に設定できます。86400 の値は 1 日を指定します。

    重要

    データテーブルの検索インデックスまたはセカンダリインデックスを作成する場合は、このパラメータを -1 に設定するか、AllowUpdate パラメータを false に設定する必要があります。

  • maxVersions: このパラメータはオプションであり、各属性列のデータに保持できるバージョンの最大数を指定します。

    デフォルト値:1。1 の値は、各属性列の最新バージョンのデータのみが保持されることを指定します。

    重要

    データテーブルの検索インデックスまたはセカンダリインデックスを作成する場合は、このパラメータを 1 に設定する必要があります。

  • deviationCellVersionInSec: このパラメータはオプションであり、現在のシステム時刻と書き込まれたデータのタイムスタンプの最大差を指定します。単位:秒。

    デフォルト値:86400。属性列のデータの有効なバージョン範囲は、左閉右開区間であり、次の式を使用して計算されます。有効なバージョン範囲 = [max{データ書き込み時刻 - 最大バージョンオフセット、データ書き込み時刻 - TTL 値}、データ書き込み時刻 + 最大バージョンオフセット)

  • allowUpdate: このパラメータはオプションであり、データテーブルに対する更新操作を許可するかどうかを指定します。デフォルト値:true。

    重要

    データテーブルに作成された検索インデックスの Time To Live (TTL) 機能を使用する場合は、このパラメータを false に設定する必要があります。データテーブルのデータを更新する場合は、PutRow 操作を呼び出してデータテーブルにデータを書き込むことができます。

indexMetas (オプション)

インデックスのリスト。各インデックスに対して次のパラメータを構成できます。

  • indexName: このパラメータは必須であり、インデックスの名前を指定します。

  • primaryKey: このパラメータは必須であり、インデックスの主キー列を指定します。インデックスの主キー列は、インデックスが作成されるデータテーブルの主キー列と定義済み列の組み合わせです。

    重要

    ローカルセカンダリインデックスを作成する場合は、インデックスの最初の主キー列をデータテーブルの最初の主キー列にする必要があります。

  • definedColumns: このパラメータはオプションであり、インデックスの定義済み列を指定します。インデックスの定義済み列は、インデックスが作成されるデータテーブルの定義済み列の組み合わせです。

  • indexType: このパラメータはオプションであり、インデックスのタイプを指定します。グローバルセカンダリインデックスのみがサポートされています。

  • indexUpdateModel: このパラメータはオプションであり、インデックスの更新モードを指定します。非同期更新モードのみがサポートされています。

説明

Tablestore では、セカンダリインデックスはグローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。.NET 用 Tablestore SDK は、グローバルセカンダリインデックスのみをサポートしています。

reservedThroughput (必須)

予約読み取りスループットと書き込みスループット。単位:キャパシティユニット (CU)。デフォルト値:0。

重要

ハイパフォーマンスインスタンスのデータテーブルに対してのみ、予約読み取りスループットまたは書き込みスループットを 0 以外の値に設定できます。

streamSpecification (オプション)

データテーブルに関する Stream 構成情報。次のパラメータを構成して、Stream 構成情報を指定できます。

  • enableStream: このパラメータはオプションであり、Stream 機能を有効にするかどうかを指定します。デフォルト値:false。false の値は、Stream 機能が無効になっていることを指定します。

  • expirationTime: このパラメータはオプションであり、増分ログの有効期間を指定します。単位:時間。最大値:168。168 の値は 7 日を指定します。

    説明

    Stream 機能を有効にする場合は、expirationTime パラメータを構成する必要があります。

データテーブルを作成する

次のサンプルコードは、データテーブルを作成する方法の例を示しています。

// 主キー列のスキーマを作成します。主キー列の数、名前、データ型が含まれます。
// 最初の主キー列の名前は pk0 で、Integer 型です。最初の主キー列はパーティションキーです。
// 2 番目の主キー列の名前は pk1 で、String 型です。
var primaryKeySchema = new PrimaryKeySchema();
primaryKeySchema.Add("pk0", ColumnValueType.Integer);
primaryKeySchema.Add("pk1", ColumnValueType.String);

// テーブル名と主キー列のスキーマに基づいて tableMeta インスタンスを作成します。
var tableMeta = new TableMeta("SampleTable", primaryKeySchema);

// 予約読み取りスループットと予約書き込みスループットを 0 に設定します。
var reservedThroughput = new CapacityUnit(0, 0);

try
{
    // CreateTableRequest オブジェクトを構築します。
    var request = new CreateTableRequest(tableMeta, reservedThroughput);

    // クライアントの CreateTable 操作を呼び出します。例外が返されない場合は、テーブルが作成されます。
    otsClient.CreateTable(request);

    Console.WriteLine("テーブルの作成に成功しました。");
}
// 例外が返された場合、テーブルは作成されず、例外を処理する必要があります。
catch (Exception ex)
{
    Console.WriteLine("テーブルの作成に失敗しました。例外: {0}", ex.Message);
}
            

データテーブルとグローバルセカンダリインデックスを作成する

次のサンプルコードは、データテーブルとデータテーブルのグローバルセカンダリインデックスを同時に作成する方法の例を示しています。

public static void CreateTableWithGlobalIndex()
{
    // 2 つの主キー列 Pk1 と Pk2、および 2 つの定義済み列 Col1 と Col2 を含むデータテーブルを作成します。
    // インデックステーブルを作成し、主キー列を Col1 に、定義済み列を Col2 に設定します。
    OTSClient otsClient = Config.GetClient();

    Console.WriteLine("グローバルインデックスを持つテーブルの作成を開始しています...");
    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("テーブルが作成されました: " + TableName);
}

参照