通過命令列工具進入 SQL 模式,使用 SQL 陳述式管理映射關係、查詢和動作表資料。
前提條件
支援的 SQL 陳述式
命令列工具支援以下 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
進入 SQL 模式後顯示以下提示:
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資料類型映射。
更新映射表屬性列
當資料表新增屬性列時,可以通過 ALTER TABLE 為映射表添加列。
ALTER TABLE mytable ADD COLUMN col3 MEDIUMTEXT;
查看映射表列表
SHOW TABLES;
返回結果樣本:
+----------------------+
| Tables_in_myinstance |
+----------------------+
| mytable |
+----------------------+
| mytstable |
+----------------------+
| mytstable::meta |
+----------------------+
其中 mytable 為資料表的映射表,mytstable 為時序資料表,mytstable::meta 為時序中繼資料表。時序表和對應的中繼資料表均支援通過 SQL 查詢。
查看映射表資訊
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 | |
+-------+------------+------+-----+---------+-------+
時序表使用固定的單值模型 Schema:
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 | |
+-------------------+---------------+------+-----+---------+-------+
時序表採用單值模型,每個 field 展開為獨立一行。寫入時一行包含多個 field 時,SQL 查詢結果中會拆分為多行,每行只有一個 _*_value 列有值。
查看索引資訊
查看映射表關聯的索引列表及索引列資訊。
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 查詢到首次寫入的資料。已有時間軸追加資料可即時查詢。
寫入和修改資料
在 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;
刪除映射關係
當資料表的屬性列發生變化時,可以刪除映射關係後重新建立。
時序表的映射關係由系統自動管理,不支援通過 DROP MAPPING TABLE 刪除。
DROP MAPPING TABLE mytable;