今天来聊聊怎么高效建表
建表“高效”,是指建表的速度快吗?no,都9012年了,想啥呢?建表高效是指,建的这张表,怎么样能够快速的被查询到,同样资源条件下,查询性能相比普通表表现更优!
在我们建表时,通常会给表附带属性,比如存储形式、生命周期TTL等,同时也会构建一些索引,以便查询的时候能够更加高效的得出查询结果。但是,不同的产品使用的编程语言又不一样,建表的语法可能也会有些差别,那今天小编就来为大家讲讲,怎么样在交互式分析中高效建表,(偷偷告诉你,看了这个文章,你的建表速度也会更快哦)
1.字段
首先,一张最简单的表由表名和字段组成,字段可以理解表,一张表的列名,而字段类型,就是每列字段的行数据类型,同一列的数据类型必须唯一,例如:一个名为age的列,不可能下面出现行数据为tom吧。示例建一张简单的表如下,当前交互式分析支持的数据类型大家可以参考文档数据类型。
CREATE TABLE ( id bigint , name text , time timestamptz , c double precision );
2.设置字段属性
1)主键
首先是主键,即我们常说的pk(PRIMARY KEY),主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键。
CREATE TABLE my_table ( id bigint NOT NULL, name text NOT NULL, time timestamptz NOT NULL, c double precision NOT NULL, PRIMARY KEY (id) );
2)可空
其次是可空,可空的意思是,这一列的行数据可以为空值,即没有数据。
CREATE TABLE my_table ( id bigint NOT NULL, name text NOT NULL, time timestamptz NOT NULL, c double precision, //这一个字段可空 PRIMARY KEY (id) );
3)数组
接着是数组,关于数组的用法,建议大家参考交互式分析文档数组类型。
3.设置表存储属性
建好一张表之后,需要服务器来存储表,表的存储有行存和列存两种方式。列存储将所有记录中相同字段的数据聚合存储;行存储将每条记录的所有字段的数据聚合存储。在交互式分析,两种存储都支持,但是默认为列存形式,列存对于olap场景较为友好,适合各种复杂查询;行存对于kv场景比较友好,适合基于primary key的点查和scan。
示例建一张列存表:
BEGIN; CREATE TABLE my_table ( id bigint NOT NULL, name text NOT NULL, time timestamptz NOT NULL, c double precision NOT NULL, PRIMARY KEY (id) ); CALL SET_TABLE_PROPERTY('my_table', 'orientation', 'column'); COMMIT;
示例建一张行存表:
BEGIN; CREATE TABLE my_table ( id bigint NOT NULL, name text NOT NULL, time timestamptz NOT NULL, c double precision NOT NULL, PRIMARY KEY (id) ); CALL SET_TABLE_PROPERTY('my_table', 'orientation', 'row'); COMMIT;
4.设置表属性
1)生命周期
表的生命周期是指,从最后一次更新数据时间开始算起,经过指定时间还未变动,则这张表会被自动回收。
BEGIN; CREATE TABLE my_table ( id bigint NOT NULL, name text NOT NULL, time timestamptz NOT NULL, c double precision NOT NULL, PRIMARY KEY (id) ); CALL SET_TABLE_PROPERTY('my_table', 'orientation', 'column'); CALL SET_TABLE_PROPERTY('my_table', 'time_to_live_in_seconds', '36000'); COMMIT;
2)索引
构建索引是为了加快查询表,在交互式分析中,可以构建的索引有以下几种
- 聚簇索引clustering key
聚集索引实际是排序索引,索引的的类型和列的顺序关系严格相关。聚簇索引能够加速用户在索引列上的range和filter查询,聚集索引有助于加速一定会带某个列做为where条件的查询。
BEGIN; CREATE TABLE my_table ( id bigint NOT NULL, name text NOT NULL, time timestamptz NOT NULL, c double precision NOT NULL, PRIMARY KEY (id) ); CALL SET_TABLE_PROPERTY('my_table', 'orientation', 'column'); CALL SET_TABLE_PROPERTY('my_table', 'clustering_key', 'id'); CALL SET_TABLE_PROPERTY('my_table', 'time_to_live_in_seconds', '36000'); COMMIT;
- 字典编码dictionary encoding columns
字典编码列,指定列的值构建字典映射。字典编码可以将字符串的比较转成数字的比较,加速group by、filter等查询。默认所有text列都会被隐式地设置到 dictionary_encoding_columns 中。
BEGIN; CREATE TABLE my_table ( id bigint NOT NULL, name text NOT NULL, time timestamptz NOT NULL, c double precision NOT NULL, PRIMARY KEY (id) ); CALL SET_TABLE_PROPERTY('my_table', 'orientation', 'column'); CALL SET_TABLE_PROPERTY('my_table', 'clustering_key', 'id'); CALL SET_TABLE_PROPERTY('my_table', 'dictionary_encoding_columns', 'name'); CALL SET_TABLE_PROPERTY('my_table', 'time_to_live_in_seconds', '36000'); COMMIT;
- 位列图bitmap columns
位图索引在这些列上构建比特编码。bitmap可以对segment内部的数据进行快速过滤,所以建议把where条件的等值查询列建成比特编码。默认所有text列都会被隐式地设置到bitmap_columns中。
BEGIN; CREATE TABLE my_table ( id bigint NOT NULL, name text NOT NULL, time timestamptz NOT NULL, c double precision NOT NULL, PRIMARY KEY (id) ); CALL SET_TABLE_PROPERTY('my_table', 'orientation', 'column'); CALL SET_TABLE_PROPERTY('my_table', 'clustering_key', 'id'); CALL SET_TABLE_PROPERTY('my_table', 'bitmap_columns', 'name'); CALL SET_TABLE_PROPERTY('my_table', 'dictionary_encoding_columns', 'name'); CALL SET_TABLE_PROPERTY('my_table', 'time_to_live_in_seconds', '36000'); COMMIT;
更多关于索引的使用,大家可以参见交互式分析文档设置表属性。
学习了这么多内容,相信大家还是会有点疑惑,比如,交互式分析是兼容Postgresql的,但是有些朋友可能对pg的部分语法不是特别熟悉,尤其是构建索引这一部分,call_set怎么用到极致还有点困惑,那在这样的情况下,我怎么才能高效的建表呢?
别担心,交互式分析的神器--HoloStudio来了(关于HoloStudio的介绍,可以参见《交互式分析六脉神剑》之Dataworks-HoloStudio初体验),使用HoloStudio的UI建表,不需要输入代码,只需动动小手点一点,就能建好一张表哦。不信,看下图:
有了UI建表,点点就能快速建表,并构建索引,大大节约时间,也节约语法学习成本,还能在下方编辑框中立即生成建表SQL语言,方便对照以及学习,再也不用担心编程不及别人啦!还在等什么,赶紧开通交互式分析用起来吧。
点击进入交互式分析官网
建好表之后,我们怎么样高效给表导数据呢?有了表数据,怎么样快速查询呢,或者怎么样提高查询性能呢?敬请期待下期内容吧!
若您在使用过程中,有任何问题,或者对交互式分析感兴趣,欢迎进钉钉群咨询哦!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
企业级自动化运维工具方案设计
1.企业运维现状与发展趋势 随着企业信息化的不断发展,运维人员需要面对越来越复杂的业务和越来越多样化的用户需求,不断扩展的应用需要越来越合理的模式来保障运维服务能灵活便捷、安全稳定地持续。某企业从初期的几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求,那么标准化、自动化、架构优化、过程优化等降低运维服务成本的因素越来越被人们所重视。其中,自动化开始代替人工操作在企业的运维过程中逐渐体现出来了强大的优势。 运维随着企业业务的发展,自动化作为其重要属性之一已经不仅仅只是代替人工操作,更重要的是深层探知和全局分析,关注的是在当前条件下如何实现性能与服务最优化,同时保障投资收益最大化。通过自动化运维能最大限度地在更少的维修时间内实现运维目标,提高运维服务质量。因此, 对于越来越复杂的运维来说,将人工操作逐渐改变为自动化管理是一个重要发展趋势。 2.企业运维存在的问题与需求 某企业初期只有文件共享和邮件服务等几台服务器,运维工作完全由人工操作,随着企业的发展,新业务系统不断上线企业建设了中心机房,运维工作还是以人工为主,但是这一阶段增加了网络管理系统和环境监控系...
- 下一篇
基于云服务器部署nginx开发环境(搭建Web系统/博客网站)
大家好,今天为大讲解如何搭建自己的和通数据库服务环境,也是笔者踩坑一天所获,希望对大家有所帮助。无论是搭建个人博客空间也好,小程序也罢,搭建环境必需的两点:云服务器、域名,下面一步步给搭建演示如果在一台和通数据库服务器上搭建小程序服务端环境。 1、云服务器准备:在和通数据库购买ECS服务器 (购买和通数据库产品,记得先领取代金券礼包,希望对你有所帮助。) 系统镜像选择CentOS 目前用的比较多的免费Linux系统,和ubuntu基本一样,首次购买可享受比较大的优惠,可以根据自己需要购买,笔者使用的是centos 7.4系统 2、域名准备: 可到万网官网注册域名 用户可以在和通数据库的域名服务中购买所需的域名,一般的域名价格在30-100左右,有了域名,我们就可以搭建自己的博客或微信小程序了。 两个条件准备好以后我们下面开始搭建所需的服务器环境. 3、设置用户名及密码,ssh免密登录 在购买和通数据库ECS服务器后,默认用户是root用户,用户可自行设置密码。随后用户也可在下图管理页面中修改密码。 更新yum源:获取最新的源 yum update 安装sshd:ssh远程登录 yum ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程