histogram
values — 生成输入值的 表达式。
参数设置
number_of_bins — 直方图中 bin 数量的上限。函数会自动计算 bin 的数量。它会尽量达到指定的 bin 数量;如果无法达到,则会使用更少的 bin。
返回值
示例
sequenceMatch
在同一秒发生的事件在序列中的先后顺序可能不确定,这会影响结果。
-
timestamp— 视为包含时间数据的列。典型数据类型为Date和DateTime。你也可以使用任何受支持的 UInt 数据类型。 -
cond1,cond2— 描述事件链的条件。数据类型:UInt8。最多可传入 32 个条件参数。函数只会考虑这些条件所描述的事件。如果序列中包含未在任何条件中描述的数据,函数会跳过它们。
pattern— 模式字符串。请参见模式语法。
- 1,表示模式匹配。
- 0,表示模式不匹配。
UInt8。
模式语法
-
(?N)— 匹配位置N处的条件参数。条件的编号范围为[1, 32]。例如,(?1)匹配传递给cond1参数的值。 -
.*— 匹配任意数量的事件。匹配模式中的这一元素时,无需提供条件参数。 -
(?t operator value)— 设置两个事件之间应间隔的时间 (以秒为单位) 。例如,模式(?1)(?t>1800)(?2)匹配彼此相隔超过 1800 秒的事件。这两个事件之间可以穿插任意数量的其他事件。你可以使用>=、>、<、<=、==运算符。
t 表中有如下数据:
sequenceCount
在同一秒内发生的事件在序列中的顺序可能是未定义的,这会影响结果。
-
timestamp— 视为包含时间数据的列。典型的数据类型有Date和DateTime。你也可以使用任何受支持的 UInt 数据类型。 -
cond1,cond2— 用于描述事件链的条件。数据类型:UInt8。最多可以传入 32 个条件参数。函数只会考虑这些条件中描述的事件。如果序列中包含未被任何条件描述的数据,函数会跳过这些数据。
pattern— 模式字符串。请参见 模式语法。
- 匹配到的非重叠事件链数量。
UInt64。
示例
假设 t 表中的数据如下:
sequenceMatchEvents
在同一秒内发生的事件,在序列中的先后顺序可能不确定,从而影响结果。
-
timestamp— 视为包含时间数据的列。典型的数据类型包括Date和DateTime。您也可以使用任意受支持的 UInt 数据类型。 -
cond1,cond2— 用于描述事件链的条件。数据类型:UInt8。最多可传入 32 个条件参数。函数只会考虑这些条件中描述的事件。如果序列中包含未在任何条件中描述的数据,函数会跳过这些数据。
pattern— 模式字符串。请参见 模式语法。
- 事件链中与条件参数 (?N) 匹配的时间戳数组。数组中的位置与 模式 中条件参数的位置对应。
t 表中的数据如下:
windowFunnel
- 函数会搜索满足事件链中第一个条件的数据,并将事件计数器设为 1。此时滑动窗口开始计时。
- 如果事件链中的事件在窗口内按顺序发生,则计数器会递增;如果事件顺序被打断,则计数器不会递增。
- 如果数据中存在多个完成程度不同的事件链,函数只会输出最长事件链的长度。
timestamp— 包含时间戳的列名。支持的数据类型:Date、DateTime 以及其他无符号整数类型 (注意,虽然timestamp支持UInt64类型,但其值不能超过 Int64 的最大值,即 2^63 - 1) 。cond— 描述事件链的条件或数据。UInt8。
window— 滑动窗口的长度,即第一个条件与最后一个条件之间的时间间隔。window的单位取决于timestamp本身,可能有所不同。其判定依据为表达式timestamp of cond1 <= timestamp of cond2 <= ... <= timestamp of condN <= timestamp of cond1 + window。mode— 可选参数。可以设置一个或多个模式。'strict_deduplication'— 如果同一条件在事件序列中重复成立,则该重复事件会中断后续处理。注意:如果同一事件同时满足多个条件,结果可能不符合预期。'strict_order'— 不允许插入其他事件。例如,在A->B->D->C这种情况下,会在D处停止查找A->B->C,最大事件级别为 2。'strict_increase'— 仅对时间戳严格递增的事件应用条件。'strict_once'— 在事件链中,每个事件只计数一次,即使它多次满足条件也是如此。'allow_reentry'— 忽略违反严格顺序的事件。例如,在 A->A->B->C 这种情况下,会通过忽略多余的 A 找到 A->B->C,最大事件级别为 3。
Integer。
Example
判断给定时间段是否足以让用户在网店中挑选一部手机并购买两次。
设置以下事件链:
- 用户登录其网店账户 (
eventID = 1003) 。 - 用户搜索手机 (
eventID = 1007, product = 'phone') 。 - 用户下单 (
eventID = 1009) 。 - 用户再次下单 (
eventID = 1010) 。
user_id 在 2019 年 1 月至 2 月期间,在该事件链中最多能进行到哪一步。
Query
Response
allow_reentry 模式如何与用户重入模式一起使用:
retention
UInt8,用于指示某个事件是否满足某一条件。
任何条件都可以作为参数指定 (如 WHERE 中所示) 。
除第一个条件外,其余条件均与第一个条件成对应用:如果第一个和第二个条件都为真,则第二个结果为真;如果第一个和第三个条件都为真,则第三个结果为真;以此类推。
语法
cond— 返回UInt8结果 (1 或 0) 的表达式。
- 1 — 事件满足条件。
- 0 — 事件不满足条件。
UInt8。
示例
下面以一个计算 retention 函数来确定网站流量的示例进行说明。
1. 创建一个表作为示例。
Query
Query
Response
retention 函数按唯一 ID uid 对用户分组。
Query
Response
Query
Response
r1- 在 2020-01-01 访问网站的独立访客数量 (cond1条件) 。r2- 在 2020-01-01 至 2020-01-02 之间某个特定时间段内访问网站的独立访客数量 (cond1和cond2条件) 。r3- 在 2020-01-01 和 2020-01-03 的某个特定时间段内访问网站的独立访客数量 (cond1和cond3条件) 。
uniqUpTo(N)(x)
N。如果参数的不同值个数大于 N,此函数返回 N + 1;否则返回精确值。
建议在 N 较小时使用,最多到 10。N 的最大值为 100。
对于聚合函数的状态,此函数占用的内存量等于 1 + N * 单个值的字节大小。
处理字符串时,此函数会存储一个 8 字节的非加密哈希;对于字符串,计算结果为近似值。
例如,假设你有一个表,用于记录网站用户发出的每一次搜索查询。表中的每一行表示一次搜索查询,列包括用户 ID、搜索查询以及该查询的时间戳。你可以使用 uniqUpTo 生成一份报告,只显示至少有 5 个不同用户搜索过的关键词。
uniqUpTo(4)(UserID) 会为每个 SearchPhrase 计算唯一 UserID 值的数量,但最多只统计 4 个不同值。如果某个 SearchPhrase 的唯一 UserID 值超过 4 个,该函数会返回 5 (4 + 1) 。随后,HAVING 子句会过滤掉唯一 UserID 值数量少于 5 的 SearchPhrase 值。这样,你就会得到一个至少被 5 个不同用户使用过的搜索关键词列表。
sumMapFiltered
sumMapFiltered(keys_to_keep)(keys, values)
参数
返回值
- 返回一个由两个数组组成的元组:按排序顺序排列的键,以及对应键汇总后的值。
Query
Query
Response
sumMapFilteredWithOverflow
sumMapFilteredWithOverflow(keys_to_keep)(keys, values)
参数
返回值
- 返回一个包含两个数组的元组:按顺序排序的键,以及对应键求和后的值。
sum_map 表,向其中 insert 一些数据,然后使用 sumMapFilteredWithOverflow、sumMapFiltered 和 toTypeName 函数来比较结果。在创建的表中,requests 的类型为 UInt8,sumMapFiltered 会将求和值的类型提升为 UInt64 以避免溢出,而 sumMapFilteredWithOverflow 则保持为 UInt8,该类型不足以存储结果——也就是说,发生了溢出。
Query
Query
Query
Response
Response
sequenceNextNode
SET allow_experimental_funnel_functions = 1 以启用该函数。
语法
-
direction— 用于指定方向。- forward — 向前。
- backward — 向后。
-
base— 用于设置基准点。- head — 将基准点设为第一个事件。
- tail — 将基准点设为最后一个事件。
- first_match — 将基准点设为第一个匹配的
event1。 - last_match — 将基准点设为最后一个匹配的
event1。
timestamp— 包含时间戳的列名。支持的数据类型:Date、DateTime 以及其他无符号整数类型。event_column— 包含要返回的下一个事件值的列名。支持的数据类型:String 和 Nullable(String)。base_condition— 基准点必须满足的条件。event1,event2, … — 描述事件链的条件。UInt8。
event_column[next_index]— 如果模式匹配且下一个值存在。NULL- 如果模式未匹配,或下一个值不存在。
Query
Response
forward 和 head 的行为
backward 和 tail 的行为
forward 和 first_match 的行为
backward 和 last_match 的行为
base_condition 的行为