Todos os produtos
Search
Central de documentação

Hologres:Funções de análise de caminho

Última atualização: Jun 28, 2026

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

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

      Nota

      Se session_interval_sec estiver definido como -1, as sessões serão divididas por evento em vez de tempo.

    Por exemplo, se um caminho como abcabc...abc se 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 como true. 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<,""}.

    Nota

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

    Nota

    Para 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_path retorna 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.

  • 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

    • 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}

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

    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)