O Hologres oferece um conjunto de funções de análise de caminho, incluindo funções de detalhe e de parsing. Esses recursos processam tarefas de computação de caminho com eficiência, calculam detalhes e analisam os resultados. Utilize os dados registrados para gerar um diagrama de Sankey, facilitando a compreensão e a visualização de informações complexas de caminho. Este tópico descreve como usar as funções de detalhe e de parsing de caminho.
Contexto
A análise de caminho registra a distribuição dos caminhos dos usuários e a sequência de ações em cada sessão durante a interação com seu produto ou recurso. Ela gera um diagrama de Sankey intuitivo do comportamento do usuário. Esse diagrama exibe cada nó-chave no fluxo do usuário e o tráfego entre esses nós, permitindo uma análise granular dos negócios. Com a análise de caminho, você compreende claramente o engajamento dos usuários em cada recurso principal do seu produto. Isso auxilia suas equipes de operações e produtos a otimizar estratégias de negócios e iterar no produto, impulsionando o crescimento. O Hologres suporta uma função de detalhe de caminho para computação detalhada e uma função de parsing para análise de resultados. A saída pode ser usada diretamente para criar um diagrama de Sankey.
A parte superior da interface do diagrama de Sankey de análise de caminho fornece um seletor de fuso horário, um seletor de intervalo de tempo, configurações para o número máximo de nós por camada e um botão Export. O diagrama de Sankey começa com um evento inicial (como $AppStart) e exibe progressivamente as ações subsequentes do usuário (como $AppEnd, AppPageview, Search, CheckIn e AllPayments). Cada nó é rotulado com o nome do evento e sua contagem de acionamentos, e a largura do fluxo entre os nós reflete o volume de tráfego.
Notas de uso
As funções de análise de caminho estão disponíveis no Hologres V2.2 e versões posteriores. Se sua instância for V2.1 ou anterior, entre em contato com o suporte técnico do Hologres para atualizá-la.
-
Para usar as funções de análise de caminho, crie uma extensão. Por padrão, a extensão é carregada no schema public e não pode ser carregada em outros schemas.
--Create the extension. CREATE extension flow_analysis;NotaUma extensão tem nível de banco de dados e precisa ser criada apenas uma vez por banco de dados.
Funções de detalhe de caminho
Função de detalhe de caminho (path_analysis_detail)
A função path_analysis_detail analisa dados de eventos especificados e os apresenta como uma estrutura de caminho detalhada. A saída é um array serializado que contém informações abrangentes, incluindo a sequência completa do caminho, as relações pai-filho entre os nós no caminho e a duração de cada etapa.
-
Sintaxe
path_analysis_detail( event, event_time, start_event, session_interval_sec, path_depth, path_offset, is_reverse, split_session_by_event) -
Parâmetros
Parameter
Type
Description
event
text (data)
O evento a ser analisado.
event_time
timestamp, timestamptz, bigint (data)
O timestamp de cada evento.
start_event
text (literal)
O evento inicial ou final especificado.
session_interval_sec
bigint (literal)
O intervalo de sessão em segundos (s).
Se o tempo entre eventos adjacentes em uma sessão exceder o intervalo especificado, o sistema a dividirá em duas sessões. Por exemplo, se você definir o intervalo como 30s e o tempo entre dois eventos for maior que 30s, os eventos serão considerados partes de duas sessões diferentes.
path_depth
bigint (literal)
O número de eventos a serem recuperados na sequência, começando pelo evento inicial ou final especificado.
path_offset
bigint (literal)
O deslocamento do evento em relação ao evento inicial ou final. Um valor de 0 significa sem deslocamento.
Por exemplo, para uma série de eventos a, b e c, se a for o evento inicial e o deslocamento for 1, a correspondência começará a partir do evento b.
is_reverse
bool (literal)
A ordem de saída da série de eventos. Valores válidos:
-
false: Especifica um evento inicial. A série de eventos é retornada em ordem cronológica.
-
true: Especifica um evento final. A série de eventos é retornada em ordem cronológica inversa.
split_session_by_event
bool (literal)
O método para divisão de sessão. Valores válidos:
-
true: Uma nova sessão inicia sempre que o evento inicial ou final especificado é encontrado na série de eventos.
-
false (Padrão): As sessões são divididas apenas com base no valor do parâmetro
session_interval_sec.NotaSe
session_interval_secestiver definido como -1, as sessões serão divididas por evento em vez de tempo.
Por exemplo, se um caminho como
abcabc...abcse repetir 10 vezes dentro da mesma sessão, o mecanismo de correspondência da função registrará apenas uma única conversão. Caso deseje tratar cada repetição do caminho como uma nova sessão para calcular cada conversão independentemente, defina este parâmetro comotrue. Isso permite que cada nova operação seja registrada e contada separadamente. -
-
Valor de retorno
path_analysis_detail: Retorna um valor do tipo de dados
text. Exemplo:{"",\x01a\x01b<,\x01b\x01c<,""}.NotaPara ler o resultado, use uma função de parsing de caminho correspondente.
**Função pad_funnel**
A função pad_funnel recupera informações de subcaminho para uma combinação específica de eventos.
-
Sintaxe
pad_funnel(path_analysis_detail(), target_path) -
Parâmetros
Parameter
Type
Description
path_analysis_detail()
text (data)
O resultado retornado pela função
path_analysis_detail.target_path
text (literal)
A série de eventos especificada.
-
Valor de retorno
pad_funnel: Retorna um valor
text. Exemplo:text []{"",\x01a\x01b<,\x01b\x01c<,""}.NotaPara ler o resultado, use uma função de parsing de caminho correspondente.
Funções de parsing de caminho
Função pad_full_path
A função pad_full_path faz o parsing do resultado de path_analysis_detail em caminhos pai, subcaminhos e a duração de cada etapa.
-
Sintaxe
pad_full_path(path_analysis_detail()) -
Parâmetros
path_analysis_detail(): O resultado retornado pela função
path_analysis_detail. -
Valor de retorno
-
A função
pad_full_pathretorna o seguinte conteúdo.pad_sub_path_left(unnested_pad_result) pad_sub_path_right(unnested_pad_result) pad_sub_index_left(unnested_pad_result) pad_sub_index_right(unnested_pad_result) pad_sub_cost(unnested_pad_result) pad_sub_session(unnested_pad_result) -
A tabela a seguir descreve os parâmetros de retorno.
Function
Type
Description
pad_sub_path_left
text
O evento inicial do subcaminho.
pad_sub_path_right
text
O evento final do subcaminho.
pad_sub_index_left
bigint
O índice do evento inicial do subcaminho dentro do caminho completo da sessão.
pad_sub_index_right
bigint
O índice do evento final do subcaminho dentro do caminho completo da sessão.
pad_sub_cost
bigint
A duração da transição para o subcaminho, em segundos (s).
pad_sub_session
bigint
O índice da sessão válida à qual o subcaminho pertence.
-
Função pad_session_path_array
A função pad_session_path_array extrai a série de eventos para um ID de sessão especificado como um array.
-
Sintaxe
pad_session_path_array(path_analysis_detail(), session_idx) -
Parâmetros
path_analysis_detail(): O resultado retornado pela função
path_analysis_detail.session_idx: O índice de sessão especificado.
-
Valor de retorno
Retorna dados do tipo array.
-
Divida sessões por tempo.
--Split by time: Specify 'Log on' as the start event, set the session interval to 180 s, and set the matching sequence length to 7. Then, use the pad_full_path function to decode the results. SELECT uid, pad_full_path(path_analysis_detail(event, event_time, 'Log on', 180, 7, 0, false)) AS ret FROM path_demo GROUP BY uid;Resultado:
uid | ret -----+--------------------------------------------------- 3 | {Log on->Add to favorites->View live streams} 4 | {Log on->Browse->Purchase->View live streams->Cancel the order} 1 | {Log on->Browse->View live streams->Browse->Add to favorites} 2 | {Log on->Purchase} (4 rows) -
Divida sessões por tempo e evento.
--Split by time and event: Specify 'Browse' as the start event, set the interval to 180 s, and set the sequence length to 7. Then, use the pad_full_path function to decode the results. SELECT uid, pad_full_path(path_analysis_detail(event, event_time, 'Browse', 180, 7, 0, false,TRUE)) AS ret FROM path_demo GROUP BY uid;Resultado:
uid | ret -----+----------------------------------------------------------- 1 | {Browse->View live streams,Browse->Add to favorites,Browse->Purchase->Exit} 2 | {} 4 | {Browse->Purchase->View live streams->Cancel the order} 3 | {Browse->Log on->Add to favorites->View live streams}
Exemplos
Preparar dados
--Create the extension if it does not already exist.
CREATE extension flow_analysis;
--Prepare the data.
CREATE TABLE path_demo(
uid text,
event text,
event_time timestamptz
);
INSERT INTO path_demo VALUES
('1','Register','2023-11-24 16:01:23+08'),
('1','Log on','2023-11-24 16:02:10+08'),
('1','Browse','2023-11-24 16:02:15+08'),
('1','View live streams','2023-11-24 16:03:10+08'),
('1','Browse','2023-11-24 16:03:15+08'),
('1','Add to favorites','2023-11-24 16:04:20+08'),
('1','Browse','2023-11-24 16:07:21+08'),
('1','Purchase','2023-11-24 16:08:23+08'),
('1','Exit','2023-11-24 16:09:05+08'),
('2','Log on','2023-11-24 16:10:23+08'),
('2','Purchase','2023-11-24 16:12:23+08'),
('3','Log on','2023-11-24 16:02:23+08'),
('3','Browse','2023-11-24 16:02:23+08'),
('3','Add to favorites','2023-11-24 16:03:53+08'),
('3','View live streams','2023-11-24 16:04:53+08'),
('4','Log on','2023-11-24 16:02:23+08'),
('4','Browse','2023-11-24 16:03:53+08'),
('4','Purchase','2023-11-24 16:04:23+08'),
('4','View live streams','2023-11-24 16:05:53+08'),
('4','Cancel the order','2023-11-24 16:06:53+08');
Exemplo 1: Registrar todos os caminhos de eventos
Exemplo 2: Expandir o resultado do caminho
--Expand the paths.
SELECT uid, unnest(pad_full_path(path_analysis_detail(event, event_time, 'Log on', 180, 7, 0, false))) AS ret FROM path_demo GROUP BY uid;
Para obter mais informações sobre a função UNNEST, consulte Cláusula UNNEST.
Resultado:
uid | ret
-----+-------------------------------------------------
3 | Log on->Add to favorites->View live streams
1 | Log on->Browse->View live streams->Browse->Add to favorites
2 | Log on->Purchase
4 | Log on->Browse->Purchase->View live streams->Cancel the order
(4 rows)
Exemplo 3: Expandir detalhes do subcaminho
--Expand the subpaths.
SELECT
uid,
pad_sub_session (ret) AS session_id,
pad_sub_path_left (ret) AS sub_path_left,
pad_sub_path_right (ret) AS sub_path_right,
pad_sub_index_left (ret) AS sub_index_left,
pad_sub_index_right (ret) AS sub_index_right,
pad_sub_cost (ret) AS sub_cost
FROM (
SELECT
uid,
unnest( path_analysis_detail (event, event_time, 'Log on', 180, 7, 0, FALSE)) AS ret
FROM
path_demo
GROUP BY
uid) a ;
Resultado:
uid | session_id | sub_path_left | sub_path_right | sub_index_left | sub_index_right | sub_cost
-----+------------+---------------+----------------+----------------+-----------------+----------
1 | 0 | | Log on | -1 | 0 | 0
1 | 0 | Log on | Browse | 0 | 1 | 5
1 | 0 | Browse | View live streams | 1 | 2 | 55
1 | 0 | View live streams | Browse | 2 | 3 | 5
1 | 0 | Browse | Add to favorites | 3 | 4 | 65
2 | 0 | | Log on | -1 | 0 | 0
2 | 0 | Log on | Purchase | 0 | 1 | 120
3 | 0 | | Log on | -1 | 0 | 0
3 | 0 | Log on | Add to favorites | 0 | 1 | 90
3 | 0 | Add to favorites | View live streams | 1 | 2 | 60
4 | 0 | | Log on | -1 | 0 | 0
4 | 0 | Log on | Browse | 0 | 1 | 90
4 | 0 | Browse | Purchase | 1 | 2 | 30
4 | 0 | Purchase | View live streams | 2 | 3 | 90
4 | 0 | View live streams | Cancel the order | 3 | 4 | 60
(15 rows)
Exemplo 4: Obter série de eventos da sessão
SELECT
uid,
pad_session_path_array (path_analysis_detail (event, event_time, 'Log on', 180, 7, 0,FALSE), 0) AS ret
FROM
path_demo
GROUP BY
uid;
Resultado:
uid | ret
-----+-----------------------------------------------
1 | {Log on,Browse,View live streams,Browse,Add to favorites}
2 | {Log on,Purchase}
3 | {Log on,Add to favorites,View live streams}
4 | {Log on,Browse,Purchase,View live streams,Cancel the order}
(4 rows)
Exemplo 5: Calcular PV e UV do subcaminho
--Calculate the page view (PV) and unique visitor (UV) for each subpath without deduplication. If you need to deduplicate the results, you can perform deduplication on the uid.
SELECT
sub_index,
sub_path_left,
sub_path_right,
count(uid)
FROM (
SELECT
uid,
pad_sub_path_left (ret) AS sub_path_left,
pad_sub_path_right (ret) AS sub_path_right,
pad_sub_index_right (ret) AS sub_index
FROM (
SELECT
uid,
unnest(path_analysis_detail (event, event_time, 'Log on', 180, 7, 0, FALSE)) AS ret
FROM
path_demo
GROUP BY
uid) a) a
GROUP BY
sub_index,
sub_path_left,
sub_path_right
ORDER BY
sub_index,
sub_path_left,
sub_path_right;
Resultado:
sub_index | sub_path_left | sub_path_right | count
-----------+---------------+----------------+-------
0 | | Log on | 4
1 | Log on | Add to favorites | 1
1 | Log on | Browse | 2
1 | Log on | Purchase | 1
2 | Add to favorites | View live streams | 1
2 | Browse | View live streams | 1
2 | Browse | Purchase | 1
3 | View live streams | Browse | 1
3 | Purchase | View live streams | 1
4 | Browse | Add to favorites | 1
4 | View live streams | Cancel the order | 1
(11 rows)
Exemplo 6: Calcular duração média do subcaminho
--Calculate the average duration for each subpath.
SELECT
sub_path_left,
sub_path_right,
avg(sub_cost)
FROM (
SELECT
uid,
pad_sub_path_left (ret) AS sub_path_left,
pad_sub_path_right (ret) AS sub_path_right,
pad_sub_cost (ret) AS sub_cost
FROM (
SELECT
uid,
unnest(path_analysis_detail (event, event_time, 'Log on', 180, 7, 0, FALSE)) AS ret
FROM
path_demo
GROUP BY
uid) a) a
GROUP BY
sub_path_left,
sub_path_right
ORDER BY
sub_path_left,
sub_path_right;
Resultado:
sub_path_left | sub_path_right | avg
---------------+----------------+------------
Add to favorites | View live streams | 60.000000
Browse | Add to favorites | 65.000000
Browse | View live streams | 55.000000
Browse | Purchase | 30.000000
Log on | Add to favorites | 90.000000
Log on | Browse | 47.500000
Log on | Purchase | 120.000000
View live streams | Cancel the order | 60.000000
View live streams | Browse | 5.000000
Purchase | View live streams | 90.000000
| Log on | 0.000000
(11 rows)
Exemplo 7: Associar caminhos de sessão com detalhes de subcaminho
--Associate session paths with subpaths.
select
uid,
pad_sub_session(item) as session_id,
full_path [pad_sub_session(item)+1] as full_path,
pad_sub_path_left(item) as sub_path_left,
pad_sub_path_right(item) as sub_path_right,
pad_sub_index_right(item) as sub_idx,
pad_sub_cost(item) as sub_cost
from
(
select
uid,
unnest(ret) as item,
pad_full_path(ret) as full_path
from
(
select
uid,
path_analysis_detail(event, event_time, 'Log on', 180, 7, 0, false) as ret
from
path_demo
group by
uid
) a
) a;
Resultado:
uid | session_id | full_path | sub_path_left | sub_path_right | sub_idx | sub_cost
-----+------------+-------------------------------------------------+---------------+----------------+---------+----------
3 | 0 | Log on->Add to favorites->View live streams | | Log on | 0 | 0
3 | 0 | Log on->Add to favorites->View live streams | Log on | Add to favorites | 1 | 90
3 | 0 | Log on->Add to favorites->View live streams | Add to favorites | View live streams | 2 | 60
1 | 0 | Log on->Browse->View live streams->Browse->Add to favorites | | Log on | 0 | 0
1 | 0 | Log on->Browse->View live streams->Browse->Add to favorites | Log on | Browse | 1 | 5
1 | 0 | Log on->Browse->View live streams->Browse->Add to favorites | Browse | View live streams | 2 | 55
1 | 0 | Log on->Browse->View live streams->Browse->Add to favorites | View live streams | Browse | 3 | 5
1 | 0 | Log on->Browse->View live streams->Browse->Add to favorites | Browse | Add to favorites | 4 | 65
2 | 0 | Log on->Purchase | | Log on | 0 | 0
2 | 0 | Log on->Purchase | Log on | Purchase | 1 | 120
4 | 0 | Log on->Browse->Purchase->View live streams->Cancel the order | | Log on | 0 | 0
4 | 0 | Log on->Browse->Purchase->View live streams->Cancel the order | Log on | Browse | 1 | 90
4 | 0 | Log on->Browse->Purchase->View live streams->Cancel the order | Browse | Purchase | 2 | 30
4 | 0 | Log on->Browse->Purchase->View live streams->Cancel the order | Purchase | View live streams | 3 | 90
4 | 0 | Log on->Browse->Purchase->View live streams->Cancel the order | View live streams | Cancel the order | 4 | 60
(15 rows)
Exemplo 8: Visualizar detalhes parciais do caminho
--View conversion details for a specific path ('Log on' to 'Purchase') using the pad_funnel function.
SELECT uid, pad_full_path(pad_funnel(path_analysis_detail(event, event_time, 'Log on', 180, 7, 0, false), array['Log on', 'Purchase'])) AS ret FROM path_demo GROUP BY uid;
Resultado:
uid | ret
-----+------------------
3 | {Log on}
4 | {Log on->Purchase}
1 | {Log on}
2 | {Log on->Purchase}
(4 rows)