Hologres ofrece un conjunto de funciones de análisis de rutas que incluye funciones de detalle de ruta y funciones de análisis sintáctico de ruta. Estas funciones procesan de manera eficiente las tareas de cálculo de rutas, calculan los detalles de la ruta y analizan sintácticamente los resultados. Puede utilizar los datos registrados para generar un diagrama de Sankey, lo cual le permite comprender y visualizar información compleja sobre las rutas. Este tema describe cómo usar las funciones de detalle de ruta y de análisis sintáctico de ruta.
Contexto
El análisis de rutas registra la distribución de las rutas de los usuarios y la secuencia de acciones en cada sesión cuando interactúan con su producto o función. Genera un diagrama de Sankey intuitivo del comportamiento del usuario. El diagrama de Sankey muestra cada nodo clave en el flujo del usuario y el tráfico entre estos nodos, lo que permite un análisis detallado del negocio. Al utilizar el análisis de rutas, puede comprender claramente la interacción de los usuarios con cada función clave de su producto. Esto ayuda a sus equipos de operaciones y de producto a optimizar las estrategias comerciales e iterar sobre el producto, impulsando el crecimiento del negocio. Hologres admite una función de detalle de ruta para el cálculo detallado de rutas y una función de análisis sintáctico de ruta para el análisis de resultados. La salida se puede usar directamente para crear un diagrama de Sankey.
La parte superior de la interfaz del diagrama de Sankey de análisis de rutas proporciona un selector de zona horaria, un selector de rango de tiempo, configuraciones para el número máximo de nodos por capa y un botón Export. El diagrama de Sankey comienza desde un evento inicial (como $AppStart) y muestra progresivamente las acciones posteriores del usuario (como $AppEnd, AppPageview, Search, CheckIn y AllPayments). Cada nodo está etiquetado con el nombre del evento y su recuento de activaciones, y el ancho del flujo entre nodos refleja el volumen de tráfico.
Notas de uso
Las funciones de análisis de rutas están disponibles en Hologres V2.2 y versiones posteriores. Si su instancia es V2.1 o anterior, póngase en contacto con el soporte técnico de Hologres para actualizar su instancia.
-
Para usar las funciones de análisis de rutas, debe crear una extensión. De forma predeterminada, la extensión se carga en el esquema public y no se puede cargar en otros esquemas.
--Create the extension. CREATE extension flow_analysis;NotaUna extensión es de nivel de base de datos y solo necesita crearse una vez por base de datos.
Funciones de detalle de ruta
Función de detalle de ruta (path_analysis_detail)
La función path_analysis_detail analiza los datos de eventos especificados y los presenta como una estructura de ruta detallada. La salida es una matriz serializada que contiene información completa, incluida la secuencia completa de la ruta, las relaciones padre-hijo entre los nodos de la ruta y la duración de cada paso.
-
Sintaxis
path_analysis_detail( event, event_time, start_event, session_interval_sec, path_depth, path_offset, is_reverse, split_session_by_event) -
Parámetros
Parámetro
Tipo
Descripción
event
text (datos)
El evento que se va a analizar.
event_time
timestamp, timestamptz, bigint (datos)
La marca de tiempo de cada evento.
start_event
text (literal)
El evento de inicio o fin especificado.
session_interval_sec
bigint (literal)
El intervalo de sesión en segundos (s).
Si el tiempo entre eventos adyacentes en una sesión supera el intervalo de sesión especificado, el sistema la divide en dos sesiones. Por ejemplo, si establece el intervalo en 30 s y el tiempo entre dos eventos es mayor a 30 s, los eventos se consideran partes de dos sesiones diferentes.
path_depth
bigint (literal)
El número de eventos que se deben recuperar en la secuencia, comenzando desde el evento de inicio o fin especificado.
path_offset
bigint (literal)
El desplazamiento del evento respecto al evento de inicio o fin. Un valor de 0 significa que no hay desplazamiento.
Por ejemplo, para una serie de eventos a, b y c, si a es el evento de inicio y el desplazamiento es 1, la coincidencia comienza desde el evento b.
is_reverse
bool (literal)
El orden de salida de la serie de eventos. Valores válidos:
-
false: Especifica un evento de inicio. La serie de eventos se devuelve en orden cronológico.
-
true: Especifica un evento de fin. La serie de eventos se devuelve en orden cronológico inverso.
split_session_by_event
bool (literal)
El método para dividir sesiones. Valores válidos:
-
true: Se inicia una nueva sesión cada vez que se encuentra el evento de inicio o fin especificado en la serie de eventos.
-
false (predeterminado): Las sesiones se dividen únicamente según el valor del parámetro
session_interval_sec.NotaSi
session_interval_secse establece en -1, las sesiones se dividen por evento en lugar de por tiempo.
Por ejemplo, si una ruta como
abcabc...abcse repite 10 veces dentro de la misma sesión, el mecanismo de coincidencia de la función registra solo una conversión única. Si desea tratar cada repetición de la ruta como una nueva sesión para calcular cada conversión de forma independiente, puede establecer este parámetro entrue. Esto permite que cada nueva operación se registre y cuente por separado. -
-
Valor de retorno
path_analysis_detail: Devuelve un valor del tipo de datos
text. Ejemplo:{"",\x01a\x01b<,\x01b\x01c<,""}.NotaPara leer el resultado, debe usar una función de análisis sintáctico de ruta correspondiente.
**Función pad_funnel**
La función pad_funnel recupera información de subrutas para una combinación específica de eventos.
-
Sintaxis
pad_funnel(path_analysis_detail(), target_path) -
Parámetros
Parámetro
Tipo
Descripción
path_analysis_detail()
text (datos)
El resultado devuelto por la función
path_analysis_detail.target_path
text (literal)
La serie de eventos especificada.
-
Valor de retorno
pad_funnel: Devuelve un valor
text. Ejemplo:text []{"",\x01a\x01b<,\x01b\x01c<,""}.NotaPara leer el resultado, debe usar una función de análisis sintáctico de ruta correspondiente.
Funciones de análisis sintáctico de ruta
Función pad_full_path
La función pad_full_path analiza sintácticamente el resultado de path_analysis_detail en rutas principales, subrutas y la duración de cada paso.
-
Sintaxis
pad_full_path(path_analysis_detail()) -
Parámetros
path_analysis_detail(): El resultado devuelto por la función
path_analysis_detail. -
Valor de retorno
-
La función
pad_full_pathdevuelve el siguiente contenido.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) -
La siguiente tabla describe los parámetros de retorno.
Función
Tipo
Descripción
pad_sub_path_left
text
El evento de inicio de la subruta.
pad_sub_path_right
text
El evento de fin de la subruta.
pad_sub_index_left
bigint
El índice del evento de inicio de la subruta dentro de la ruta completa de la sesión.
pad_sub_index_right
bigint
El índice del evento de fin de la subruta dentro de la ruta completa de la sesión.
pad_sub_cost
bigint
La duración de la transición para la subruta, en segundos (s).
pad_sub_session
bigint
El índice de la sesión válida a la que pertenece la subruta.
-
Función pad_session_path_array
La función pad_session_path_array extrae la serie de eventos para un ID de sesión especificado como una matriz.
-
Sintaxis
pad_session_path_array(path_analysis_detail(), session_idx) -
Parámetros
path_analysis_detail(): El resultado devuelto por la función
path_analysis_detail.session_idx: El índice de sesión especificado.
-
Valor de retorno
Devuelve datos del tipo matriz.
Ejemplos
Preparar datos
--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');
Ejemplo 1: Registro de todas las rutas de eventos
-
Dividir sesiones por tiempo.
--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;Se devuelve el siguiente 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) -
Dividir sesiones por tiempo y 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;Se devuelve el siguiente 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}
Ejemplo 2: Expansión del resultado de la ruta
--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 obtener más información sobre la función UNNEST, consulte UNNEST clause.
Se devuelve el siguiente 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)
Ejemplo 3: Expansión de detalles de subrutas
--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 ;
Se devuelve el siguiente 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)
Ejemplo 4: Obtención de la serie de eventos de sesión
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;
Se devuelve el siguiente 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)
Ejemplo 5: Cálculo de PV y UV de subrutas
--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;
Se devuelve el siguiente 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)
Ejemplo 6: Cálculo de la duración promedio de subrutas
--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;
Se devuelve el siguiente 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)
Ejemplo 7: Asociación de rutas de sesión con detalles de subrutas
--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;
Se devuelve el siguiente 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)
Ejemplo 8: Visualización de detalles parciales de ruta
--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;
Se devuelve el siguiente resultado.
uid | ret
-----+------------------
3 | {Log on}
4 | {Log on->Purchase}
1 | {Log on}
2 | {Log on->Purchase}
(4 rows)