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

Tablestore:セカンダリインデックスを使用したデータの読み取り

最終更新日:Sep 30, 2026

Tablestore では、インデックス テーブルから 1 行のデータ、またはプライマリキー値が特定の範囲内にあるデータを読み取ることができます。 取得したい属性列がインデックス テーブルに含まれている場合、インデックス テーブルを読み取ってデータを取得できます。 それ以外の場合は、インデックス テーブルが作成されたデータテーブルからデータをクエリする必要があります。

前提条件

注意事項

  • インデックステーブルはデータの読み取りにのみ使用できます。

  • 取得したい属性列がインデックステーブルに含まれていない場合は、インデックステーブルの作成元であるデータテーブルからデータをクエリして、必要な属性列を取得する必要があります。

1 行のデータの読み取り

GetRow 操作を呼び出して、単一行のデータを読み取ることができます。詳細については、「単一行のデータを読み取る」をご参照ください。

パラメーター

GetRow API を呼び出してインデックステーブルからデータを読み取る場合は、次の点に注意してください。

  • tableName パラメーターにインデックステーブルの名前を設定する必要があります。

  • Tablestore は、インデックス列として指定されていないデータテーブルのプライマリキー列を、インデックステーブルのプライマリキー列として自動的に追加します。そのため、インデックステーブル内の行のプライマリキーを指定する際には、インデックス列と、インデックス列として使用されていないデータテーブルのプライマリキー列の両方を指定する必要があります。

サンプルコード

次のサンプルコードは、行のプライマリキーに基づいてインデックステーブルから 1 行のデータを読み取る例です。

public static void GetRowfromIndex()
{
    OTSClient otsClient = Config.GetClient();
    // プライマリキーを構築します。インデックステーブルのプライマリキーは、定義済みのインデックス列と、データテーブルのプライマリキー列のうちインデックスに含まれていない列で構成されます。
    PrimaryKey primaryKey = new PrimaryKey
    {
        { "col0", new ColumnValue(0) },
        { "pk1", new ColumnValue(0) },
        { "pk2", new ColumnValue("abc") }
    };

    try
    {
        // クエリリクエストオブジェクトを構築します。属性列が指定されていない場合は、行全体が読み取られます。
        var request = new GetRowRequest(IndexName, primaryKey);

        // GetRow API を呼び出してデータをクエリします。
        var response = otsClient.GetRow(request);

        Console.WriteLine("Primary Key: " + response.PrimaryKey);
        Console.WriteLine("Attribute Column: " + response.Columns[0]);

        // 例外が返されない場合、操作は成功です。
        Console.WriteLine("Get row succeeded.");
    }
    catch (Exception ex)
    {
        // 例外が返された場合、操作は失敗です。例外を処理してください。
        Console.WriteLine("Get row failed, exception:{0}", ex.Message);
    }
}

プライマリキー値が特定の範囲内にあるデータの読み取り

GetRange 操作を呼び出して、プライマリキー値が特定の範囲内にあるデータを読み取ることができます。詳細については、「プライマリキー値が特定の範囲内にあるデータを読み取る」をご参照ください。

パラメーター

GetRange API を呼び出してインデックステーブルからデータを読み取る場合は、次の点に注意してください。

  • tableName パラメーターにインデックステーブルの名前を設定する必要があります。

  • Tablestore は、インデックス列として指定されていないデータテーブルのプライマリキー列を、インデックステーブルのプライマリキー列として自動的に追加します。そのため、クエリする範囲の開始プライマリキーと終了プライマリキーを指定する際には、インデックス列と、インデックス列として使用されていないデータテーブルのプライマリキー列の両方を指定する必要があります。

サンプルコード

次のサンプルコードは、インデックステーブルから、プライマリキー値が特定の範囲内にあるデータを読み取る例です。この例では、インデックステーブルの最初のプライマリキー列は col1 です。範囲の col1 列に指定する値は 0 です。

public static void GetRangeFromIndexTable()
{
    Console.WriteLine("Start getRange from index...");
    OTSClient otsClient = Config.GetClient();
    // 最初のプライマリキー列 col1 の値を指定し、データをスキャンします。
    PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey
    {
        { "col1", new ColumnValue(0) },
        { "pk1",  ColumnValue.INF_MIN },
        { "pk2", ColumnValue.INF_MIN }
    };

    PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey
    {
        { "col1", new ColumnValue(0) },
        { "pk1",  ColumnValue.INF_MAX },
        { "pk2", ColumnValue.INF_MAX }
    };

    GetRangeRequest request = new GetRangeRequest(IndexName, GetRangeDirection.Forward, inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);

    GetRangeResponse response = otsClient.GetRange(request);
    IList<Row> rows = response.RowDataList;
    PrimaryKey nextStartPrimaryKey = response.NextPrimaryKey;
    while (nextStartPrimaryKey != null)
    {
        request = new GetRangeRequest(IndexName, GetRangeDirection.Forward, nextStartPrimaryKey, exclusiveEndPrimaryKey);
        response = otsClient.GetRange(request);
        nextStartPrimaryKey = response.NextPrimaryKey;
        foreach (var row in response.RowDataList)
        {
            rows.Add(row);
        }
    }

    foreach (var row in rows)
    {
        PrintRow(row);
    }

    Console.WriteLine("TotalRowsRead: " + rows.Count);
}

private static void PrintRow(Row row)
{
    Console.WriteLine("-----------------");

    foreach (KeyValuePair<string, ColumnValue> entry in row.GetPrimaryKey())
    {
        Console.WriteLine(entry.Key + ":" + entry.Value);
    }

    foreach (Column entry in row.GetColumns())
    {
        Console.WriteLine(entry.Name + ":" + entry.Value);
    }

    Console.WriteLine("-----------------");
}             

よくある質問

関連ドキュメント

  • 多次元クエリとデータ分析が必要な場合は、多次元インデックスを作成し、必要な属性を多次元インデックスのフィールドとして指定できます。その後、多次元インデックスを使用してデータをクエリおよび分析できます。たとえば、多次元インデックスを使用して、プライマリキー列以外の列に基づくクエリ、ブールクエリ、あいまいクエリを実行できます。また、多次元インデックスを使用して、最大値と最小値の取得、行数の統計情報の収集、クエリ結果のグループ化を行うこともできます。詳細については、「多次元インデックス」をご参照ください。

  • SQL ステートメントを実行してデータをクエリおよび分析する場合は、SQL クエリ機能を使用できます。詳細については、「SQL クエリ」をご参照ください。