RETENTION
更新时间:2025-10-16
描述
留存函数将一组条件作为参数,类型为 1 到 32 个UInt8
类型的参数,用来表示事件是否满足特定条件。任何条件都可以指定为参数。
除了第一个以外,条件成对适用:如果第一个和第二个是真的,第二个结果将是真的,如果第一个和第三个是真的,第三个结果将是真的,等等。
简单来讲,返回值数组第 1 位表示event_1
的真假,第二位表示event_1
真假与event_2
真假相与,第三位表示event_1
真假与event_3
真假相与,等等。如果event_1
为假,则返回全是 0 的数组。
语法
SQL
1RETENTION(<event_1> [, <event_2>, ... , <event_n>]);
参数
参数 | 说明 |
---|---|
<event_n> |
第n 个事件条件,类型为UInt8 ,取值为 1 或 0 |
返回值
由 1 和 0 组成的最大长度为 32 位的数组,最终输出数组的长度与输入参数长度相同。
- 1: 条件满足。
- 0: 条件不满足。
举例
SQL
1-- 创建示例表
2CREATE TABLE retention_test(
3 `uid` int COMMENT 'user id',
4 `date` datetime COMMENT 'date time'
5) DUPLICATE KEY(uid)
6DISTRIBUTED BY HASH(uid) BUCKETS AUTO
7PROPERTIES (
8 "replication_allocation" = "tag.location.default: 1"
9);
10
11-- 插入示例数据
12INSERT into retention_test values
13(0, '2022-10-12'),
14(0, '2022-10-13'),
15(0, '2022-10-14'),
16(1, '2022-10-12'),
17(1, '2022-10-13'),
18(2, '2022-10-12');
19
20-- 计算用户留存
21SELECT
22 uid,
23 RETENTION(date = '2022-10-12') AS r,
24 RETENTION(date = '2022-10-12', date = '2022-10-13') AS r2,
25 RETENTION(date = '2022-10-12', date = '2022-10-13', date = '2022-10-14') AS r3
26FROM retention_test
27GROUP BY uid
28ORDER BY uid ASC;
Text
1+------+------+--------+-----------+
2| uid | r | r2 | r3 |
3+------+------+--------+-----------+
4| 0 | [1] | [1, 1] | [1, 1, 1] |
5| 1 | [1] | [1, 1] | [1, 1, 0] |
6| 2 | [1] | [1, 0] | [1, 0, 0] |
7+------+------+--------+-----------+