SQL查询为表格存储的多数据引擎提供统一的访问接口,兼容MySQL的查询语法,适用于在海量数据中进行在线数据访问类型的场景。您可以通过SQL查询功能对表格存储中的数据进行复杂的查询和高效的分析。
背景信息
为了满足用户业务平滑迁移到表格存储以及使用SQL方式访问表格存储的需求,表格存储在传统的NoSQL结构化存储之上,提供云原生的SQL引擎能力。SQL查询兼容MySQL的查询语法,同时提供基础的SQL DDL建表能力。对于已有数据表,通过执行CREATE TABLE一键自动建立映射关系后,您可以使用SQL方式访问表中数据。
SQL查询功能支持通过多元索引来快速查询满足查询条件的数据。使用SQL查询时,系统会根据SQL语句自动选择合适的方式来加速SQL访问。
SQL查询功能适用于在海量数据中进行在线数据访问类型的场景,SQL访问的延时从毫秒、秒到分钟级别不等,包括基于数据表主键的Point Query (GetRow操作)、多元索引的精确查询(TermQuery )等以及通过多元索引的统计聚合能力进行查询,例如数据表中满足某个条件的个数、某列求和等。
基本概念
SQL的使用会涉及到很多传统数据库中的概念,此处介绍下相关概念以及与现有表格存储概念的映射关系。
数据库概念 | 表格存储概念 | 描述 |
数据库 | 实例 | 按照数据结构来组织、存储和管理数据的仓库。一个数据库中可以包含一个或者多个表。 |
表 | 表 | 由行和列组成。 |
索引 | 二级索引、多元索引 | 为加速数据查询而创建的一种存储结构。 |
功能特性
SQL功能
字符集和排序规则
字符集:UTF-8
排序规则:二进制排序规则
操作符
支持算术运算符、关系运算符、逻辑运算符等SQL操作符。更多信息,请参见SQL操作符。
存量表绑定
通过CREATE TABLE语句,您可以为存量表创建映射关系。创建映射关系时,请确保主键和存量表的主键一致,属性列和存量表的属性列类型以及预定义列类型一致。关于数据类型映射关系的更多信息,请参见SQL数据类型映射。
注意事项
在使用SQL查询时,不支持事务功能。
表格存储将SQL语句中的关键字作为保留字。如果在命名表或者列时需要使用关键字,则请添加
``
符号对关键字进行转义。关键字不区分大小写。 更多信息,请参见保留字与关键字。表格存储的SQL引擎遵循通用的SQL规范,对列名大小写不敏感,例如操作
SELECT Aa FROM exampletable;
语句与SELECT aa FROM exampletable;
语句是等价的。由于表格存储中原始表的列名大小写敏感,当使用SQL时,原始表的列名会统一转换为小写字母进行匹配,即如果要操作表格存储表中的Aa列,在SQL中使用AA、aa、aA、Aa均可,因此表格存储原始表的列名不能同时为AA、aa、aA和Aa。
目前支持使用SQL查询功能的地域有华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华南1(深圳)、西南1(成都)、中国香港、新加坡、印度尼西亚(雅加达)、德国(法兰克福)、沙特(利雅得)和美国(弗吉尼亚)。
使用限制
更多信息,请参见SQL使用限制。
使用流程
宽表模型与时序模型的使用步骤的实现存在差异,请根据实际情况查询相应步骤信息。
宽表模型使用步骤说明
步骤 | 操作 | 说明 |
1 | 为表创建映射关系 | 使用SQL查询数据前,您需要手动创建表的映射关系。具体操作,请参见创建表的映射关系, 如果已为数据表创建多元索引,您还可以选择为多元索引创建映射关系来实现通过指定多元索引查询数据。具体操作,请参见创建多元索引的映射关系。 |
2 | 使用SQL查询数据 | 通过表的映射关系查询表中数据。您可以通过SQL查询实现如下功能:
|
3 | 使用SQL分析数据 | 通过表的映射关系分析表中的数据。您可以通过GROUP BY语句对结果集按照指定条件进行分组,并且可以使用聚合函数进行数据的统计与计算。更多信息,请参见GROUP BY分组查询和聚合函数。 |
时序模型使用步骤说明
步骤 | 操作 | 说明 |
1 | 为表创建映射关系 | 使用SQL查询数据前,您需要为表创建映射关系。 您可以为时序表建立单值模型映射关系、多值模型映射关系或时间线元数据映射关系三种映射关系进行数据查询。 创建时序表后,系统会自动为表创建单值模型映射关系和时间线元数据映射关系,无需手动创建。如果要以多值模型查询时序数据,您需要手动创建多值模型映射关系。具体操作,请参见时序表的SQL映射关系。 |
2 | 使用SQL查询数据 | 通过表的映射关系查询表中数据。您可以使用单值模型或者多值模型查询时序数据以及使用时间线元数据映射关系查询时间线元数据。更多信息,请参见时序模型SQL查询与分析示例。 |
3 | 使用SQL分析数据 | 通过表的映射关系分析表中数据。您可以使用tag_value_at扩展函数提取时间线标签(_tags)中的某个标签(tag)的值以及时间线属性(_attributes)中的某个属性值。更多信息,请参见时序模型SQL查询与分析示例。 |
使用方式
您可以通过表格存储控制台、命令行工具、表格存储SDK、JDBC、Go语言驱动使用SQL查询。
计费说明
SQL本身不会有额外的费用,但是使用SQL查询数据过程中涉及到的表扫描、索引查询等操作会产生费用。更多信息,请参见SQL查询计量计费。
常见问题
相关文档
附录:SQL与多元索引功能对比
SQL查询和多元索引均能实现一些数据查询与分析功能,下表展示了两者的功能对比关系。
多元索引功能 | SQL函数/语句 | |
等于(=) | ||
大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、BETWEEN ... AND ... | ||
MustQueries | AND | |
MustNotQueries | != | |
ShouldQueries | OR | |
FieldSort | ORDER BY | |
SetLimit | LIMIT | |
最小值 | MIN() | |
最大值 | MAX() | |
和 | SUM() | |
平均值 | AVG() | |
统计行数 | COUNT() | |
统计去重行数 | COUNT(DISTINCT) | |
获取统计聚合分组中的行 | ANY_VALUE() | |
字段值分组 | GROUP BY |