在做數(shù)據(jù)分析時你有沒有遇到這些問題:
數(shù)據(jù)量大,怎么也找不到特定日期的文件
老板要看某年某月的銷售數(shù)據(jù),你要從百萬量級數(shù)據(jù)中一條條尋找
……
要是使用永洪BI,會不會有一種方法,讓我們在百萬量級的數(shù)據(jù)中,一眼鎖定要找的那一條?有的,那便是文件過濾。
首先,我們來說一下什么是meta,什么是文件過濾。
01 什么是meta
meta是集市文件上打的標(biāo)簽,可以大致理解為這個集市文件的屬性。
比如,某個集市數(shù)據(jù),我們是按天入的,每天生成的集市文件是前一天的數(shù)據(jù),給這個集市文件添加了一個屬性(屬性名:date,屬性值:昨天的日期),這個就叫做meta。
這個舉個常見例子,有某個部門的銷售數(shù)據(jù),每天的銷售數(shù)據(jù)存儲在一個excel中,這個excel的文件名上帶上這天的日期。集市文件的meta就相當(dāng)于excel文件的文件名上的日期。
02 什么是文件過濾
先說說文件,這里的“文件”,指的是增量任務(wù)生成的集市文件,這個文件是存儲在m節(jié)點,安裝目錄/Yonghong/cloud下,也就是存儲在m節(jié)點磁盤上的。
文件過濾,接著上面excel的比喻講,大致就是每天的銷售數(shù)據(jù),存儲在一個excel文件中,這個excel的文件名還帶上了這天的日期。
要查詢某天的銷售數(shù)據(jù)就很快了,根據(jù)日期直接定位到要查詢的這天,快速準(zhǔn)確找到這天的數(shù)據(jù),不需要所有的excel數(shù)據(jù)都打開去查一下。
回到文件過濾也是類似的效果,給每個集市文件打上了meta,meta的值是每個集市文件對應(yīng)的數(shù)據(jù)的日期,那么要查詢某天,或者某段時間的數(shù)據(jù),就可以快速定位并查詢,不需要所有的集市文件都查一遍,然后去找到想要的日期的數(shù)據(jù)。
說到這里是不是有個大概的概念,接下來說說為什么要什么文件過濾。
03 為什么做文件過濾
舉個例子,某個部門的銷售數(shù)據(jù),每天大概有100萬左右,一年大概就是3億+。如果存儲在excel中,一個excel文件假設(shè)存儲的是100萬左右,那么1年就有365個excel。
如果不把每天的數(shù)據(jù)存儲在同一個excel,且文件名上標(biāo)上每天的日期,那么當(dāng)要查某天,或者某段時間的數(shù)據(jù),是不是一個很大的工作量,需要把這365個excel都打開查一遍。
對應(yīng)到產(chǎn)品的集市中也是一樣,一個集市文件最大存儲的行數(shù)大概100萬行,如果這些數(shù)據(jù)都是按天增量的,且在集市文件生成的時候就給這些文件打上了meta。
meta值是數(shù)據(jù)對應(yīng)的日期,那么當(dāng)查詢某一天的數(shù)據(jù)的時候,就可根據(jù)meta的值進(jìn)行過濾,只查meta值為這天的這一個集市文件,那么計算量就是100萬。
再來看一下如果不使用文件過濾,就需要把這365個集市文件都查詢一遍,最終再過濾出這一天的數(shù)據(jù),計算量是3億+。
使用文件過濾是為了減少實際計算量,減少計算量后計算需要的時間也可以大幅減少,那么報表打開也就更快了。
下面做個比較,可以看到使用文件過濾與否,查詢相同的時間的數(shù)據(jù),實際的后臺計算量和計算時間的巨大差別。
場景 | 是否使用文件過濾 | 計算文件個數(shù) | 計算數(shù)據(jù)量 | 假設(shè)一個集市文件(100萬)計算時長 | 計算需要時間 |
某部門銷售數(shù)據(jù)每天100萬,1年365百萬,默認(rèn)查詢昨天的數(shù)據(jù) | 是 | 1 | 1百萬 | 100ms | 100ms |
否 | 365 | 365百萬 | 365000ms=36s | ||
某部門銷售數(shù)據(jù)每天100萬,1年365百萬,默認(rèn)查詢上個月的數(shù)據(jù) | 是 | 30 | 30百萬 | 100ms | 3000ms=3s |
是 | 365 | 365百萬 | 365000ms=36s | ||
備注:這里的計算時間是按照m節(jié)點的計算能力為1計算,實際情況不止1,但是實際也不會只有一個組件,每個組件都會有這樣一個集市查詢 |
前面已經(jīng)了解了,文件過濾是什么以及為什么要用文件過濾,接下來就是文件過濾怎么用?
文件過濾的使用前提:數(shù)據(jù)已經(jīng)通過增量的方式入到集市中,且在入的時候已經(jīng)按照日期打好meta。
首先來看一下咱們增量且已經(jīng)打好meta的集市數(shù)據(jù)。
集市文件夾:咖啡銷售數(shù)據(jù) 下的集市文件 |
數(shù)據(jù)對應(yīng)月份 | meta名 | meta值 |
2020年銷售數(shù)據(jù).6cb2f7790.0.0.zb | 2020-01 | _Date_Range_ | 2020-01 |
2020年銷售數(shù)據(jù).6cb2f7790.1.0.zb | 2020-02 | 2020-02 | |
2020年銷售數(shù)據(jù).6cb2f7790.2.0.zb | 2020-03 | 2020-03 | |
2020年銷售數(shù)據(jù).6cb2f7790.3.0.zb | 2020-04 | 2020-04 | |
2020年銷售數(shù)據(jù).6cb2f7790.4.0.zb | 2020-05 | 2020-05 | |
2020年銷售數(shù)據(jù).6cb2f7790.5.0.zb | 2020-06 | 2020-06 | |
2020年銷售數(shù)據(jù).6cb2f7790.6.0.zb | 2020-07 | 2020-07 | |
2020年銷售數(shù)據(jù).6cb2f7790.7.0.zb | 2020-08 | 2020-08 | |
2020年銷售數(shù)據(jù).6cb2f7790.8.0.zb | 2020-09 | 2020-09 | |
2020年銷售數(shù)據(jù).6cb2f7790.9.0.zb | 2020-10 | 2020-10 | |
2020年銷售數(shù)據(jù).6cb2f7790.10.0.zb | 2020-11 | 2020-11 | |
2020年銷售數(shù)據(jù).6cb2f7790.11.0.zb | 2020-12 | 2020-12 | |
2020年銷售數(shù)據(jù) 是增量的時候設(shè)置的文件名 6cb2f7790 是隨機碼 0.0-11.0 是集市文件編號 .zb 是集市文件后綴 |
使用步驟:
1、在“創(chuàng)建數(shù)據(jù)集”模塊,新建數(shù)據(jù)集市數(shù)據(jù)集,選擇增量任務(wù)中設(shè)置的文件夾名稱,就得到一個數(shù)據(jù)集市數(shù)據(jù)集。
2、在數(shù)據(jù)集市數(shù)據(jù)集添加文件過濾,比如查詢某一天的數(shù)據(jù),對應(yīng)的文件過濾如下:
3、使用這個數(shù)據(jù)集市數(shù)據(jù)集制作報告,并將步驟2中定義的參數(shù)coffeeMonth的值,在報告中傳遞到數(shù)據(jù)集使用。
注意:參數(shù)的數(shù)據(jù)類型和格式一定要跟meta的數(shù)據(jù)類型和格式一致,如果不一致需要腳本處理。
4、保存報告并查看效果,在報告中篩選選擇某個月,實際底層查詢的集市文件只查詢這個月對應(yīng),而不是集市文件。
查詢效果見下圖,底層實際計算情況見截圖(查詢2020-01月的數(shù)據(jù),使用文件過濾和不使用文件過濾的對比)。
?
什么時候適合用文件過濾?
集市查詢數(shù)據(jù)量大的時候;查詢的時候咱們只查詢部分?jǐn)?shù)據(jù),而不是全量數(shù)據(jù);希望提升查詢性能;能夠有用于增量同步的字段,比如日期,或者有經(jīng)常篩選的字段用于打meta后的文件過濾。
舉個例子,一個查詢包含的數(shù)據(jù)量很大,時間跨度比較大(比如有3年的數(shù)據(jù)),每次查詢的范圍不是太大(比如每次查詢大概3個月的數(shù)據(jù),查詢范圍不定),這種就比較適合用文件過濾,將每次實際計算的計算量從3年縮減到三個月。
真正實現(xiàn)前臺篩選多長時間范圍,后臺計算的就是多長時間的數(shù)據(jù),而不是這個查詢所有的數(shù)據(jù)計算完成再來篩選時間范圍。
最后總結(jié)一下,集市查詢,相對直連的情況一般對于報告的查詢速度,是有顯著的優(yōu)化的,但是一個查詢的總數(shù)據(jù)量很大的時候,實際查詢的并不是全部時間段的情況下,用文件過濾能進(jìn)一步優(yōu)化查詢性能。
fqj
評論
查看更多