今天来聊聊怎么高效建表

简介: 在我们建表时,通常会给表附带属性,比如存储形式、生命周期TTL等,同时也会构建一些索引,以便查询的时候能够更加高效的得出查询结果。但是,不同的产品使用的编程语言又不一样,建表的语法可能也会有些差别,那今天小编就来为大家讲讲,怎么样在交互式分析中高效建表,(偷偷告诉你,看了这个文章,你的建表速度也会更...

建表“高效”,是指建表的速度快吗?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建表,不需要输入代码,只需动动小手点一点,就能建好一张表哦。不信,看下图:
image.png

image.png

有了UI建表,点点就能快速建表,并构建索引,大大节约时间,也节约语法学习成本,还能在下方编辑框中立即生成建表SQL语言,方便对照以及学习,再也不用担心编程不及别人啦!还在等什么,赶紧开通交互式分析用起来吧。
点击进入交互式分析官网
建好表之后,我们怎么样高效给表导数据呢?有了表数据,怎么样快速查询呢,或者怎么样提高查询性能呢?敬请期待下期内容吧!

image.png
若您在使用过程中,有任何问题,或者对交互式分析感兴趣,欢迎进钉钉群咨询哦!
image.png

相关文章
|
1月前
|
存储 程序员 数据库
数据库建表原则
数据库建表原则
21 0
|
1月前
|
SQL 存储 关系型数据库
轻松入门MySQL:数据库关联与多表查询,构建高效的业务决策引擎(6)
轻松入门MySQL:数据库关联与多表查询,构建高效的业务决策引擎(6)
|
4月前
|
缓存 数据库 开发者
构建高性能的数据库查询语句优化策略
数据库查询是开发过程中常见的性能瓶颈之一。本文将介绍构建高性能数据库查询语句的优化策略,包括索引的设计与使用、查询语句的编写技巧、连接的优化等方面,帮助开发者提升数据库查询的效率和响应速度。
|
10月前
|
数据库 UED 索引
索引创建原则:提升数据库性能与查询效率的关键
在现代软件系统中,数据库是一个关键的组成部分,而索引作为提高数据库性能和查询效率的重要手段之一,其设计和创建的合理性直接影响着整个系统的稳定性和响应速度。本文将介绍索引的基本概念和原则,并详细探讨索引创建的几个关键原则,帮助读者了解如何为数据库中的表创建最优的索引,以提升系统性能。
103 0
|
9月前
|
数据库
建表与数据准备
自己新建数据库:
17 0
|
11月前
|
存储 缓存 关系型数据库
高性能 MySQL(五):设计表结构时,如何选择数据类型会更高效?
MySQL 支持的数据类型有很多,在设计表结构时,选择正确的数据类型可以获得更高的性能。如果你还不知道如何选择,那么希望这篇文章能帮到你。
161 0
高性能 MySQL(五):设计表结构时,如何选择数据类型会更高效?
|
SQL 存储 关系型数据库
Mysql数据库基础第四章DDL(数据定义语言):库表的管理、数据类型与约束条件
# 1.DDL语言基本概述 DDL:数据定义语言 主要包括以下几部分内容: - 库的管理 - 表的管理 - 数据类型 - 约束 下面我们先介绍库的管理
|
SQL 关系型数据库 MySQL
索引单表优化案例|学习笔记
快速学习索引单表优化案例
99 0
|
存储 SQL JSON
数据库中动态列的几种设计思路
本文介绍数据库中动态列的几种设计思路
671 0