表格存储 SQL 操作实战

开篇

表格存储做为一款结构化存储系统,近期发布了新功能 SQL,大幅简化了查询的门槛,用户无需学习繁琐的 SDK,也不用区分表,索引等不同的接口,可以像访问传统的 MySQL 这类数据库一样,使用 SQL 的方式访问云原生的结构化大数据存储。下面我们就来具体实操下,看看查询用起来顺不顺手。

操作举例

话不多说我们就开始进入表格存储的控制台进行一番操作。

实例详情页

表格存储 SQL 操作实战

这里我们准备了两张订单表。右上角有 SQL 查询 标签,点击这里即可进入我们的 SQL 查询页面。

SQL 查询页面

1. 表绑定

表格存储 SQL 操作实战
进入页面,你会发现,在数据库“sqltest” 下面并没有表,不用慌,这是因为这些表不是通过 SQL 引擎创建出来的,本身表格存储并不要求您定义完整的表 Schema,即 Schema free 的灵活方式,但是为了实现 SQL 查询,我们需要这里定义一下 Schema,注意这里的定义不会影响你的线上非 SQL 写入,只会给 SQL 查询用,您可以放心的设置。点击➕图标,可以选择一个表,我们会帮您生成一个默认的创建定义SQL Schema的模板,语法和创建物理表是一样的。
表格存储 SQL 操作实战
你可以根据需求去添加,删除 Create Table 中的列,注意数据类型的映射关系可以参考数据类型映射
很快我们绑定好两张表后,就可以开始体验查询了。

2. 查看绑定信息

表格存储 SQL 操作实战

这里可以查看到您之前的绑定信息,同时在OTS中的主键也会提示出来。主键会和后续我们的查询性能有很大的关系。

3. 查看索引

表格存储 SQL 操作实战
表格存储 SQL 操作实战
索引也会对查询性能有很大影响,后面随着我们的查询会在详细解释。

4. 体验查询

点查

熟悉表格存储的同学应该知道,ots 中有一个查询接口叫 GetRow,那什么样的SQL会类似点查的效果呢。
表格存储 SQL 操作实战

select * from ordertable where `order` = '0000004bf78d' and orderid = 'o132042352'

当我们的 SQL where 条件中,包含了所有的pk,并且用 = 确定具体 pk 的值,这时候就会触发我们的点查。以上面的 SQL 为例。针对这类点查,我们的 SQL 引擎可以承载高并发低延时的访问,这个和我们的存储引擎有着同样的特性。

范围查询

表格存储 SQL 操作实战

select * from ordertable where `order` >= '0000004bf78d' limit 100

当你的查询指定的是部分主键,或者主键有返回,那么就会变成表格存储的RangeScan进行查询。

范围查询和过滤

select * from ordertable where `order` >= '0000004bf78d' and salespersonid = 's0065' limit 100

指定了属性列的一些条件,就会添加过滤条件。
表格存储 SQL 操作实战
注意这里,可能会有多次数据和存储进行交互,因为可能需要持续扫描,以这个为例,我们扫描出100条满足条件得到数据花费了1.1s。

扫描数据超限

SQL 查询相对表格存储之前的固定pk方式的扫描要灵活许多,所以可能会遇到一些问题,例如您的查询因为没有合理指定条件,导致了全表大范围的扫描,这里我们对您的存储和消耗资源做了保护,对于一些大的查询我们进行了限制。例如:

select * from ordertable where `order` >= '0000004bf78d' and salespersonid = 's0065' order by ordertime limit 100

这样的请求可能会扫很多数据过滤然后在进行排序才能返回结果,此时就会触发我们的超限。
控制台会看到如下错误提示:
表格存储 SQL 操作实战
这里我们只是做了保护,具体的限制项可以参考我们的官网文档,SQL使用限制,如果希望更大规模的数据计算需求,可以联系我们。

5. 索引加速

上面最后一个例子,我们会发现有些场景跑起来会比较慢因为要扫描很多数据,又或者直接超过了我们的扫描数据上限。那是不是就束手无策了呢?那既然您看到这里,我们肯定会给您一个优化的方案就是:创建多元索引。

统计表行数

表格存储 SQL 操作实战
约10亿行数据,进行一次全表count,1.7秒。

基于属性列的过滤

表格存储 SQL 操作实战

可以看到查询还是非常快的,这是因为有了多元索引后,我们的 SQL 查询过滤条件会被下推到存储层,减少数据的扫描和传输。
那这时候你可能会问如果我带一些聚合查询会快么,那我们来尝试一发:

统计聚合

表格存储 SQL 操作实战

一些聚合函数也都可以在秒级别返回。
这是因为我们的聚合函数,groupby 也下推进入存储索引层,加速了整个过程中的数据传输损耗等。

小结

如果你的查询多基于 pk,可以直接通过绑定表进行数据操作了。如果你的条件相对比较灵活,又或者有一些聚合计算需求,推荐你创建我们的多元索引,然后可以体验到毫秒到秒级别的 SQL 查询体验啦!

最后欢迎扫码加群和我们一起讨论你的使用反馈!

更详细的功能介绍,欢迎参考表格存储官网文档,可以查看具体的 SQL 语法,用例,限制项等。
想了解更多表格存储的用法或者咨询欢迎加群讨论:
我们的开发者技术交流群,可搜索群号『11789671』或『23307953』,亦可直接扫码加入。
表格存储 SQL 操作实战

上一篇:windows系统Tomcat启动过程中找不到JAVA_HOME解决方法


下一篇:《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——第3章 数据流 3.1同步数据流