テーブル用に作成されたマッピングテーブルまたは検索インデックス用に作成されたマッピングテーブルを使用して、SQL でデータをクエリできます。シナリオに基づいてクエリメソッドを選択します。
背景情報
Tablestore は大量の構造化データを格納でき、さまざまなシナリオでの高速なクエリと分析のためにさまざまな種類のインデックススキーマをサポートしています。Tablestore は、単一行読み取り (GetRow) 操作と範囲読み取り (GetRange) 操作を実行できるデータテーブルのプライマリキー、カスタムプライマリキー列を含むセカンダリインデックステーブル、および転置インデックスと時空間インデックスをサポートする検索インデックスというインデックススキーマを提供します。
SQL クエリ機能を使用する場合、セカンダリインデックステーブルへの明示的なアクセスに基づいてデータをクエリできます。Tablestore は、検索インデックスを使用してデータをクエリするための以下の方法を提供します。検索インデックスの自動選択と検索インデックスへの明示的なアクセス。詳細については、インデックス選択ポリシー を参照してください。
サンプルシナリオ
このシナリオでは、データテーブル exampletable には、id プライマリキー列と name および context 属性列が含まれています。id プライマリキー列は Integer 型で、name および context 属性列は String 型です。データテーブル用に exampletable_searchindex という名前の検索インデックスが作成されます。検索インデックスには、id 列と context 列が含まれています。id 列は Integer 型で、context 列は Text 型です。
このトピックでは、このシナリオを例として使用して、さまざまなインデックススキーマを使用して SQL でデータをクエリする方法について説明します。
テーブルのマッピングテーブルを使用する
シナリオに基づいて、このセクションのいずれかの方法を選択して、テーブルのマッピングテーブルを使用します。テーブル用に作成されたマッピングテーブルを使用する場合、クエリ結果が強整合性モードであるかどうか、および集計操作の精度を損なうことによってクエリのパフォーマンスを向上できるかどうかを指定できます。
テーブルのマッピングテーブルを作成する方法については、テーブルのマッピングテーブルを作成する を参照してください。
方法 1: クエリ結果が結果整合性モードであり、集計操作の精度を損なうことによってクエリのパフォーマンスを向上できることを指定する
exampletable データテーブルに exampletable という名前のマッピングテーブルを作成し、他のパラメーターのデフォルト設定を保持します。
CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore';
データをクエリします。
次の SQL ステートメントを実行してデータをクエリする場合、id、name、および context 列はすべて exampletable_searchindex 検索インデックスに含まれていないため、Tablestore はデータクエリ用にデータテーブルを自動的に選択します。
SELECT * FROM exampletable LIMIT 10;
次の SQL ステートメントを実行してデータをクエリする場合、検索インデックスには id 列と context 列が含まれているため、Tablestore はデータクエリ用に exampletable_searchindex 検索インデックスを自動的に選択します。
SELECT id,context FROM exampletable LIMIT 10;
方法 2: クエリ結果が強整合性モードであることを指定する
exampletable データテーブルに exampletable という名前のマッピングテーブルを作成し、data_consistency を strong に設定します。
CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore', ENGINE_ATTRIBUTE='{"data_consistency": "strong"}';
データをクエリします。詳細については、データのクエリ を参照してください。
検索インデックスを使用してデータをクエリする場合、クエリ結果は結果整合性モードになり、強整合性は保証されません。そのため、Tablestore はデータクエリに検索インデックスを使用しません。
方法 3: クエリ結果が結果整合性モードであり、集計操作の精度を損なうことによってクエリのパフォーマンスを向上できないことを指定する
exampletable データテーブルに exampletable という名前のマッピングテーブルを作成し、data_consistency を eventual に、allow_inaccurate_aggregation を false に設定します。
CREATE TABLE `exampletable` (`id` BIGINT, `name` MEDIUMTEXT, `context` MEDIUMTEXT, PRIMARY KEY(id)) ENGINE='Tablestore', ENGINE_ATTRIBUTE='{"data_consistency": "eventual", "allow_inaccurate_aggregation": false}';
データをクエリします。詳細については、データのクエリ を参照してください。
検索インデックスの集計機能は、完全に正確な結果を提供するわけではありません。そのため、Tablestore はデータクエリに検索インデックスを使用しません。
検索インデックスのマッピングテーブルを使用する
特定の検索インデックスを使用してデータをクエリする場合、検索インデックスのマッピングテーブルを作成できます。
検索インデックスのマッピングテーブルを作成する方法については、検索インデックスのマッピングテーブルを作成する を参照してください。
検索インデックスに exampletable_searchindex_test という名前のマッピングテーブルを作成します。
CREATE TABLE `exampletable_searchindex_test` (`id` BIGINT, `context` MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable_searchindex", "table_name": "exampletable"}'
データをクエリします。
SELECT id,context FROM exampletable_searchindex_test WHERE text_match(context, "tablestore cool") LIMIT 10;