Hologres menyediakan serangkaian fungsi analisis jalur, termasuk fungsi detail jalur dan fungsi penguraian jalur. Fungsi-fungsi ini memproses tugas komputasi jalur secara efisien, menghitung detail jalur, serta mengurai hasilnya. Anda dapat menggunakan data yang direkam untuk menghasilkan Diagram Sankey, yang membantu memahami dan memvisualisasikan informasi jalur yang kompleks. Topik ini menjelaskan cara menggunakan fungsi detail jalur dan fungsi penguraian jalur.
Latar Belakang
Analisis jalur mencatat distribusi jalur pengguna dan urutan aksi dalam setiap session saat pengguna berinteraksi dengan Produk atau fitur Anda. Analisis ini menghasilkan Diagram Sankey perilaku pengguna yang intuitif. Diagram Sankey menampilkan setiap node kunci dalam alur pengguna dan traffic antar node tersebut, sehingga memungkinkan analisis bisnis secara granular. Dengan analisis jalur, Anda dapat memahami secara jelas keterlibatan pengguna dengan setiap fitur kunci Produk Anda, membantu tim operasional dan produk mengoptimalkan strategi bisnis serta melakukan iterasi Produk guna mendorong pertumbuhan bisnis. Hologres mendukung fungsi detail jalur untuk komputasi jalur terperinci dan fungsi penguraian jalur untuk analisis hasil. Output-nya dapat langsung digunakan untuk membuat Diagram Sankey.
Bagian atas antarmuka Diagram Sankey analisis jalur menyediakan time zone selector, time range selector, pengaturan maximum number of nodes per layer, dan tombol Export. Diagram Sankey dimulai dari event awal (misalnya $AppStart) dan secara bertahap menampilkan aksi pengguna berikutnya (seperti $AppEnd, AppPageview, Search, CheckIn, dan AllPayments). Setiap node diberi label berupa nama event dan jumlah pemicunya, sedangkan lebar aliran antar node mencerminkan volume traffic.
Catatan Penggunaan
-
Fungsi analisis jalur tersedia di Hologres V2.2 ke atas. Jika instans Anda menggunakan V2.1 atau versi sebelumnya, hubungi dukungan teknis Hologres untuk melakukan upgrade instans Anda.
-
Untuk menggunakan fungsi analisis jalur, Anda harus membuat ekstensi. Secara default, ekstensi dimuat ke dalam skema public dan tidak dapat dimuat ke skema lain.
--Buat ekstensi. CREATE extension flow_analysis;CatatanEkstensi bersifat tingkat database dan hanya perlu dibuat satu kali per database.
Fungsi detail jalur
Fungsi detail jalur (path_analysis_detail)
Fungsi path_analysis_detail menganalisis data event tertentu dan menyajikannya sebagai struktur jalur terperinci. Output-nya berupa array serialisasi yang berisi informasi lengkap, termasuk urutan jalur lengkap, hubungan induk-anak antar node dalam jalur, serta durasi setiap langkah.
-
Sintaks
path_analysis_detail( event, event_time, start_event, session_interval_sec, path_depth, path_offset, is_reverse, split_session_by_event) -
Parameter
Parameter
Tipe
Deskripsi
event
text (data)
Event yang akan dianalisis.
event_time
timestamp, timestamptz, bigint (data)
Timestamp setiap event.
start_event
text (literal)
Event awal atau akhir yang ditentukan.
session_interval_sec
bigint (literal)
Interval session dalam detik (s).
Jika selang waktu antar event berdekatan dalam satu session melebihi interval session yang ditentukan, sistem akan membaginya menjadi dua session. Misalnya, jika Anda mengatur interval menjadi 30 detik dan selang waktu antara dua event lebih dari 30 detik, kedua event tersebut dianggap sebagai bagian dari dua session berbeda.
path_depth
bigint (literal)
Jumlah event yang diambil dalam urutan, dimulai dari event awal atau akhir yang ditentukan.
path_offset
bigint (literal)
Offset event dari event awal atau akhir. Nilai 0 berarti tanpa offset.
Misalnya, untuk rangkaian event a, b, dan c, jika a adalah event awal dan offset-nya 1, pencocokan dimulai dari event b.
is_reverse
bool (literal)
Urutan output rangkaian event. Nilai yang valid:
-
false: Menentukan event awal. Rangkaian event dikembalikan dalam urutan kronologis.
-
true: Menentukan event akhir. Rangkaian event dikembalikan dalam urutan kronologis terbalik.
split_session_by_event
bool (literal)
Metode pemisahan session. Nilai yang valid:
-
true: Session baru dimulai setiap kali event awal atau akhir yang ditentukan ditemui dalam rangkaian event.
-
false (Default): Session hanya dipisahkan berdasarkan nilai parameter
session_interval_sec.CatatanJika
session_interval_secdiatur ke -1, session dipisahkan berdasarkan event, bukan waktu.
Misalnya, jika jalur seperti
abcabc...abcdiulang 10 kali dalam satu session yang sama, mekanisme pencocokan fungsi hanya mencatat satu konversi. Jika Anda ingin memperlakukan setiap pengulangan jalur sebagai session baru untuk menghitung setiap konversi secara independen, Anda dapat mengatur parameter ini ketrue. Hal ini memungkinkan setiap operasi baru dicatat dan dihitung secara terpisah. -
-
Nilai kembalian
path_analysis_detail: Mengembalikan nilai bertipe data
text. Contoh:{"",\x01a\x01b<,\x01b\x01c<,""}.CatatanUntuk membaca hasilnya, Anda harus menggunakan fungsi penguraian jalur yang sesuai.
Fungsi pad_funnel
Fungsi pad_funnel mengambil informasi subjalur untuk kombinasi event tertentu.
-
Sintaks
pad_funnel(path_analysis_detail(), target_path) -
Parameter
Parameter
Tipe
Deskripsi
path_analysis_detail()
text (data)
Hasil yang dikembalikan oleh fungsi
path_analysis_detail.target_path
text (literal)
Rangkaian event yang ditentukan.
-
Nilai kembalian
pad_funnel: Mengembalikan nilai
text. Contoh:text []{"",\x01a\x01b<,\x01b\x01c<,""}.CatatanUntuk membaca hasilnya, Anda harus menggunakan fungsi penguraian jalur yang sesuai.
Fungsi penguraian jalur
Fungsi pad_full_path
Fungsi pad_full_path mengurai hasil path_analysis_detail menjadi jalur induk, subjalur, dan durasi setiap langkah.
-
Sintaks
pad_full_path(path_analysis_detail()) -
Parameter
path_analysis_detail(): Hasil yang dikembalikan oleh fungsi
path_analysis_detail. -
Nilai kembalian
-
Fungsi
pad_full_pathmengembalikan konten berikut.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 kembalian.
Fungsi
Tipe
Deskripsi
pad_sub_path_left
text
Event awal subjalur.
pad_sub_path_right
text
Event akhir subjalur.
pad_sub_index_left
bigint
Indeks event awal subjalur dalam jalur lengkap session.
pad_sub_index_right
bigint
Indeks event akhir subjalur dalam jalur lengkap session.
pad_sub_cost
bigint
Durasi transisi untuk subjalur, dalam detik (s).
pad_sub_session
bigint
Indeks session valid tempat subjalur tersebut berada.
-
Fungsi pad_session_path_array
Fungsi pad_session_path_array mengekstraksi rangkaian event untuk ID session tertentu sebagai array.
-
Sintaks
pad_session_path_array(path_analysis_detail(), session_idx) -
Parameter
-
path_analysis_detail(): Hasil yang dikembalikan oleh fungsi
path_analysis_detail. -
session_idx: Indeks session yang ditentukan.
-
-
Nilai kembalian
Mengembalikan data bertipe array.
Contoh
Menyiapkan data
--Buat ekstensi jika belum ada.
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: Mencatat semua jalur event
-
Pisahkan session berdasarkan waktu.
--Pisahkan berdasarkan waktu: Tentukan 'Log on' sebagai event awal, atur interval session menjadi 180 detik, dan atur panjang urutan pencocokan menjadi 7. Lalu, gunakan fungsi pad_full_path untuk mengurai 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;Hasil berikut 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 rows) -
Pisahkan session berdasarkan waktu dan event.
--Pisahkan berdasarkan waktu dan event: Tentukan 'Browse' sebagai event awal, atur interval menjadi 180 detik, dan atur panjang urutan menjadi 7. Lalu, gunakan fungsi pad_full_path untuk mengurai 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;Hasil berikut 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: Memperluas 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;
Untuk informasi lebih lanjut tentang fungsi UNNEST, lihat Klausa UNNEST.
Hasil berikut 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 rows)
Contoh 3: Perluas detail subjalur
--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 ;
Hasil berikut 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 rows)
Contoh 4: Dapatkan rangkaian event session
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;
Hasil berikut 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 rows)
Contoh 5: Hitung PV dan UV subjalur
--Hitung page view (PV) dan unique visitor (UV) untuk setiap subjalur tanpa deduplikasi. Jika Anda perlu menghapus duplikat hasilnya, Anda dapat melakukan deduplikasi berdasarkan 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;
Hasil berikut 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 rows)
Contoh 6: Hitung durasi rata-rata 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;
Hasil berikut 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 rows)
Contoh 7: Mengaitkan jalur session dengan detail subjalur
--Kaitkan jalur session dengan subjalur.
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;
Hasil berikut 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 rows)
Contoh 8: Lihat detail jalur sebagian
--Lihat detail konversi untuk jalur tertentu ('Log on' ke 'Purchase') menggunakan fungsi pad_funnel.
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;
Hasil berikut dikembalikan.
uid | ret
-----+------------------
3 | {Log on}
4 | {Log on->Purchase}
1 | {Log on}
2 | {Log on->Purchase}
(4 rows)