Hologres は、パス詳細関数とパス解析関数を含む一連のパス解析関数を提供します。これらの関数は、パス計算タスクを効率的に処理し、パスの詳細を計算して、結果を解析します。記録されたデータを使用してサンキーダイアグラムを生成することで、複雑なパス情報を理解し、可視化できます。このトピックでは、パス詳細関数とパス解析関数の使用方法について説明します。
背景情報
パス解析は、ユーザーが製品や機能とやり取りする際のユーザーパスの分布と、各セッションにおける一連のアクションを記録します。これにより、ユーザーの行動を直感的に示すサンキーダイアグラムが生成されます。サンキーダイアグラムは、ユーザーフローにおける各主要ノードとこれらのノード間のトラフィックを表示することで、詳細なビジネス分析が可能になります。パス解析を使用することで、製品の各主要機能に対するユーザーのエンゲージメントを明確に理解できます。これは、運用チームや製品チームがビジネス戦略を最適化し、製品を改良してビジネスの成長を促進するのに役立ちます。Hologres は、詳細なパス計算のためのパス詳細関数と、結果分析のためのパス解析関数をサポートしています。この出力は、サンキーダイアグラムの作成に直接使用できます。
パス解析のサンキーダイアグラムのインターフェース上部には、[time zone selector]、[time range selector]、[maximum number of nodes per layer] の設定、および [Export] ボタンがあります。サンキーダイアグラムは、初期イベント (例:$AppStart) から始まり、その後のユーザーアクション (例:$AppEnd、AppPageview、Search、CheckIn、AllPayments) を順次表示します。各ノードにはイベント名とそのトリガー回数がラベル付けされ、ノード間のフローの幅はトラフィック量を反映します。
注意事項
-
パス解析関数は Hologres V2.2 以降で利用できます。インスタンスが V2.1 以前の場合は、Hologres のテクニカルサポートにご連絡いただき、インスタンスをアップグレードしてください。
-
パス解析関数を使用するには、拡張を作成する必要があります。デフォルトでは、拡張は public スキーマに読み込まれ、他のスキーマに読み込むことはできません。
-- 拡張を作成します。 CREATE extension flow_analysis;説明拡張はデータベースレベルであり、データベースごとに 1 回のみ作成する必要があります。
パス詳細関数
パス詳細関数 (path_analysis_detail)
path_analysis_detail 関数は、指定されたイベントデータを分析し、詳細なパス構造として提示します。出力は、完全なパスシーケンス、パス内のノード間の親子関係、各ステップの所要時間など、包括的な情報を含むシリアル化された配列です。
-
構文
path_analysis_detail( event, event_time, start_event, session_interval_sec, path_depth, path_offset, is_reverse, split_session_by_event) -
パラメーター
パラメーター
型
説明
event
text (データ)
分析対象のイベント。
event_time
timestamp、timestamptz、bigint (データ)
各イベントのタイムスタンプ。
start_event
text (リテラル)
指定された開始イベントまたは終了イベント。
session_interval_sec
bigint (リテラル)
セッションの間隔 (秒単位)。
セッション内の隣接するイベント間の時間が指定されたセッション間隔を超えると、セッションは 2 つに分割されます。たとえば、間隔を 30 秒に設定し、2 つのイベント間の時間が 30 秒を超えた場合、それらのイベントは 2 つの異なるセッションに属すると見なされます。
path_depth
bigint (リテラル)
指定された開始イベントまたは終了イベントから始まる、取得するシーケンス内のイベント数。
path_offset
bigint (リテラル)
開始イベントまたは終了イベントからのイベントオフセット。値が 0 の場合はオフセットがないことを意味します。
たとえば、イベント系列 a、b、c がある場合、a が開始イベントでオフセットが 1 の場合、マッチングはイベント b から開始されます。
is_reverse
bool (リテラル)
イベント系列の出力順序。有効値:
-
false:開始イベントを指定します。イベント系列は時系列順で返されます。
-
true:終了イベントを指定します。イベント系列は逆時系列順で返されます。
split_session_by_event
bool (リテラル)
セッション分割の方法。有効値:
-
true:イベント系列内で指定された開始イベントまたは終了イベントが検出されるたびに、新しいセッションが開始されます。
-
false (デフォルト):セッションは
session_interval_secパラメーターの値にのみ基づいて分割されます。説明session_interval_sec が -1 に設定されている場合、セッションは時間ではなくイベントによって分割されます。
たとえば、
abcabc...abcのようなパスが同じセッション内で 10 回繰り返された場合、関数のマッチングメカニズムは 1 回のコンバージョンしか記録しません。パスの各繰り返しを新しいセッションとして扱い、各コンバージョンを個別に計算したい場合は、このパラメーターをtrueに設定します。これにより、各新しい操作を個別に記録およびカウントできます。 -
-
戻り値
path_analysis_detail:
textデータ型の値を返します。例:{"",\x01a\x01b<,\x01b\x01c<,""}。説明結果を読み取るには、対応するパス解析関数を使用する必要があります。
pad_funnel 関数
pad_funnel 関数は、特定のイベントの組み合わせのサブパス情報を取得します。
-
構文
pad_funnel(path_analysis_detail(), target_path) -
パラメーター
パラメーター
型
説明
path_analysis_detail()
text (データ)
path_analysis_detail関数によって返された結果。target_path
text (リテラル)
指定されたイベント系列。
-
戻り値
pad_funnel:
text配列型の値を返します。例:text []{"",\x01a\x01b<,\x01b\x01c<,""}。説明結果を読み取るには、対応するパス解析関数を使用する必要があります。
パス解析関数
pad_full_path 関数
pad_full_path 関数は、path_analysis_detail の結果を親パス、サブパス、および各ステップの所要時間に解析します。
-
構文
pad_full_path(path_analysis_detail()) -
パラメーター
path_analysis_detail():
path_analysis_detail関数によって返された結果。 -
戻り値
-
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) -
戻り値のパラメーターを次の表に示します。
関数
型
説明
pad_sub_path_left
text
サブパスの開始イベント。
pad_sub_path_right
text
サブパスの終了イベント。
pad_sub_index_left
bigint
セッションの完全なパス内でのサブパスの開始イベントのインデックス。
pad_sub_index_right
bigint
セッションの完全なパス内でのサブパスの終了イベントのインデックス。
pad_sub_cost
bigint
サブパスの遷移にかかる時間 (秒単位)。
pad_sub_session
bigint
サブパスが属する有効なセッションのインデックス。
-
pad_session_path_array 関数
pad_session_path_array 関数は、指定されたセッション ID のイベント系列を配列として抽出します。
-
構文
pad_session_path_array(path_analysis_detail(), session_idx) -
パラメーター
-
path_analysis_detail():
path_analysis_detail関数によって返された結果。 -
session_idx:指定されたセッションインデックス。
-
-
戻り値
配列型のデータを返します。
例
データの準備
-- 拡張が存在しない場合は作成します。
CREATE extension flow_analysis;
-- データを準備します。
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');
例 1:すべてのイベントパスの記録
-
時間によるセッション分割。
-- 時間で分割:'Log on' を開始イベントとして指定し、セッション間隔を 180 秒に、マッチングシーケンスの長さを 7 に設定します。次に、pad_full_path 関数を使用して結果を解析します。 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;次の結果が返されます。
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) -
時間とイベントによるセッション分割。
-- 時間とイベントで分割:'Browse' を開始イベントとして指定し、間隔を 180 秒に、シーケンスの長さを 7 に設定します。次に、pad_full_path 関数を使用して結果を解析します。 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;次の結果が返されます。
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}
例 2:パス結果の展開
-- パスを展開します。
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;
UNNEST 関数の詳細については、「UNNEST 句」をご参照ください。
次の結果が返されます。
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)
例 3:サブパス詳細の展開
-- サブパスを展開します。
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 ;
次の結果が返されます。
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)
例 4:セッションイベント系列の取得
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;
次の結果が返されます。
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)
例 5:サブパスの PV と UV の計算
-- 各サブパスのページビュー (PV) とユニークユーザー (UU) を重複排除なしで計算します。結果を重複排除する必要がある場合は、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;
次の結果が返されます。
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)
例 6:平均サブパス所要時間の計算
-- 各サブパスの平均所要時間を計算します。
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;
次の結果が返されます。
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)
例 7:セッションパスとサブパス詳細の関連付け
-- セッションパスとサブパスを関連付けます。
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;
次の結果が返されます。
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)
例 8:部分的なパス詳細の表示
-- pad_funnel 関数を使用して、特定のパス ('Log on' から 'Purchase' まで) のコンバージョン詳細を表示します。
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;
次の結果が返されます。
uid | ret
-----+------------------
3 | {Log on}
4 | {Log on->Purchase}
1 | {Log on}
2 | {Log on->Purchase}
(4 rows)