Tablestoreは大容量の構造化データを格納でき、さまざまなシナリオでの高速なクエリと分析のためにさまざまな種類のインデックススキーマをサポートしています。SQLクエリ機能を使用する場合、セカンダリインデックステーブルへの明示的なアクセスを使用して、インデックスベースのクエリを実行できます。Tablestoreは、検索インデックスを使用してデータをクエリするための次の方法を提供します。検索インデックスの自動選択と検索インデックスへの明示的なアクセス。
セカンダリインデックステーブルの使用
セカンダリインデックスは、データクエリに対して自動的に選択することはできません。セカンダリインデックステーブルのマッピングテーブルを作成するには、手動でSQLステートメントを記述する必要があります。
Tablestoreは、セカンダリインデックステーブルへの明示的なアクセスのみをサポートしています。セカンダリインデックステーブルへの明示的なアクセスを使用してセカンダリインデックステーブルにアクセスする場合は、次の操作を実行します。
CREATE TABLEステートメントを実行して、アクセスするセカンダリインデックステーブルのマッピングテーブルを作成します。詳細については、テーブルのマッピングテーブルの作成を参照してください。
SELECTステートメントを実行してデータをクエリします。詳細については、データのクエリを参照してください。
検索インデックスの使用
SQLを使用して、主キー以外の列に基づくクエリやブールクエリなどの複雑なクエリを実行する場合、クエリするデータを持つデータテーブルの検索インデックスを作成することをお勧めします。検索インデックスを作成した後、次のいずれかの方法を使用して、SQLで検索インデックスを使用してデータをクエリできます。
検索インデックスの自動選択
クエリするデータを持つデータテーブルのマッピングテーブルを作成するときに、クエリ結果が厳密な整合性モードである必要があることを指定した場合、または集計操作の精度を損なうことによってクエリのパフォーマンスを向上させることができない場合、Tablestoreはデータクエリに対して検索インデックスを自動的に選択しません。
アクセスする検索インデックスが明示的に指定されていない場合、WHERE句のすべてのフィルタリング列とSELECTステートメントの戻り列が検索インデックスに含まれている場合、Tablestoreはデータクエリに対して検索インデックスを自動的に選択します。たとえば、Select A,B,C from exampletable where A=XXX and D = YY;
ステートメントでは、A、B、C、およびD列が検索インデックスに含まれている場合、Tablestoreはexampletableテーブルの検索インデックスをデータクエリに対して自動的に選択します。
検索インデックスへの明示的なアクセス
特定の検索インデックスを使用してデータをクエリする場合、次の操作を実行して、検索インデックスへの明示的なアクセス方法を使用できます。
CREATE TABLEステートメントを実行して、検索インデックスのマッピングテーブルを作成します。詳細については、検索インデックスのマッピングテーブルの作成を参照してください。
SELECTステートメントを実行してデータをクエリします。詳細については、データのクエリを参照してください。
GROUP BY句と集計関数を組み合わせたSQLステートメントが検索インデックスのSearch API操作の集計機能と一致する場合、Tablestoreは演算子も識別し、演算子を検索インデックスにプッシュダウンします。演算子のプッシュダウンの詳細については、演算プッシュダウンを参照してください。
付録:検索インデックスの機能とSQL式の対応
検索インデックスは、SQL式と同じ機能を提供します。次の表は、検索インデックスの機能とSQL式の対応を示しています。
SQL式 | 例 | 検索インデックスの機能 |
述語なし | 該当なし | |
= |
| |
> | a > 1 | |
>= | a >= 2 | |
< | a < 5 | |
<= | a <= 10 | |
is null | a is null | |
is not null | a is not null | |
and | a = 1 and b = "hello world" | |
or | a > 1 or b = 2 | |
not | not a = 1 | |
!= | a !=1 | |
like | a like "%s%" | |
in | a in (1,2,3) | |
text_match | text_match(a, "tablestore cool") | |
text_match_phrase | text_match_phrase(a, "tablestore cool") | |
array_extract | array_extract(col_long) | |
nested_query | nested_query(`tags.tagName` = 'tag1' AND `tags.score` = 0.2) | |
order by | nested_query col_long | |
limit | limit 10 | |
min() | min(col_long) | |
max() | max(col_long) | |
sum() | sum(col_long) | |
avg() | avg(col_long) | |
count() | count(col_long) | |
count(distinct) | count(distinct col_long) | |
any_value() | any_value(col_long) | |
group by | group by col_long |
参照
検索インデックスを使用してSQLクエリを高速化する場合、全文検索、検索インデックスのArray型、検索インデックスでサポートされているNESTED、検索インデックスの仮想列など、検索インデックスに基づく機能を使用できます。