通过命令行工具进入 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;