百万量级数据不要怕,一招教你精准锁定

今日头条

1153人已加入

描述

在做数据分析时你有没有遇到这些问题:

数据量大,怎么也找不到特定日期的文件

老板要看某年某月的销售数据,你要从百万量级数据中一条条寻找

……

要是使用永洪BI,会不会有一种方法,让我们在百万量级的数据中,一眼锁定要找的那一条?有的,那便是文件过滤

首先,我们来说一下什么是meta,什么是文件过滤。

01 什么是meta

meta是集市文件上打的标签,可以大致理解为这个集市文件的属性。

比如,某个集市数据,我们是按天入的,每天生成的集市文件是前一天的数据,给这个集市文件添加了一个属性(属性名:date,属性值:昨天的日期),这个就叫做meta。

这个举个常见例子,有某个部门的销售数据,每天的销售数据存储在一个excel中,这个excel的文件名上带上这天的日期。集市文件的meta就相当于excel文件的文件名上的日期。

02 什么是文件过滤

先说说文件,这里的“文件”,指的是增量任务生成的集市文件,这个文件是存储在m节点,安装目录/Yonghong/cloud下,也就是存储在m节点磁盘上的。

文件过滤,接着上面excel的比喻讲,大致就是每天的销售数据,存储在一个excel文件中,这个excel的文件名还带上了这天的日期。

要查询某天的销售数据就很快了,根据日期直接定位到要查询的这天,快速准确找到这天的数据,不需要所有的excel数据都打开去查一下。

回到文件过滤也是类似的效果,给每个集市文件打上了meta,meta的值是每个集市文件对应的数据的日期,那么要查询某天,或者某段时间的数据,就可以快速定位并查询,不需要所有的集市文件都查一遍,然后去找到想要的日期的数据。

说到这里是不是有个大概的概念,接下来说说为什么要什么文件过滤。

03 为什么做文件过滤

举个例子,某个部门的销售数据,每天大概有100万左右,一年大概就是3亿+。如果存储在excel中,一个excel文件假设存储的是100万左右,那么1年就有365个excel。

如果不把每天的数据存储在同一个excel,且文件名上标上每天的日期,那么当要查某天,或者某段时间的数据,是不是一个很大的工作量,需要把这365个excel都打开查一遍。

对应到产品的集市中也是一样,一个集市文件最大存储的行数大概100万行,如果这些数据都是按天增量的,且在集市文件生成的时候就给这些文件打上了meta。

meta值是数据对应的日期,那么当查询某一天的数据的时候,就可根据meta的值进行过滤,只查meta值为这天的这一个集市文件,那么计算量就是100万。

再来看一下如果不使用文件过滤,就需要把这365个集市文件都查询一遍,最终再过滤出这一天的数据,计算量是3亿+。

使用文件过滤是为了减少实际计算量,减少计算量后计算需要的时间也可以大幅减少,那么报表打开也就更快了。

下面做个比较,可以看到使用文件过滤与否,查询相同的时间的数据,实际的后台计算量和计算时间的巨大差别。

场景 是否使用文件过滤 计算文件个数 计算数据量 假设一个集市文件(100万)计算时长 计算需要时间
某部门销售数据每天100万,1年365百万,默认查询昨天的数据 1 1百万 100ms 100ms
365 365百万 365000ms=36s
某部门销售数据每天100万,1年365百万,默认查询上个月的数据 30 30百万 100ms 3000ms=3s
365 365百万 365000ms=36s
备注:这里的计算时间是按照m节点的计算能力为1计算,实际情况不止1,但是实际也不会只有一个组件,每个组件都会有这样一个集市查询


前面已经了解了,文件过滤是什么以及为什么要用文件过滤,接下来就是文件过滤怎么用?

文件过滤的使用前提:数据已经通过增量的方式入到集市中,且在入的时候已经按照日期打好meta。

首先来看一下咱们增量且已经打好meta的集市数据。

集市文件夹:咖啡销售数据
下的集市文件
数据对应月份 meta名 meta值
2020年销售数据.6cb2f7790.0.0.zb 2020-01 _Date_Range_ 2020-01
2020年销售数据.6cb2f7790.1.0.zb 2020-02 2020-02
2020年销售数据.6cb2f7790.2.0.zb 2020-03 2020-03
2020年销售数据.6cb2f7790.3.0.zb 2020-04 2020-04
2020年销售数据.6cb2f7790.4.0.zb 2020-05 2020-05
2020年销售数据.6cb2f7790.5.0.zb 2020-06 2020-06
2020年销售数据.6cb2f7790.6.0.zb 2020-07 2020-07
2020年销售数据.6cb2f7790.7.0.zb 2020-08 2020-08
2020年销售数据.6cb2f7790.8.0.zb 2020-09 2020-09
2020年销售数据.6cb2f7790.9.0.zb 2020-10 2020-10
2020年销售数据.6cb2f7790.10.0.zb 2020-11 2020-11
2020年销售数据.6cb2f7790.11.0.zb 2020-12 2020-12
2020年销售数据 是增量的时候设置的文件名
6cb2f7790 是随机码
0.0-11.0 是集市文件编号
.zb 是集市文件后缀


使用步骤:

1、在“创建数据集”模块,新建数据集市数据集,选择增量任务中设置的文件夹名称,就得到一个数据集市数据集。

数据集

2、在数据集市数据集添加文件过滤,比如查询某一天的数据,对应的文件过滤如下:

数据集

3、使用这个数据集市数据集制作报告,并将步骤2中定义的参数coffeeMonth的值,在报告中传递到数据集使用。

注意:参数的数据类型和格式一定要跟meta的数据类型和格式一致,如果不一致需要脚本处理。

数据集

4、保存报告并查看效果,在报告中筛选选择某个月,实际底层查询的集市文件只查询这个月对应,而不是集市文件。

查询效果见下图,底层实际计算情况见截图(查询2020-01月的数据,使用文件过滤和不使用文件过滤的对比)。

数据集

 

数据集

什么时候适合用文件过滤?

集市查询数据量大的时候;查询的时候咱们只查询部分数据,而不是全量数据;希望提升查询性能;能够有用于增量同步的字段,比如日期,或者有经常筛选的字段用于打meta后的文件过滤。

举个例子,一个查询包含的数据量很大,时间跨度比较大(比如有3年的数据),每次查询的范围不是太大(比如每次查询大概3个月的数据,查询范围不定),这种就比较适合用文件过滤,将每次实际计算的计算量从3年缩减到三个月。

真正实现前台筛选多长时间范围,后台计算的就是多长时间的数据,而不是这个查询所有的数据计算完成再来筛选时间范围。

最后总结一下,集市查询,相对直连的情况一般对于报告的查询速度,是有显著的优化的,但是一个查询的总数据量很大的时候,实际查询的并不是全部时间段的情况下,用文件过滤能进一步优化查询性能。

fqj

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分