這篇已經(jīng)是本系列文章的第五篇了,
簡(jiǎn)書(shū)
/小紅書(shū)
/CSDN
還不快來(lái)感謝大豬秃嗜,上一篇大豬已經(jīng)介紹 PV/UV 的實(shí)現(xiàn)方式以及程序的計(jì)算邏輯权均,本篇大豬繼續(xù)為小伙伴介紹 留存顿膨,看在Spark+Hbase 的架構(gòu)中到底是怎么實(shí)現(xiàn)這種指標(biāo)的。
大豬的習(xí)慣就是能上圖就盡量不~~~叽赊,好的圖是會(huì)說(shuō)話的恋沃,大豬也在努力實(shí)現(xiàn)中。
詳細(xì)分析過(guò)程
大豬25通過(guò)某篇文章注冊(cè)了簡(jiǎn)書(shū)帳號(hào)必指,26去浪去了囊咏。
27再次登錄簡(jiǎn)書(shū),小伙伴猜猜是哪天的幾日留存取劫?
這么簡(jiǎn)單的問(wèn)題匆笤,我們的小伙伴肯定能答得上來(lái)。
答案就是:25號(hào)的2日留存
捌仔啊炮捧?大豬我怎么答得不對(duì)呀
莫慌,大家看看當(dāng)前的時(shí)間是28號(hào)惦银,Spark+Hbase 計(jì)算的是03-27的數(shù)據(jù)咆课,因?yàn)樵?7號(hào)這天只有大豬一個(gè)人訪問(wèn),所以數(shù)據(jù)只能+1扯俱,再看下張圖书蚪。
- 21號(hào)有一頭大豬的粉絲大紅豬通過(guò) PV/UV 文章注冊(cè)簡(jiǎn)書(shū)帳號(hào),咳咳...
- 25號(hào)還一頭大豬的粉絲大黃豬通過(guò) 小巧高性能的ETL 文章在簡(jiǎn)書(shū)上注冊(cè)了
- 然后這兩頭大胖豬03-28號(hào)這天都來(lái)了
- 再算算是哪天幾日留存
大豬這次我看懂迅栅,是21號(hào)的7日留存跟25號(hào)的3日留存
我就說(shuō)小伙伴是聰明的殊校,這還是比較容易理解的。
接下來(lái)读存,我們看看如何將留存轉(zhuǎn)成算法去實(shí)現(xiàn)为流,我們會(huì)盡量設(shè)計(jì)成SQL形式去實(shí)現(xiàn)。
大豬已經(jīng)把留存表給設(shè)計(jì)好了让簿,想必小伙伴跟大豬的設(shè)計(jì)也是一樣的敬察,畢竟都是志同道合的小伙伴。
到這里我們就需要一張用戶表了尔当,需要記錄用戶的注冊(cè)時(shí)間等信息莲祸,后面的很多指標(biāo)也會(huì)使用到,Hbase的用戶創(chuàng)表語(yǔ)句如下:
Spark 計(jì)算注冊(cè)用戶并寫(xiě)入用戶表的指標(biāo)計(jì)算需要放在所有指標(biāo)的前面
算法如下椭迎,有點(diǎn)黃黃的框框是批量寫(xiě)入锐帜。
我們接下來(lái)看Come具體的指標(biāo)計(jì)算是如何計(jì)算的
由于涉及到了用戶表,其實(shí)就是在UV去重的基礎(chǔ)上添加用戶注冊(cè)時(shí)間這個(gè)字段:
大豬這就一一講這三個(gè)框的意思畜号,第一個(gè)框在上一篇的 PV/UV 的指標(biāo)已經(jīng)講解過(guò)了缴阎,就是標(biāo)記用戶的。
第二個(gè)框弄兜,跟第一個(gè)框邏輯差不多药蜻,就是批量去查用戶注冊(cè)時(shí)間的。
第三個(gè)框替饿,就是把第一個(gè)框跟第二框的數(shù)據(jù)合并在一起语泽,把注冊(cè)時(shí)間合并進(jìn)去,這樣每條數(shù)據(jù)都有注冊(cè)時(shí)間视卢,下面就可以用SQL來(lái)計(jì)算留存了踱卵。
PS:糾正(dt.date
為 dt.regTime as date
)
眼尖的小伙伴一看就看到了留存的核心算法了吧,就是圈黃色框框的地方据过。
怎么那么多函數(shù)惋砂?又有SUM、IF绳锅、date_add西饵,這樣的技巧小伙伴們要記住,因?yàn)樵谝院蟮闹笜?biāo)計(jì)算當(dāng)中會(huì)經(jīng)常使用到鳞芙。
大豬來(lái)解釋一下它們的含義:date_add函數(shù)就是日期+N天眷柔,IF就簡(jiǎn)單啦,判斷剛好滿足對(duì)應(yīng)的留存日期就將那條數(shù)據(jù)SUM到對(duì)應(yīng)的come留存日期中原朝。
留存率計(jì)算
select aid,sum(come1)/sum(register) from come_report where time = '2019-01-01' group by aid
為什么要這么寫(xiě)驯嘱?因?yàn)檫@樣Spark就可以使用一個(gè)job計(jì)算完所有留存指標(biāo),小伙伴們需要細(xì)細(xì)品嘗一下才有感覺(jué)喳坠,如果不這么寫(xiě)鞠评,小伙伴們覺(jué)得怎么寫(xiě)?
反正 大豬 以前是一個(gè)留存寫(xiě)一個(gè)SQL壕鹉,是不是很有問(wèn)題剃幌?
下篇文章我們繼續(xù)介紹其它有意思指標(biāo)的算法。
本次源碼傳送門(mén) => 留存計(jì)算源碼
心明眼亮的你御板、從此刻開(kāi)始锥忿。