SQL 查询

更新时间:
复制为 MD 格式

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