histogram
values — 입력 값을 생성하는 표현식입니다.
매개변수
number_of_bins — 히스토그램 구간 수의 상한입니다. 함수가 구간 수를 자동으로 계산합니다. 지정한 구간 수에 맞추려고 시도하지만, 그러지 못하면 더 적은 수의 구간을 사용합니다.
반환 값
예시
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.
예시
정해진 시간 안에 사용자가 온라인 스토어에서 휴대전화를 고르고 두 번 구매할 수 있는지 확인합니다.
다음과 같은 이벤트 체인을 설정합니다.
- 사용자가 스토어 계정에 로그인했습니다(
eventID = 1003). - 사용자가 휴대전화를 검색합니다(
eventID = 1007, product = 'phone'). - 사용자가 주문했습니다(
eventID = 1009). - 사용자가 다시 주문했습니다(
eventID = 1010).
user_id가 이벤트 체인에서 어디까지 도달했는지 확인합니다.
Query
Response
allow_reentry 모드가 사용자 재진입 패턴을 사용할 때 어떻게 작동하는지 보여줍니다:
retention
UInt8 유형의 조건 집합을 인수로 받습니다. 인수는 1개부터 32개까지 지정할 수 있습니다.
(WHERE와 같이) 어떤 조건이든 인수로 지정할 수 있습니다.
첫 번째를 제외한 조건은 쌍으로 적용됩니다. 첫 번째와 두 번째가 모두 true이면 두 번째의 결과는 true가 되고, 첫 번째와 세 번째가 모두 true이면 세 번째의 결과는 true가 되는 식입니다.
구문
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 * 값 1개의 바이트 크기에 해당하는 메모리를 사용합니다.
문자열을 처리할 때 이 함수는 8바이트 비암호화 해시를 저장하므로, 문자열에 대해서는 계산 결과가 근사값입니다.
예를 들어, 웹사이트에서 사용자가 수행한 모든 검색 쿼리를 기록하는 테이블이 있다고 가정하겠습니다. 테이블의 각 행은 하나의 검색 쿼리를 나타내며, 사용자 ID, 검색 쿼리, 쿼리의 timestamp에 해당하는 컬럼을 포함합니다. 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)
매개변수
반환 값
- 2개의 배열로 이루어진 튜플을 반환합니다. 첫 번째 배열에는 정렬된 순서의 키가, 두 번째 배열에는 해당 키별로 합산된 값이 들어 있습니다.
Query
Query
Response
sumMapFilteredWithOverflow
sumMapFilteredWithOverflow(keys_to_keep)(keys, values)
매개변수
반환 값
- 두 개의 배열로 이루어진 튜플을 반환합니다. 하나는 정렬된 순서의 키이고, 다른 하나는 각 키에 해당하는 합산 값입니다.
sum_map 테이블을 생성하고 일부 데이터를 삽입한 다음, 결과를 비교하기 위해 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의 동작