Tablestore では、インデックステーブルから単一のデータ行またはプライマリキー値が特定の範囲内にあるデータを読み取ることができます。インデックステーブルに返したい属性列が含まれている場合は、インデックステーブルを読み取ってデータを取得できます。そうでない場合は、インデックステーブルが作成されたデータテーブルからデータをクエリする必要があります。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化 を参照してください。
セカンダリインデックスが作成されていること。詳細については、セカンダリインデックスの作成 を参照してください。
使用上の注意
インデックステーブルはデータの読み取りにのみ使用できます。
ローカルセカンダリインデックスの最初のプライマリキー列は、データテーブルの最初のプライマリキー列と同じである必要があります。
返したい属性列がインデックステーブルに含まれていない場合は、必要な属性列を取得するために、インデックステーブルが作成されたデータテーブルからデータをクエリする必要があります。
単一のデータ行の読み取り
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クエリを参照してください。