多维分析后台实践 3:维度排序压缩

【摘要】

用实例、分步骤,实践目标

本期目标,是在完成数据类型转化基础上,实现维度排序压缩,进一步提升计算速度。

实践的步骤:

1、 准备基础宽表:修改上期的代码,完成维度排序压缩存成新组表。

2、 访问基础宽表:上期代码不必修改,直接应用于新组表。

3、 新增数据追加:每日新增业务数据追加,每月重新排序重整。要尽可能不影响访问基础宽表的性能,同时减小每日新增数据所需要的时间。

本期样例宽表不变,依然为 customer 表。从 Oracle 数据库中取出宽表数据的 SQL 语句是 select * from customer。执行结果如下图:

假设当天日期是 2021-01-12,则取出当日新增数据的 SQL 是:

select * from customer where begin_date=to_date('2021-01-12','yyyy-mm-dd')

多维分析计算的目标也不变,用下面 Oracle 的 SQL 语句表示:

select department_id,job_id,to_char(begin_date,'yyyymm') begin_month ,sum(balance) sum,count(customer_id) count

from customer

where department_id in (10,20,50,60,70,80)

and job_id in ('AD_VP','FI_MGR','AC_MGR','SA_MAN','SA_REP')

and begin_date>=to_date('2002-01-01','yyyy-mm-dd')

and begin_date<=to_date('2020-12-31','yyyy-mm-dd')

and flag1='1' and flag8='1'

group by department_id,job_id,to_char(begin_date,'yyyymm')

准备宽表

维度排序压缩:有序列存。列存是指列式存储,集算器新建组表时,默认列存。

有序是指字段值物理有序存储,也就是用维度字段排序后存入组表。用于排序的维度字段顺序非常关键,要将重复度高的维度排在前面。

本例的维度包括:department_id,job_num,employee_id,begin_date,customer_id。其中,部门编号 department_id 总数最少(事实表中只出现 11 个部门),所以重复度最高。其他字段中,job_num,employee_id,begin_date,customer_id 重复度依次降低。

同时,考虑实际应用中,分组字段出现的情况也和重复度基本一致,所以排序的字段顺序可以确定为:department_id,job_num,employee_id,begin_date,customer_id。

我们用数据库来做排序。示例如下:

select department_id,job_id,employee_id,begin_date,customer_id,first_name,last_name,phone_number,job_title,balance,department_name,flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8

from customer order by department_id,job_id,employee_id,begin_date,customer_id。

执行结果如图:

根据以上要求改写 etl.dfx,从数据库中取出排序数据,类型转化后,生成组表文件,存储基础宽表。代码示例如下:

其中:A2 的 SQL 语句增加了排序,A6 的组表指定了排序字段。

其他代码和上期一致。

数据量为一亿,导出组表文件和前几期的组表文件比较如下:

从上表可以看出,完成数据类型优化之后,文件大小减少了14%(0.5GB)。再完成维度排序压缩后,又减少了 20%(0.6GB), 总体减少 31%(1.1GB)。文件变小,能减少磁盘读取数据量,有效提高性能。

访问宽表

访问宽表的 SPL 代码、Java 代码和上期相比没有变化。

Java 代码加上后台计算返回结果总的执行时间,和前期比较如下:

通过上表的对比可以看出,维度排序压缩进一步提高了计算性能。

新增数据

客户表每天都会有新增数据,需要每天定时添加到组表文件中。如果是按日期有序的组表文件,将每天产生的新数据追加到文件的最后即可。但是我们的客户组表是按照部门等字段有序的,如果在结尾直接追加数据,就不是整体有序了。如果每天都将原有数据和新数据一起重新排序,计算的时间会比较长。

我们可以从数据库中读取新数据并按照部门等字段排序,再用 T.append@a() 函数追加,集算器会自动新建一个补文件,每天新数据都有序归并到补文件中,补文件相对较小,有序归并耗时较短。每月只需对客户表文件和补文件重整一次,将补文件有序归并到组表文件中。

采用这个方法,编写 etlAppend.dfx,网格参数如下:

SPL 代码如下:

A1:判断输入日期是否是每月第一天,如果是,就执行 B1 对客户组表进行重整,将新数据形成的补文件有序归并进入客户组表文件。

A2:连接 oracle 数据库。

A3:取出当天数据。

A4:取出 jobs 表数据,用于类型转换。

A5、B5、A6 与上期 etl.dfx 相同。

A7:将今天新增数据有序归并到补文件中。

A8:关闭文件和数据库连接。

etlAppend.dfx 需要每天定时执行。执行的方法是用 ETL 工具或者操作系统定时任务,通过命令行调用集算器脚本。

例如:

C:\Program Files\raqsoft\esProc\bin>esprocx d:\olap\etlAppend.dfx

详细讲解多维分析(OLAP)的实现。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,572评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,071评论 3 414
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,409评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,569评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,360评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,895评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,979评论 3 440
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,123评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,643评论 1 333
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,559评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,742评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,250评论 5 356
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,981评论 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,363评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,622评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,354评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,707评论 2 370

推荐阅读更多精彩内容