Tablestore は、ワイドテーブルと時系列データ向けに MySQL 互換の SQL インターフェイスを提供します。DDL、DQL、DML 文を実行できるほか、検索インデックスを使用して全文検索、ベクトル検索、配列クエリ、ネストクエリ、JSON クエリも実行できます。
仕組み
Tablestore は、NoSQL ストレージ上で SQL エンジンを実行します。既存のデータテーブルに対して CREATE TABLE でマッピングテーブルを作成し、SQL でデータにアクセスします。SQL エンジンは、クエリを高速化するために最適なインデックスを自動的に選択します。
従来のリレーショナルデータベースとは異なり、Tablestore の CREATE TABLE は物理テーブルを作成しません。代わりに、既存のデータテーブルまたは検索インデックスに対する SQL アクセスマッピングを作成します。DROP MAPPING TABLE はマッピングのみを削除し、基になるデータには影響しません。
SQL エンジンの概念と Tablestore の概念は、次のように対応します。
データベースの概念 | Tablestoreの概念 | 説明 |
データベース | インスタンス | データを整理、保存、管理するリポジトリ。インスタンスには 1 つ以上のテーブルを含めることができます。 |
テーブル | マッピングテーブル | 既存のデータテーブルに対する SQL アクセスマッピング。CREATE TABLE で作成されます。行と列で構成されます。 |
インデックス | セカンダリインデックス、検索インデックス | クエリを高速化するために作成されるストレージ構造。SQL エンジンは最適なインデックスを自動的に選択します。 |
SQL クエリは、次のリージョンで利用できます:China (Hangzhou)、China (Shanghai)、China (Beijing)、China (Zhangjiakou)、China (Ulanqab)、China (Shenzhen)、China (Chengdu)、China (Hong Kong)、Japan (Tokyo)、Singapore、Malaysia (Kuala Lumpur)、Indonesia (Jakarta)、Germany (Frankfurt)、UK (London)、US (Silicon Valley)、US (Virginia)、SAU (Riyadh)。
アクセス方法
SQL クエリは、次の方法で実行します。
方法 | ユースケース | リファレンス |
コンソール | コードを使用しない小規模なデータクエリと検証。 | |
CLI | 開発、デバッグ、および自動化スクリプト。 | |
JDBC | 標準の JDBC インターフェイスを介して Tablestore にアクセスする Java アプリケーション。 | |
Hibernate | 既存の Hibernate プロジェクトのための Java ORM 統合。 | |
MyBatis | 既存の MyBatis プロジェクトのための Java 永続化フレームワーク統合。 | |
Go ドライバー | 標準の database/sql インターフェイスを介して Tablestore にアクセスする Go アプリケーション。 | |
SDK | アプリケーション内でのプログラムによる SQL 実行。 | |
サポートされている SQL 文
SQL エンジンは次の文をサポートしています。
カテゴリ | 文 | 説明 |
CREATE TABLE | データテーブルまたは検索インデックスの SQL マッピングを作成します。 | |
ALTER TABLE | 属性列を追加または削除します。 | |
DROP MAPPING TABLE | マッピングを削除します。基になるデータには影響しません。 | |
SHOW TABLES | 現在のインスタンス内のすべてのマッピングテーブルを一覧表示します。 | |
SHOW INDEX | インデックス情報を表示します。 | |
DESCRIBE | テーブルスキーマを表示します。 | |
DROP TABLE | データテーブルを削除します。サポートされていません。 | |
SELECT | フィルタリング、集計関数 (MIN、MAX、SUM、AVG、COUNT)、GROUP BY、ORDER BY、LIMIT を使用してデータをクエリします。 | |
SELECT JOIN | テーブル間でデータを結合します。INNER、LEFT、RIGHT、CROSS JOIN をサポートします。 | |
INSERT / UPDATE / DELETE | データの書き込み、更新、削除を行います。 | |
全文検索 / 配列 / ネスト / ベクトル / JSON | 検索インデックスを使用して、全文検索、配列クエリ、ネストクエリ、ベクトル検索、JSON クエリを実行します。 | |
その他 | CREATE INDEX | インデックスを作成します。サポートされていません。 |
その他の機能:
文字セットは UTF-8 で、バイナリ照合順序を使用します。
算術演算子、比較演算子、論理演算子、ビット演算子がサポートされています (SQL 演算子)。
SQL のデータ型は Tablestore のデータ型に対応します (データ型マッピング)。
インデックス選択の最適化と計算プッシュダウンがサポートされています (クエリ最適化)。
予約語とキーワードの完全なリストについては、「SQL の予約語とキーワード」をご参照ください。
SQL 演算子
Tablestore SQL は 4 つのカテゴリの演算子をサポートしています。
算術演算子
算術演算子は SELECT または WHERE 句で数値計算に使用します。
演算子 | 名前 | 説明 |
A+B | 加算 | A+B の結果を返します。 |
A-B | 減算 | A-B の結果を返します。 |
A*B | 乗算 | A*B の結果を返します。 |
A/B または A DIV B | 除算 | A/B の結果を返します。 |
A%B または A MOD B | 剰余 | A/B の余りを返します。 |
比較演算子
比較演算子は条件を評価し、真 (TRUE) の場合は 1 を、偽 (FALSE) の場合は 0 を返します。WHERE 句で使用します。
演算子 | 名前 | 説明 |
A:=B | 代入 | B の値を A に代入します。 |
A=B | 等しい | A が B と等しい場合は 1 を、それ以外の場合は 0 を返します。 |
A!=B または A<>B | 等しくない | A が B と等しくない場合は 1 を、それ以外の場合は 0 を返します。 |
A>B | より大きい | A が B より大きい場合は 1 を、それ以外の場合は 0 を返します。 |
A<B | より小さい | A が B より小さい場合は 1 を、それ以外の場合は 0 を返します。 |
A>=B | 以上 | A が B 以上の場合は 1 を、それ以外の場合は 0 を返します。 |
A<=B | 以下 | A が B 以下の場合は 1 を、それ以外の場合は 0 を返します。 |
IN (A,B...) | セット内 | 列の値がセット内のいずれかの値と一致する場合は 1 を、それ以外の場合は 0 を返します。 |
BETWEEN A AND B | 範囲内 | 値が >= A かつ <= B の場合は 1 を、それ以外の場合は 0 を返します。 |
NOT BETWEEN A AND B | 範囲外 | 値が > B または < A の場合は 1 を、それ以外の場合は 0 を返します。 |
A LIKE B | パターンマッチ | 文字列を照合します。 |
A NOT LIKE B | パターン不一致 | 一致しない文字列を返します。 |
論理演算子
論理演算子は式を評価し、真 (TRUE) の場合は 1 を、偽 (FALSE) の場合は 0 を返します。WHERE 句で複合条件を構築するために使用します。
演算子 | 名前 | 説明 |
A AND B または A&&B | 論理積 (AND) | A と B の両方が TRUE の場合は 1 を、それ以外の場合は 0 を返します。 |
A OR B | 論理和 (OR) | A または B の少なくとも一方が TRUE の場合は 1 を、それ以外の場合は 0 を返します。 |
A XOR B | 排他的論理和 (XOR) | A と B が異なる場合は 1 を、それ以外の場合は 0 を返します。 |
NOT A または !A | 論理否定 (NOT) | A が FALSE の場合は 1 を、それ以外の場合は 0 を返します。 |
ビット演算子
ビット演算子は、2 進数で計算を実行します。計算の際、オペランドは 2 進数に変換され、結果は 10 進数で返されます。
演算子 | 名前 | 説明 |
A&B | ビット単位のAND | A と B のビット単位の AND を返します。 |
A|B | ビット単位のOR | A と B のビット単位の OR を返します。 |
A^B | ビット単位のXOR | A と B のビット単位の XOR を返します。 |
~A | ビット単位のNOT | A のビット単位の補数を返します。 |
データ型マッピング
SQL の列は、同じ名前のテーブルの列に対応します。データ型は一致している必要があります。
VARBINARY または VARCHAR を使用する主キー列には、最大長を 1024 に設定します。
SQL の BIGINT と Tablestore の Integer は、どちらも 64 ビット整数型です。
主キー列のデータ型としてサポートされているのは、BIGINT、VARBINARY、VARCHAR のみです。
SQL データ型 | データテーブルの型 | 検索インデックスの型 |
BIGINT | Integer | Integer |
VARBINARY (主キー) / MEDIUMBLOB (属性列) | Binary | Binary |
VARCHAR (主キー) / MEDIUMTEXT (属性列) | String | Keyword |
Text | ||
DOUBLE | Double | Double |
BOOL | Boolean | Boolean |
制限
トランザクションはサポートされていません。
SQL キーワードは予約語であり、大文字と小文字を区別しません。キーワードをテーブル名または列名として使用するには、
``でエスケープする必要があります。完全なリストについては、「SQL の予約語とキーワード」をご参照ください。SQL エンジンは列名の大文字と小文字を区別しません。
SELECT Aa FROM tはSELECT aa FROM tと同等です。基になる Tablestore テーブルでは大文字と小文字が区別されるため、SQL エンジンは照合のためにすべての列名を小文字に変換します。元のテーブルには、大文字と小文字の違いしかない列を含めることはできません。
その他の制限については、「SQL クエリの制限」をご参照ください。
課金
SQL クエリに追加料金は発生しません。クエリ実行中のテーブルスキャン、インデックスクエリ、およびデータの読み取り/書き込み操作は、標準の価格設定に従って課金されます。詳細については、「SQL クエリの課金項目」をご参照ください。