Tablestore CLI の SQL モードを使用して、テーブルのマッピングを管理し、データをクエリまたは変更します。
前提条件
Tablestore CLI がインストールされ、アクセス認証情報が設定されていること。詳細については、「Tablestore CLI」をご参照ください。
データテーブルまたは時系列テーブルが作成されていること。詳細については、「データテーブル操作」または「時系列テーブル操作」をご参照ください。
サポートされる SQL ステートメント
Tablestore CLI は、次の SQL ステートメントをサポートしています。完全な構文については、「SQL クエリ」をご参照ください。
|
カテゴリ |
SQL ステートメント |
説明 |
|
DDL |
CREATE TABLE |
データテーブルまたは検索インデックスのマッピングを作成します。 |
|
ALTER TABLE |
マッピングテーブルの属性列を追加または削除します。 |
|
|
DROP MAPPING TABLE |
テーブルのマッピングを削除します。 |
|
|
DESCRIBE |
マッピングテーブルのスキーマを表示します。 |
|
|
DQL |
SELECT |
テーブルデータをクエリします。WHERE 句、集計関数、JOIN、LIMIT を使用できます。 |
|
DBA |
SHOW TABLES |
現在のインスタンス内のすべてのマッピングテーブルを一覧表示します。 |
|
SHOW INDEX |
インデックスの詳細を表示します。 |
|
|
DML |
INSERT |
データを書き込みます。非トランザクションテーブルでのみ使用できます。 |
|
UPDATE |
データを更新します。非トランザクションテーブルでのみ使用できます。すべてのプライマリキー列に等価条件を指定して、単一の行を特定します。 |
|
|
DELETE |
データを削除します。非トランザクションテーブルでのみ使用できます。すべてのプライマリキー列に等価条件を指定して、単一の行を特定します。 |
SQL モードの開始と終了
sql を実行して SQL モードを開始し、exit; を実行してコマンドモードに戻ります。
sql
SQL モードを開始すると、CLI に次のメッセージが表示されます。
Enter 'SQL' mode, input 'exit;' if you want to quit into 'COMMAND' mode.
マッピングの作成
データテーブルで SQL クエリを実行するにはマッピングが必要です。
時系列テーブルは自動的にマッピングされます。CREATE TABLE をスキップし、SHOW TABLES を実行して確認してください。
CREATE TABLE mytable(
`uid` VARCHAR(1024),
`pid` BIGINT(20),
`col1` BIGINT(20),
`col2` MEDIUMTEXT,
PRIMARY KEY(`uid`,`pid`)
);
VARCHAR はプライマリキー列にのみ使用してください。属性列には MEDIUMTEXT を使用してください。
SQL データ型と Tablestore データ型の間のマッピングについては、「SQL でのデータ型のマッピング」をご参照ください。
マッピングテーブルの表示
SHOW TABLES は、現在のインスタンス内のすべてのマッピングテーブルを一覧表示します。
SHOW TABLES;
出力例:
+----------------------+
| Tables_in_myinstance |
+----------------------+
| mytable |
+----------------------+
| mytstable |
+----------------------+
| mytstable::meta |
+----------------------+
mytable はデータテーブルのマッピングテーブルです。mytstable は時系列テーブルで、mytstable::meta は時系列メタデータテーブルです。時系列テーブルとそのメタデータテーブルはどちらも SQL クエリをサポートしています。
マッピングテーブルの詳細の表示
列の詳細を確認するには、マッピングテーブルに対して DESCRIBE を実行します。
DESCRIBE mytable;
出力例:
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| uid | varchar(1024) | NO | PRI | null | |
+-------+------------+------+-----+---------+-------+
| pid | bigint(20) | NO | PRI | null | |
+-------+------------+------+-----+---------+-------+
| col1 | bigint(20) | YES | | null | |
+-------+------------+------+-----+---------+-------+
| col2 | mediumtext | YES | | null | |
+-------+------------+------+-----+---------+-------+
時系列テーブルは固定の単一値スキーマを使用します。
DESCRIBE mytstable;
+-------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+---------------+------+-----+---------+-------+
| _m_name | varchar(1000) | NO | PRI | null | |
+-------------------+---------------+------+-----+---------+-------+
| _data_source | varchar(1000) | NO | PRI | null | |
+-------------------+---------------+------+-----+---------+-------+
| _tags | varchar(1000) | NO | PRI | null | |
+-------------------+---------------+------+-----+---------+-------+
| _time | bigint(20) | NO | PRI | null | |
+-------------------+---------------+------+-----+---------+-------+
| _field_name | varchar(1000) | YES | | null | |
+-------------------+---------------+------+-----+---------+-------+
| _long_value | bigint(20) | YES | | null | |
+-------------------+---------------+------+-----+---------+-------+
| _double_value | double | YES | | null | |
+-------------------+---------------+------+-----+---------+-------+
| _bool_value | tinyint(1) | YES | | null | |
+-------------------+---------------+------+-----+---------+-------+
| _string_value | varchar(1000) | YES | | null | |
+-------------------+---------------+------+-----+---------+-------+
| _binary_value | mediumblob | YES | | null | |
+-------------------+---------------+------+-----+---------+-------+
| _attributes | varchar(1000) | YES | | null | |
+-------------------+---------------+------+-----+---------+-------+
| _meta_update_time | bigint(20) | YES | | null | |
+-------------------+---------------+------+-----+---------+-------+
時系列テーブルは単一値モデルを使用し、各フィールドが個別の行に展開されます。複数のフィールドを含む行を書き込むと、各フィールドは SQL クエリの結果では個別の行として表示され、_*_value 列は 1 つだけ使用されます。
インデックス情報の表示
SHOW INDEX は、マッピングテーブルに関連付けられているインデックスとその列の詳細を表示します。
SHOW INDEX FROM mytable;
データのクエリ
SELECT ステートメントを使用して、マッピングテーブルからデータをクエリします。
SELECT * FROM mytable;
例
-
特定の条件でフィルタリングします。
SELECT * FROM mytable WHERE uid = 'user001' AND pid = 1; -
行数をカウントします。
SELECT COUNT(*) FROM mytable; -
返される行数を制限します。
SELECT * FROM mytable LIMIT 10; -
時系列テーブルのデータをクエリします。
SELECT * FROM mytstable LIMIT 10;
時系列テーブルを作成した後、最初のデータがクエリ可能になるまで約 1 分かかります。既存のタイムラインに追加されたデータはすぐにクエリできます。
データの書き込みと変更
SQL モードでは、非トランザクションテーブルに対して INSERT、UPDATE、DELETE ステートメントを実行します。完全な構文と制約については、「DML 操作」をご参照ください。
DML ステートメントは非トランザクションテーブル (トランザクションを有効にせずに作成されたテーブル) でのみ使用できます。
UPDATE と DELETE では、単一の行を指定するために、すべてのプライマリキー列に等価条件が必要です。
時系列テーブルは DML ステートメント (INSERT、UPDATE、DELETE) をサポートしていません。時系列データを書き込むには、
puttsまたはimport_timeseriesコマンドを使用してください。
例
-
行を挿入します。
INSERT INTO mytable (uid, pid, col1) VALUES ('user001', 1, 100); -
特定の行を更新します。
UPDATE mytable SET col1 = 200 WHERE uid = 'user001' AND pid = 1; -
特定の行を削除します。
DELETE FROM mytable WHERE uid = 'user001' AND pid = 1;
マッピングテーブルの列の更新
データテーブルの列を追加または削除した場合は、ALTER TABLE を使用してマッピングを更新します。
ALTER TABLE mytable ADD COLUMN col3 MEDIUMTEXT;
マッピングの削除
データテーブルの属性列のデータ型を変更するなど、列の追加や削除以外の変更を行った場合は、マッピングを削除して再作成します。
システムは時系列テーブルのマッピングを自動的に管理するため、DROP MAPPING TABLE で削除することはできません。
DROP MAPPING TABLE mytable;