Todos los productos
Search
Centro de documentos

Hologres:Path analysis functions

Última actualización: Sep 05, 2026

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;
    Nota

    Una 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.

      Nota

      Si session_interval_sec se establece en -1, las sesiones se dividen por evento en lugar de por tiempo.

    Por ejemplo, si una ruta como abcabc...abc se 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 en true. 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<,""}.

    Nota

    Para 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<,""}.

    Nota

    Para 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_path devuelve 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;
Nota

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)