全部产品
Search
文档中心

Hologres:Fungsi analisis jalur

更新时间:Jul 02, 2025

Fungsi analisis jalur Hologres mencakup fungsi detail jalur dan fungsi penguraian jalur. Anda dapat menggunakan fungsi ini untuk menghitung detail jalur dan menguraikan hasilnya secara efisien. Data yang dikembalikan dapat ditampilkan dalam diagram Sankey untuk memvisualisasikan informasi jalur kompleks. Topik ini menjelaskan cara menggunakan fungsi detail jalur dan fungsi penguraian jalur di Hologres.

Informasi latar belakang

Fungsi analisis jalur mencatat distribusi jalur saat menggunakan produk atau fitur, serta urutan akses setiap sesi, dan menghasilkan diagram Sankey perilaku jalur yang intuitif dan mudah dipahami. Diagram Sankey menampilkan setiap node kunci dalam proses akses beserta lalu lintas arah masuk dan arah keluar antar node, membantu operasi bisnis lebih rinci. Fungsi ini membantu memahami akses ke setiap fitur kunci produk dan mendukung optimasi strategi bisnis serta iterasi produk oleh tenaga operasional dan personel produk. Hologres mendukung fungsi detail jalur untuk perhitungan detail jalur dan fungsi penguraian jalur untuk penguraian hasil jalur. Hasil yang dikembalikan dapat langsung ditampilkan dalam diagram Sankey.

Catatan penggunaan

  • Hologres V2.2 dan versi lebih baru mendukung fungsi analisis jalur. Jika versi instance Hologres Anda adalah V2.1 atau lebih lama, Anda dapat menghubungi dukungan teknis Hologres untuk meningkatkan instance Anda.

  • Sebelum menggunakan fungsi analisis jalur, Anda harus membuat ekstensi. Ekstensi dibuat pada tingkat database dan hanya perlu dibuat sekali untuk setiap database.

    -- Buat ekstensi.
    CREATE extension flow_analysis;
    Catatan

    Jangan buat ekstensi duplikat dalam database.

Fungsi detail jalur

path_analysis_detail

Fungsi path_analysis_detail mengurai data acara yang ditentukan secara mendalam dan mengembalikan struktur jalur terperinci dalam bentuk array serial. Hasil yang dikembalikan mencakup informasi kunci seperti seri jalur lengkap, hubungan induk-anak antar acara di setiap jalur, dan durasi eksekusi setiap acara di setiap jalur.

  • Sintaksis

    path_analysis_detail(
      event, 
    	event_time, 
    	start_event, 
    	session_interval_sec, 
    	path_depth, 
    	path_offset, 
    	is_reverse,
    split_session_by_event)
  • Parameter

    Parameter

    Tipe data

    Deskripsi

    event

    teks (data)

    Acara yang ingin Anda analisis.

    event_time

    timestamp, timestamptz, dan bigint (data)

    Seri waktu acara.

    start_event

    teks (literal)

    Acara yang Anda tentukan sebagai acara awal atau akhir.

    session_interval_sec

    bigint (literal)

    Interval sesi. Unit: detik.

    Jika interval antara acara berdekatan dalam sesi melebihi nilai parameter ini, sistem akan membagi sesi menjadi dua sesi. Misalnya, jika Anda menetapkan parameter ini ke 30 detik dan interval antara acara berdekatan melebihi 30 detik, sistem akan membagi sesi menjadi dua sesi.

    path_depth

    bigint (literal)

    Panjang seri acara dari acara awal atau akhir.

    path_offset

    bigint (literal)

    Offset acara dari acara awal atau akhir. 0 menentukan tidak ada offset.

    Misalnya, jika Anda mengonfigurasi Acara a sebagai acara awal dan menetapkan offset ke 1 untuk seri acara a, b, dan c, sistem melakukan pencocokan acara mulai dari Acara b.

    is_reverse

    bool (literal)

    Menentukan apakah akan mengembalikan seri acara dalam urutan kronologis terbalik. Nilai valid:

    • false: mengembalikan seri acara dalam urutan kronologis dari acara awal yang ditentukan.

    • true: mengembalikan seri acara dalam urutan kronologis terbalik dari acara akhir yang ditentukan.

    split_session_by_event

    bool (literal)

    Menentukan apakah akan membagi sesi berdasarkan acara. Nilai valid:

    • true: membagi sesi berdasarkan acara awal atau akhir tertentu dalam seri acara berurutan.

    • false: membagi sesi hanya berdasarkan nilai parameter session_interval_sec. Ini adalah nilai default.

      Catatan

      Jika Anda menetapkan parameter session_interval_sec ke -1, sistem akan membagi sesi berdasarkan acara awal atau akhir tertentu.

    Misalnya, jalur (seri acara a, b, dan c) diulang 10 kali dalam sesi. Fungsi pad_funnel hanya mencatat satu konversi untuk sesi ini. Jika Anda ingin mencatat setiap jalur berulang sebagai sesi baru dan menghitung satu konversi untuk setiap sesi, Anda dapat menetapkan parameter ini ke true untuk membagi sesi. Dengan cara ini, setiap jalur berulang dapat dicatat sebagai satu sesi dan satu konversi dihitung untuk setiap sesi.

  • Nilai kembali

    path_analysis_detail: Nilai bertipe TEXT dikembalikan. Contoh: {"",\x01a\x01b<,\x01b\x01c<,""}.

    Catatan

    Nilai kembali adalah array serial dan tidak dapat dibaca langsung. Anda dapat menggunakan fungsi penguraian jalur untuk membaca nilai kembali.

pad_funnel

Fungsi pad_funnel digunakan untuk mendapatkan subjalur kombinasi acara tertentu.

  • Sintaksis

    pad_funnel(path_analysis_detail(), target_path)
  • Parameter

    Parameter

    Tipe data

    Deskripsi

    path_analysis_detail()

    teks (data)

    Array hasil agregat detail jalur yang dikembalikan oleh fungsi path_analysis_detail.

    target_path

    teks (literal)

    Seri acara.

  • Nilai kembali

    path_analysis_detail: Nilai bertipe TEXT dikembalikan. Contoh: text []{"",\x01a\x01b<,\x01b\x01c<,""}.

    Catatan

    Nilai kembali adalah array serial dan tidak dapat dibaca langsung. Anda dapat menggunakan fungsi penguraian jalur untuk membaca nilai kembali.

Fungsi penguraian jalur

pad_full_path

Fungsi pad_full_path melakukan penguraian jalur komprehensif pada nilai kembali fungsi path_analysis_detail. Fungsi ini juga dapat menguraikan jalur penuh, subjalur, dan konsumsi waktu setiap acara, membantu personel bisnis mengamati jalur secara lebih intuitif.

  • Sintaksis

    pad_full_path(path_analysis_detail())
  • Parameter

    path_analysis_detail(): Array hasil agregat detail jalur yang dikembalikan oleh fungsi path_analysis_detail.

  • Nilai kembali

    • Kode berikut menunjukkan hasil yang dikembalikan oleh fungsi pad_full_path:

      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)
    • Tabel berikut menjelaskan parameter dalam kode sebelumnya.

      Parameter

      Tipe data

      Deskripsi

      pad_sub_path_left

      teks

      Acara awal subjalur.

      pad_sub_path_right

      teks

      Acara akhir subjalur.

      pad_sub_index_left

      bigint

      Nomor urutan acara awal subjalur dalam jalur penuh sesi tempat subjalur tersebut berada.

      pad_sub_index_right

      bigint

      Nomor urutan acara akhir subjalur dalam jalur penuh sesi tempat subjalur tersebut berada.

      pad_sub_cost

      bigint

      Durasi pengalihan subjalur. Unit: detik.

      pad_sub_session

      bigint

      Nomor urutan sesi valid tempat subjalur tersebut berada.

pad_session_path_array

Fungsi pad_session_path_array mengekstrak seri acara dalam sesi berdasarkan ID sesi yang ditentukan dan mengatur seri acara secara berurutan berdasarkan awalan jalur.

  • Sintaksis

    pad_session_path_array(path_analysis_detail(), session_idx)
  • Parameter

    • path_analysis_detail(): Array hasil agregat detail jalur yang dikembalikan oleh fungsi path_analysis_detail.

    • session_idx: ID sesi.

  • Nilai kembali

    Nilai bertipe ARRAY dikembalikan.

Contoh

Siapkan data

-- Buat ekstensi. Ekstensi dibuat pada tingkat database. Untuk setiap database, Anda hanya perlu membuat ekstensi sekali.
CREATE extension flow_analysis;
-- Siapkan 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');

Contoh 1: Dapatkan semua jalur acara

  • Pisahkan sesi berdasarkan waktu: Tentukan acara awal, atur parameter session_interval_sec ke 180 detik, dan atur parameter path_depth ke 7.

    -- Pisahkan sesi berdasarkan waktu: Tentukan "Log on" sebagai acara awal, atur parameter session_interval_sec ke 180 detik, atur parameter path_depth ke 7, lalu gunakan fungsi pad_full_path untuk menguraikan hasilnya.
    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;

    Kode berikut menunjukkan hasil yang dikembalikan:

     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 baris)
  • Pisahkan sesi berdasarkan waktu dan acara: Tentukan acara awal, atur parameter session_interval_sec ke 180 detik, dan atur parameter path_depth ke 7.

    -- Pisahkan sesi berdasarkan waktu dan acara: Tentukan "Browse" sebagai acara awal, atur parameter session_interval_sec ke 180 detik, atur parameter path_depth ke 7, lalu gunakan fungsi pad_full_path untuk menguraikan hasilnya.
    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;

    Kode berikut menunjukkan hasil yang dikembalikan:

     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}

Contoh 2: Perluas hasil jalur

-- Perluas jalur.
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;
Catatan

Untuk informasi lebih lanjut tentang klausa UNNEST, lihat Klausa UNNEST.

Kode berikut menunjukkan hasil yang dikembalikan:

 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 baris)

Contoh 3: Perluas subjalur dan dapatkan detail jalur setiap acara

-- Perluas subjalur.
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 ;

Kode berikut menunjukkan hasil yang dikembalikan:

  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 baris)

Contoh 4: Dapatkan seri acara dalam sesi tertentu

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;

Kode berikut menunjukkan hasil yang dikembalikan:

 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 baris)

Contoh 5: Hitung PV dan UV di setiap subjalur tanpa deduplikasi

-- Hitung jumlah tampilan halaman (PV) dan pengunjung unik (UV) di setiap subjalur tanpa deduplikasi. Jika deduplikasi diperlukan, Anda dapat menduplikasi data berdasarkan nilai 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;

Kode berikut menunjukkan hasil yang dikembalikan:

 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 baris)

Contoh 6: Hitung durasi rata-rata untuk setiap subjalur

-- Hitung durasi rata-rata untuk setiap subjalur.
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;

Kode berikut menunjukkan hasil yang dikembalikan:

 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 baris)

Contoh 7: Kueri hubungan antara jalur penuh dan subjalur dalam sesi

-- Kueri hubungan antara jalur penuh dan subjalur dalam sesi.
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;

Kode berikut menunjukkan hasil yang dikembalikan:

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 baris)

Contoh 8: Lihat detail jalur tertentu

-- Anda dapat menggunakan fungsi pad_tunnel untuk melihat detail jalur tertentu. Dalam contoh ini, detail atau informasi subjalur dari jalur Browse > Purchase dikueri.
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;

Kode berikut menunjukkan hasil yang dikembalikan:

 uid |       ret
-----+------------------
 3   | {Log on}
 4   | {Log on -> Purchase}
 1   | {Log on}
 2   | {Log on -> Purchase}
(4 baris)