表格存储 SQL 操作实战-阿里云开发者社区

开发者社区> 宇珩> 正文

表格存储 SQL 操作实战

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

开篇

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

操作举例

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

实例详情页

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

SQL 查询页面

1. 表绑定


进入页面,你会发现,在数据库“sqltest” 下面并没有表,不用慌,这是因为这些表不是通过 SQL 引擎创建出来的,本身表格存储并不要求您定义完整的表 Schema,即 Schema free 的灵活方式,但是为了实现 SQL 查询,我们需要这里定义一下 Schema,注意这里的定义不会影响你的线上非 SQL 写入,只会给 SQL 查询用,您可以放心的设置。点击➕图标,可以选择一个表,我们会帮您生成一个默认的创建定义SQL Schema的模板,语法和创建物理表是一样的。

你可以根据需求去添加,删除 Create Table 中的列,注意数据类型的映射关系可以参考数据类型映射
很快我们绑定好两张表后,就可以开始体验查询了。

2. 查看绑定信息

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

3. 查看索引



索引也会对查询性能有很大影响,后面随着我们的查询会在详细解释。

4. 体验查询

点查

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

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

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

范围查询

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

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

范围查询和过滤

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

指定了属性列的一些条件,就会添加过滤条件。

注意这里,可能会有多次数据和存储进行交互,因为可能需要持续扫描,以这个为例,我们扫描出100条满足条件得到数据花费了1.1s。

扫描数据超限

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

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

这样的请求可能会扫很多数据过滤然后在进行排序才能返回结果,此时就会触发我们的超限。
控制台会看到如下错误提示:

这里我们只是做了保护,具体的限制项可以参考我们的官网文档,SQL使用限制,如果希望更大规模的数据计算需求,可以联系我们。

5. 索引加速

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

统计表行数


约10亿行数据,进行一次全表count,1.7秒。

基于属性列的过滤

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

统计聚合

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

小结

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

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL 基础---存储过程和函数操作
存储过程和函数就是实现经过编译并存储在数据库中的一段sql语句集合。函数必须有返回值,而存储过程则没有。存储过程的参数类型远远多于函数参数类型。 存储过程和函数的优点: 存储过程和函数允许标准组件式编程,提高了SQL语句的重用性、共享性和可移植性。
952 0
表格存储 SQL 数据类型详解
本文主要介绍 Tablestore SQL中的数据类型与 MySQL 数据类型之间的映射关系。 ​ ## 背景介绍 ### Tablestore 数据类型 Tablestore 中的数据类型支持如下表所示,其中主键列支持的数据类型包括String、Integer和Binary,属性列支持的数据类型包括String、Integer、Double、Boolean和Binary。 - 主键列支持的数
46 0
表格存储 SQL 操作实战
表格存储做为一款结构化存储系统,近期发布了新功能 SQL,大幅简化了查询的门槛,用户无需学习繁琐的 SDK,也不用区分表,索引等不同的接口,可以像访问传统的 MySQL 这类数据库一样,使用 SQL 的方式访问云原生的结构化大数据存储。下面我们就来具体实操下,看看查询用起来顺不顺手。
93 0
表格存储 SQL 功能快速上手
# 功能介绍 表格存储(Tablestore)是阿里云自研的多模型结构化数据存储,提供海量结构化数据存储以及快速的查询和分析服务。表格存储的分布式存储和强大的索引引擎能够支持 PB 级存储、千万 TPS 以及毫秒级延迟的服务能力。使用表格存储你可以方便的存储和查询你的海量数据。​ 表格存储正式发布了 SQL 功能,满足用户业务平滑迁移到表格存储并可以继续通过 SQL 方式访问表格存储,表格存储
411 0
MP实战系列(十三)之批量修改操作(前后台异步交互)
MyBatis的批量操作其实同MyBatis基本是一样的。并无多大区别,要说区别,除了封装的方法之外,主要就是注解方面的区别,比如@TableId、@TableField、@TableName等等区别。
1053 0
QT绘图的底层操作
绘图的底层操作LCD屏幕上的每个点都与显示缓冲区中的数据有特定的关系,对16位色的显示缓冲区,每两个字节对应LCD上的一个像素,因此我们只要修改缓冲区某两个地址上的数据就可以改变LCD上这个点的色彩,如果我们能够得到这个显示缓冲区的地址,应用程序编写者就可以抛开驱动程序那些抽象的接口,直接对显示缓冲区操作。
882 0
C# 线程操作
using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.
578 0
jquery操作表格 合并单元格
jquery操作table,合并单元格,合并相同的行   合并的方法 $("#tableid").mergeCell({  cols:[X,X] ///参数为要合并的列}) /** * 操作表格 合并单元格 行 * 2016年12月13日16:00:41 */ (function($) { // 看过jquery源码就可以发现$.fn就是$.p
1114 0
+关注
宇珩
阿里云技术专家,表格存储产品研发
17
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载