SQL クエリ機能は、Tablestore の複数のデータエンジンへの一元的なアクセスインターフェースを提供し、MySQL のクエリ構文と互換性があります。SQL クエリ機能は、大量のデータが保存されていて、オンラインでデータにアクセスしたい場合に適しています。SQL クエリ機能を使用すると、Tablestore 内のデータに対して複雑なクエリと分析を効率的に実行できます。
背景情報
Tablestore は、構造化データを保存できる従来の NoSQL ストレージタイプと、クラウドネイティブ SQL エンジン機能を提供します。これにより、ビジネスを Tablestore にスムーズに移行し、SQL ステートメントを実行して Tablestore にアクセスできます。SQL クエリ機能は MySQL クエリ構文と互換性があり、DDL ステートメントを実行してテーブルを作成できます。既存のデータテーブルの場合、CREATE TABLE ステートメントを実行して、データテーブルのマッピングテーブルを作成できます。その後、SQL ステートメントを実行して、既存のデータテーブル内のデータにアクセスできます。
SQL クエリ機能を使用すると、検索インデックスを使用して、クエリ条件を満たすデータをすばやくクエリできます。SQL クエリ機能を使用すると、システムは SQL ステートメントに基づいて、SQL アクセスを高速化する適切な方法を自動的に選択します。
SQL クエリ機能は、大量のデータが保存されていて、オンラインでデータにアクセスしたい場合に適しています。SQL クエリ機能を使用する場合、アクセスレイテンシはミリ秒から分までです。SQL クエリ機能は、データテーブルのプライマリキーに基づくポイントクエリ (GetRow 操作)、検索インデックスに基づくタームクエリ (TermQuery)、および特定の条件を満たす行数や列の値の合計など、検索インデックスの集計機能に基づくクエリをサポートします。
用語
SQL の使用には、従来のデータベースの多くの用語が関係します。次の表は、従来のデータベースの特定の用語と、用語と Tablestore 用語間のマッピングを示しています。
データベース用語 | Tablestore 用語 | 説明 |
データベース | インスタンス | データベースは、データ構造に基づいてデータを編成、保存、および管理するデータリポジトリです。データベースには、1 つ以上のテーブルを含めることができます。 |
テーブル | テーブル | テーブルは、行と列で構成されます。 |
インデックス | セカンダリインデックスと検索インデックス | インデックスは、データクエリを高速化するために作成されるストレージ構造です。 |
機能
SQL 機能
単一の SQL ステートメントを実行することで、単一の要求を開始できます。
CREATE TABLE、ALTER TABLE、DROP MAPPING TABLE、DESCRIBE ステートメントなどの基本的な DDL ステートメントをサポートしています。詳細については、テーブルのマッピングテーブルを作成する、検索インデックスのマッピングテーブルを作成する、マッピングテーブルの属性列を更新する、マッピングテーブルを削除する、テーブルに関する情報をクエリするをご参照ください。
SELECT ステートメントを含むデータクエリ言語 (DQL) ステートメントをサポートしています。SELECT ステートメントを実行して、基本的なデータクエリ、集計、条件に基づくフィルタリング、ページごとのクエリを実行できます。詳細については、データをクエリするをご参照ください。
SHOW TABLES ステートメントと SHOW INDEX ステートメントなどの基本的なデータベース管理ステートメントをサポートしています。詳細については、マッピングテーブル名の一覧表示とテーブルのインデックス情報をクエリするをご参照ください。
全文検索、ARRAY 列に基づくクエリ、NESTED 列に基づくクエリ、仮想列に基づくクエリなど、検索インデックスを使用してデータクエリを実行できます。詳細については、全文検索、検索インデックスでサポートされている ARRAY、検索インデックスでサポートされている NESTED、検索インデックスの仮想列をご参照ください。
2 つ以上のテーブルを結合し、結合条件とクエリ条件を満たすデータを返すことができます。詳細については、結合をご参照ください。
次の JSON 関数をサポートしています。
->>
、JSON_UNQUOTE、JSON_EXTRACT。詳細については、JSON 関数をご参照ください。
文字セットと照合
文字セット:UTF-8
照合:バイナリ照合
演算子
算術演算子、関係演算子、論理演算子などの SQL 演算子をサポートしています。詳細については、SQL 演算子をご参照ください。
既存のテーブルのマッピングテーブル
CREATE TABLE ステートメントを実行して、既存のテーブルのマッピングテーブルを作成できます。マッピングテーブルを作成する場合は、マッピングテーブルのプライマリキーが既存のテーブルのプライマリキーと同じであり、マッピングテーブルの属性列のタイプが既存のテーブルの属性列と事前定義された列と同じであることを確認してください。データタイプのマッピングについては、SQL でのデータタイプのマッピングをご参照ください。
使用上の注意
SQL クエリ機能は、ワイドカラムモデルと時系列モデルに適しています。詳細については、ワイドカラムモデルと時系列モデルをご参照ください。
SQL クエリ機能を使用する場合、トランザクション機能を使用することはできません。
Tablestore は、SQL ステートメントのキーワードを予約語として使用します。キーワードを使用してテーブルまたは列に名前を付ける場合は、
``
記号を追加してキーワードをエスケープします。キーワードは大文字と小文字を区別しません。詳細については、予約語とキーワードをご参照ください。Tablestore SQL エンジンは、一般的な SQL 規則に従います。さらに、Tablestore SQL エンジンの列名は大文字と小文字を区別しません。たとえば、
SELECT Aa FROM exampletable;
ステートメントは、SELECT aa FROM exampletable;
ステートメントと同じです。Tablestore の列名は大文字と小文字を区別します。SQL を使用する場合、Tablestore の列名は照合のために小文字に変換されます。たとえば、Tablestore テーブルの Aa 列で操作を実行する場合は、SQL で AA、aa、aA、または Aa を使用できます。したがって、Tablestore の列名を同時に AA、aa、aA、Aa にすることはできません。
SQL クエリ機能は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (張家口)、中国 (ウランチャブ)、中国 (深セン)、中国 (成都)、中国 (香港)、シンガポール、インドネシア (ジャカルタ)、日本 (東京)、マレーシア (クアラルンプール)、英国 (ロンドン)、米国 (シリコンバレー)、ドイツ (フランクフルト)、SAU (リヤド - パートナーリージョン)、米国 (バージニア) の各リージョンで使用できます。
制限
詳細については、SQL の制限をご参照ください。
手順
SQL クエリ機能を使用してデータのクエリと分析を実行する手順は、データの保存に使用されるデータモデルによって異なります。SQL クエリ機能を使用して、ワイドカラムモデルまたは時系列モデルのデータをクエリおよび分析できます。使用するデータモデルに基づいて、データのクエリと分析の手順を実行します。
ワイドカラムモデルでデータのクエリと分析を実行する手順
手順 | 操作 | 説明 |
1 | テーブルのマッピングテーブルを作成する | SQL クエリ機能を使用してテーブル内のデータをクエリする前に、テーブルのマッピングテーブルを手動で作成する必要があります。詳細については、テーブルのマッピングテーブルを作成するをご参照ください。 データテーブルに検索インデックスが作成されている場合は、検索インデックスのマッピングテーブルを作成できます。これにより、SQL ステートメントを実行して、検索インデックスに基づいてデータをクエリできます。詳細については、検索インデックスのマッピングテーブルを作成するをご参照ください。 |
2 | SQL を使用してデータをクエリする | マッピングテーブルを使用して、マッピングテーブルまたは検索インデックスが作成されたテーブル内のデータをクエリできます。SQL クエリ機能を使用して、次のクエリ操作を実行できます。
|
3 | SQL を使用してデータを分析する | マッピングテーブルを使用して、マッピングテーブルが作成されたテーブル内のデータを分析できます。GROUP BY ステートメントを使用して、特定の条件に基づいて結果セットをグループ化できます。また、集計関数を使用して、データの統計情報を収集し、計算することもできます。詳細については、GROUP BY 句 (groupby_condition) と集計関数をご参照ください。 |
時系列モデルでデータのクエリと分析を実行する手順
手順 | 操作 | 説明 |
1 | テーブルのマッピングテーブルを作成する | SQL クエリ機能を使用してテーブル内のデータをクエリする前に、テーブルのマッピングテーブルを作成する必要があります。 時系列テーブルには、単一値モデルのマッピングテーブル、複数値モデルのマッピングテーブル、または時系列メタデータのマッピングテーブルを作成できます。 時系列テーブルを作成すると、システムは時系列テーブルに対して単一値モデルのマッピングテーブルと時系列メタデータのマッピングテーブルを自動的に作成します。複数値モデルのマッピングテーブルを作成してデータをクエリできます。詳細については、SQL での時系列テーブルのマッピングテーブルをご参照ください。 |
2 | SQL を使用してデータをクエリする | マッピングテーブルを使用して、マッピングテーブルが作成されたテーブル内のデータをクエリできます。単一値モデルのマッピングテーブルまたは複数値モデルのマッピングテーブルを使用して時系列データをクエリし、時系列メタデータのマッピングテーブルを使用して時系列メタデータをクエリできます。詳細については、SQL の例をご参照ください。 |
3 | SQL を使用してデータを分析する | マッピングテーブルを使用して、マッピングテーブルが作成されたテーブル内のデータを分析できます。時系列のメタデータは、時系列のメトリック名、データソース、タグ、および属性で構成されます。tag_value_at 関数を使用して、タグ (_tags) の値と属性 (_attributes) の値を抽出できます。詳細については、SQL の例をご参照ください。 |
方法
SQL クエリ機能は、Tablestore コンソール、Tablestore CLI、Tablestore SDK、JDBC ドライバー、および Go 用 Tablestore ドライバーで使用できます。
料金
SQL クエリ機能の使用には料金はかかりません。ただし、SQL クエリ機能を使用すると、テーブルスキャンやインデックスベースのクエリなどの操作によって生成される読み取りおよび書き込みスループットに対して課金されます。詳細については、SQL クエリの課金対象項目をご参照ください。
FAQ
参考資料
SQL ステートメントを実行することでデータクエリと計算を高速化するには、セカンダリインデックスまたは検索インデックスを作成できます。詳細については、インデックス選択ポリシーと計算プッシュダウンをご参照ください。
MaxCompute、Spark、Hive、HadoopMR、Function Compute、Flink、PrestoDB などの計算エンジンを使用して、テーブル内のデータの計算と分析を行うこともできます。詳細については、概要をご参照ください。
データを視覚化するには、Grafana を使用できます。たとえば、Grafana を使用して Tablestore データをグラフに表示できます。詳細については、Tablestore を Grafana に接続するをご参照ください。
付録: SQL クエリ機能と検索インデックス機能の違い
SQL クエリ機能と検索インデックス機能は、特定のデータクエリおよび分析機能を提供します。次の表は、SQL クエリ機能と検索インデックス機能の機能を示し、機能間のマッピングを提供します。
検索インデックス | SQL 関数/ステートメント | |
等しい (=) | ||
より大きい (>)、より小さい (<)、以上 (>=)、以下 (<=)、BETWEEN ... AND ... | ||
MustQueries | AND | |
MustNotQueries | != | |
ShouldQueries | OR | |
FieldSort | ORDER BY | |
SetLimit | LIMIT | |
最小値 | MIN() | |
最大値 | MAX() | |
合計 | SUM() | |
平均値 | AVG() | |
件数 | COUNT() | |
重複を除く件数 | COUNT(DISTINCT) | |
各グループの集計操作の結果から取得された行をクエリする | ANY_VALUE() | |
フィールド値でグループ化する | GROUP BY |