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;CatatanJangan 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.CatatanJika Anda menetapkan parameter
session_interval_secke -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_funnelhanya 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
TEXTdikembalikan. Contoh:{"",\x01a\x01b<,\x01b\x01c<,""}.CatatanNilai 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
TEXTdikembalikan. Contoh:text []{"",\x01a\x01b<,\x01b\x01c<,""}.CatatanNilai 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;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)