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

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

最終更新日:Dec 28, 2024

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

前提条件

使用上の注意

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

  • ローカルセカンダリインデックスの最初のプライマリキー列は、データテーブルの最初のプライマリキー列と同じである必要があります。

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

単一のデータ行の読み取り

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

パラメーター

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

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

  • Tablestore は、インデックス列として指定されていないデータテーブルのプライマリキー列を、インデックステーブルのプライマリキー列としてインデックステーブルに自動的に追加します。したがって、インデックステーブルの行のプライマリキー列を指定する場合は、インデックステーブルを作成したインデックス列とデータテーブルのプライマリキー列に基づいて指定する必要があります。

グローバルセカンダリインデックスの使用

次のサンプルコードは、行のプライマリキーに基づいてグローバルセカンダリインデックスのデータ行を読み取る方法の例を示しています。

var TableStore = require('./index.js');
var Long = TableStore.Long;
var client = require('./client');

var params = {
  // インデックステーブルの名前を指定します。
  tableName: "<INDEX_NAME>",  
  // インデックステーブルの行のプライマリキーに関する情報を指定します。
  primaryKey: [{ 'col1': Long.fromNumber(2) }, { 'pk1': Long.fromNumber(2) }, { 'pk2': Long.fromNumber(1) }]
};

client.getRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', JSON.stringify(data.row, null, 2));
});

ローカルセカンダリインデックスの使用

次のサンプルコードは、行のプライマリキーに基づいてローカルセカンダリインデックスのデータ行を読み取る方法の例を示しています。

var TableStore = require('./index.js');
var Long = TableStore.Long;
var client = require('./client');

var params = {
  // インデックステーブルの名前を指定します。
  tableName: "<INDEX_NAME>", 
  // インデックステーブルの行のプライマリキーに関する情報を指定します。インデックステーブルの最初のプライマリキー列は、データテーブルの最初のプライマリキー列と同じである必要があります。
  primaryKey: [{ 'pk1': Long.fromNumber(1) }, { 'col1': Long.fromNumber(2) }, { 'pk2': Long.fromNumber(2) }]
};

client.getRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', JSON.stringify(data.row, null, 2));
});

主キー値が特定の範囲内にあるデータの読み取り

GetRange オペレーションを呼び出すことで、主キー値が特定の範囲内にあるデータを読み取ることができます。詳細については、主キー値が特定の範囲内にあるデータの読み取りを参照してください。

パラメーター

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

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

  • Tablestore は、インデックス列として指定されていないデータテーブルの主キー列を、インデックステーブルの主キー列としてインデックステーブルに自動的に追加します。そのため、クエリする範囲の開始主キーと終了主キーを指定する場合は、インデックステーブルの作成基準となるインデックス列とデータテーブルの主キー列を指定する必要があります。

グローバルセカンダリインデックスの使用

次のサンプルコードは、グローバルセカンダリインデックスから主キー値が特定の範囲内にあるデータを読み取る方法の例を示しています。この例では、グローバルセカンダリインデックスの最初の主キー列は col1 です。範囲に指定された col1 列の値は 1 です。

var TableStore = require('./index.js');
var Long = TableStore.Long;
var client = require('./client');

var params = {
  // インデックステーブルの名前を指定します。この例では、col1 はインデックステーブルの最初の主キー列です。 pk1 と pk2 はデータテーブルの主キー列です。 Tablestore は pk1 と pk2 をインデックステーブルの主キー列としてインデックステーブルに自動的に追加します。
  tableName: "<INDEX_NAME>", 
  // データを順方向に読み取るように指定します。
  direction: TableStore.Direction.FORWARD,
  // 返すデータの最大バージョン数を指定します。
  maxVersions: 10,
  // 開始主キーと終了主キーを指定します。主キー値の範囲は、左閉右開区間です。 INF_MIN は無限に小さい値を示します。 INF_MAX は無限に大きい値を示します。
  inclusiveStartPrimaryKey: [{ "col1": Long.fromNumber(1) }, { "pk1": TableStore.INF_MIN }, { "pk2": TableStore.INF_MIN }],
  exclusiveEndPrimaryKey: [{ "col1": Long.fromNumber(1) }, { "pk1": TableStore.INF_MAX }, { "pk2": TableStore.INF_MAX }],
  // 呼び出しで返される最大行数を指定します。
  limit: 2
};

var resultRows = []

var getRange = function () {
  client.getRange(params, function (err, data) {
    if (err) {
      console.log('error:', err);
      return;
    }
    resultRows = resultRows.concat(data.rows)

    // レスポンスで data.next_start_primary_key パラメーターが空でない場合は、データの読み取りを続行します。
    if (data.nextStartPrimaryKey) {
      params.inclusiveStartPrimaryKey = [
        { "col1": data.nextStartPrimaryKey[0].value },
        { "pk1": data.nextStartPrimaryKey[1].value },
        { "pk2": data.nextStartPrimaryKey[2].value }
      ];
      getRange()
    } else {
      console.log(JSON.stringify(resultRows));
    }
  });
}

getRange()

ローカルセカンダリインデックスの使用

次のサンプルコードは、ローカルセカンダリインデックスからすべての行のデータを読み取る方法の例を示しています。

var TableStore = require('./index.js');
var Long = TableStore.Long;
var client = require('./client');

var params = {
  // インデックステーブルの名前を指定します。この例では、pk1 と col1 がインデックステーブルの主キー列として指定されています。 pk2 はデータテーブルの主キー列です。 Tablestore は pk2 をインデックステーブルの主キー列としてインデックステーブルに自動的に追加します。
  tableName: "<INDEX_NAMW>", 
  // データを順方向に読み取るように指定します。
  direction: TableStore.Direction.FORWARD,
  // 返すデータの最大バージョン数を指定します。
  maxVersions: 10,
  // 開始主キーと終了主キーを指定します。主キー値の範囲は、左閉右開区間です。 INF_MIN は無限に小さい値を示します。 INF_MAX は無限に大きい値を示します。
  inclusiveStartPrimaryKey: [{ "pk1": TableStore.INF_MIN }, { "col1": TableStore.INF_MIN }, { "pk2": TableStore.INF_MIN }],
  exclusiveEndPrimaryKey: [{ "pk1": TableStore.INF_MAX }, { "col1": TableStore.INF_MAX }, { "pk2": TableStore.INF_MAX }],
  // 呼び出しで返される最大行数を指定します。
  limit: 2
};

var resultRows = []

var getRange = function () {
  client.getRange(params, function (err, data) {
    if (err) {
      console.log('error:', err);
      return;
    }
    resultRows = resultRows.concat(data.rows)

    // レスポンスで data.next_start_primary_key パラメーターが空でない場合は、データの読み取りを続行します。
    if (data.nextStartPrimaryKey) {
      params.inclusiveStartPrimaryKey = [
        { "pk1": data.nextStartPrimaryKey[0].value },
        { "col1": data.nextStartPrimaryKey[1].value },
        { "pk2": data.nextStartPrimaryKey[2].value }
      ];
      getRange()
    } else {
      console.log(JSON.stringify(resultRows));
    }
  });
}

getRange()

FAQ

参照

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

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