如何簡單、高效的進行留存和漏斗分析
Databend 是一個使用 Rust 研發(fā)、開源的、完全面向云架構(gòu)的新式數(shù)倉,致力于提供極速的彈性擴展能力,打造按需、按量的 Data Cloud 產(chǎn)品體驗。
開源地址:https://github.com/datafuselabs/databend

前言
隨著移動互聯(lián)網(wǎng)的發(fā)展,我們時刻都在生產(chǎn)著數(shù)據(jù)。
如果你做了一款 APP,3 月份新增用戶 1000 人,你是不是想了解在未來的某些時間段內(nèi),這部分用戶里有多少人持續(xù)使用了你的 APP?
如果你在經(jīng)營一個電商,你可能更加關(guān)注用戶在,
,
,
流程里每個環(huán)節(jié)的轉(zhuǎn)化率,了解用戶行為軌跡變化,以精準優(yōu)化產(chǎn)品設(shè)計。比如,如果 Andorid 用戶在?
?到?
這個環(huán)節(jié)轉(zhuǎn)化率明顯低于其他客戶端,說明 Andorid 客戶端在?
?這個環(huán)節(jié)上存在一些問題。
這就是我們經(jīng)常說的用戶留存和漏斗轉(zhuǎn)化率分析。
大部分數(shù)倉要滿足這兩個需求,基本都要寫一堆 SQL 來進行復(fù)雜表達,且性能低下,因為這兩個分析會重度依賴 GROUP BY,百萬級數(shù)據(jù)可能就會在分鐘級。
本篇就來聊聊 Databend 如何做到簡潔、高效的滿足這兩個需求,使用一個簡單的 SQL, 在千萬級的數(shù)據(jù)集上也可以輕松搞定。
留存分析
數(shù)據(jù)表
CREATE TABLE events(`user_id` INT, `visit_date` DATE);
?- 用戶 ID
?- 用戶訪問日期
構(gòu)造數(shù)據(jù)集
構(gòu)造用戶訪問記錄。
# user_id 從 0 到 10000000 在 2022-05-15 訪問數(shù)據(jù)
INSERT INTO events SELECT number AS user_id, '2022-05-15' FROM numbers(10000000);
# user_id 從 0 到 5000000 在 2022-05-16 訪問數(shù)據(jù)
INSERT INTO events SELECT number AS user_id, '2022-05-16' FROM numbers(5000000);
# user_id 從 0 到 100000 在 2022-05-17 訪問數(shù)據(jù)
INSERT INTO events SELECT number As user_id, '2022-05-17' FROM numbers(100000);
留存分析
SELECT
? ?sum(r[0]) AS r1,
? ?sum(r[1]) AS r2,
? ?sum(r[2]) AS r3
FROM
(
? ?SELECT
? ? ? ?user_id,
? ? ? ?retention(login_date = '2022-05-15', login_date = '2022-05-16', login_date = '2022-05-17') AS r
? ?FROM events
? ?GROUP BY user_id
);
這里使用?Databend retention?函數(shù)輕松搞定:
+----------+---------+--------+
| r1 ? ? ? | r2 ? ? ?| r3 ? ? |
+----------+---------+--------+
| 10000000 | 5000000 | 100000 |
+----------+---------+--------+
?有?
?人訪問
?有?
?個用戶持續(xù)訪問,用戶留存率?
?=?
?有
個用戶持續(xù)訪問,用戶留存率?
?=?
漏斗分析
數(shù)據(jù)表
CREATE TABLE events(user_id BIGINT, event_name VARCHAR, event_timestamp TIMESTAMP);
?- 用戶 ID
?- 事件類型:
,?
?,
?,
?- 事件時間(Databend TIMESTAMP?類型精度是小數(shù)點后 6 位, 微秒(microsecond))
構(gòu)造數(shù)據(jù)集
# 用戶 100123 事件
INSERT INTO events VALUES(100123, '登錄', '2022-05-14 10:01:00');
INSERT INTO events VALUES(100123, '訪問', '2022-05-14 10:02:00');
INSERT INTO events VALUES(100123, '下單', '2022-05-14 10:04:00');
INSERT INTO events VALUES(100123, '付款', '2022-05-14 10:10:00');
# 用戶 100125 事件
INSERT INTO events VALUES(100125, '登錄', '2022-05-15 11:00:00');
INSERT INTO events VALUES(100125, '訪問', '2022-05-15 11:01:00');
INSERT INTO events VALUES(100125, '下單', '2022-05-15 11:02:00');
# 用戶 100126 事件
INSERT INTO events VALUES(100126, '登錄', '2022-05-15 12:00:00');
INSERT INTO events VALUES(100126, '訪問', '2022-05-15 12:01:00');
# 用戶 100127 事件
INSERT INTO events VALUES(100127, '登錄', '2022-05-15 11:30:00');
INSERT INTO events VALUES(100127, '訪問', '2022-05-15 11:31:00');
漏斗分析
SELECT
? ?level,
? ?count() AS count
FROM
(
? ?SELECT
? ? ? ?user_id,
? ? ? ?window_funnel(3600000000)(event_timestamp, event_name = '登錄', event_name = '訪問', event_name = '下單', event_name = '付款') AS level
? ?FROM events
? ?GROUP BY user_id
)
GROUP BY level ORDER BY level ASC;
+-------+-------+
| level | count |
+-------+-------+
| ? ? 2 | ? ? 2 |
| ? ? 3 | ? ? 1 |
| ? ? 4 | ? ? 1 |
+-------+-------+
這里使用?Databend window_funnel?函數(shù)對用戶在 1 小時窗口內(nèi),進行事件鏈下鉆分析。
一小時內(nèi):有多少用戶登錄(level-1) –> 有多少用戶訪問(level-2) –> 有多少用戶下單(level-3) –> 有多少用戶付款(level-4)
從結(jié)果來看:
?這條事件鏈上總共有 2 個用戶,
?和?
?這條事件鏈上有 1 位用戶,
?這條事件鏈上總共有 1 位用戶,
這樣我們就可以輕松計算出每個階段的轉(zhuǎn)化率。
性能
從上面示例可以看出,留存和漏斗分析都重度依賴?,如果?
?較多,對?
?計算速度有比較高的要求,Databend 在?
上做了大量的優(yōu)化,目前性能已經(jīng)非常強悍,具體機制可以參考這篇文章?Databend 的 Group By 聚合查詢?yōu)槭裁磁艿倪@么快?
總結(jié)
Databend 留存(RETENTION)函數(shù)和漏斗分析(WINDOW_FUNNEL)函數(shù)去年已經(jīng)實現(xiàn),把復(fù)雜的邏輯進行封裝,讓用戶使用起來更加方便。
Databend 作為一個新一代云數(shù)倉,在設(shè)計上做了一個很大的轉(zhuǎn)變:數(shù)據(jù)不再是重心,用戶的體驗才是。
對于一個數(shù)倉產(chǎn)品,相信大部分用戶都希望:
不再為存儲空間發(fā)愁
不再為計算資源發(fā)愁
開箱即用,真正的按需、按量付費
隨著云基礎(chǔ)設(shè)施的發(fā)展,我們在 Databend Platform 里讓這一切都變成了可能。
基于開源?Databend?內(nèi)核、AWS EC2 計算資源、S3 的對象存儲,加上自研的 Serverless Infrastructure,Databend 團隊即將推出他們的第一個企業(yè)級產(chǎn)品:Databend Platform。
來,讓我們一起看看在 Databend Platform 里如何做漏斗分析:
選擇 Worksheet
選擇休眠的 Warehouse
執(zhí)行漏斗分析 SQL,自動喚醒 Warehouse
Warehouse 自動休眠
就是這么簡單

關(guān)于 Databend
Databend 是一款開源、彈性、低成本,基于對象存儲也可以做實時分析的新式數(shù)倉。期待您的關(guān)注,一起探索云原生數(shù)倉解決方案,打造新一代開源 Data Cloud。
Databend 文檔:https://databend.rs/
Twitter:https://Twitter.com/Datafuse_Labs
Slack:https://datafusecloud.slack.com/
Wechat:Databend
GitHub :https://github.com/datafuselabs/databend
