すべてのプロダクト
Search
ドキュメントセンター

Hologres:パス分析関数

最終更新日:Jan 11, 2025

Hologres パス分析関数には、パス詳細関数とパスパース関数が含まれます。パス分析関数を使用すると、パス詳細を計算し、結果を効率的に解析できます。また、返されたデータをサンキー図に表示して、複雑なパス情報を視覚的に表示することもできます。このトピックでは、Hologres でパス詳細関数とパスパース関数を使用する方法について説明します。

背景情報

パス分析関数は、製品または機能を使用する際のパスの分布と各セッションのアクセスシーケンスを記録し、動作パスの直感的でわかりやすいサンキー図を生成します。サンキー図は、アクセスプロセスにおける各キーノードと、ノード間のインバウンドトラフィックとアウトバウンドトラフィックを表示します。これは、きめ細かいビジネス運用を促進します。パス分析関数は、製品の各主要機能へのアクセスを理解するのに役立ち、その後のビジネス戦略の最適化と製品の反復において、運用担当者と製品担当者をさらに支援します。Hologres は、パス詳細計算のためのパス詳細関数と、パス結果解析のためのパスパース関数をサポートしています。関数の戻り値は、サンキー図に直接表示できます。

使用上の注意

  • Hologres V2.2 以降では、パス分析関数がサポートされています。Hologres インスタンスのバージョンが V2.1 以前の場合は、Hologres テクニカルサポートに連絡してインスタンスをアップグレードできます。

  • パス分析関数を使用する前に、拡張機能を作成する必要があります。拡張機能はデータベースレベルで作成されます。データベースごとに、拡張機能を 1 回だけ作成する必要があります。

    -- 拡張機能を作成します。
    CREATE extension flow_analysis;
    説明

    データベースに重複する拡張機能を作成しないでください。

パス詳細関数

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 秒に設定し、隣接するイベントの間隔が 30 秒を超えると、システムはセッションを 2 つのセッションに分割します。

    path_depth

    bigint (リテラル)

    開始イベントまたは終了イベントからのイベント系列の長さ。

    path_offset

    bigint (リテラル)

    開始イベントまたは終了イベントからのイベントオフセット。0 はオフセットなしを指定します。

    たとえば、イベント a を開始イベントとして構成し、イベント系列 a、b、c のオフセットを 1 に設定すると、システムはイベント b からイベントマッチングを実行します。

    is_reverse

    bool (リテラル)

    イベント系列を逆時系列順で返すかどうかを指定します。有効な値:

    • false:指定された開始イベントから時系列順にイベント系列を返します。

    • true:指定された終了イベントから逆時系列順にイベント系列を返します。

    split_session_by_event

    bool (リテラル)

    イベントに基づいてセッションを分割するかどうかを指定します。有効な値:

    • true:順序付けられたイベント系列で指定された開始イベントまたは終了イベントに基づいてセッションを分割します。

    • false:session_interval_sec パラメーターの値のみに基づいてセッションを分割します。これがデフォルト値です。

      説明

      retentionPeriodHours parameter to 0, log data is retained indefinitely.session_interval_sec(セッション間隔(秒)) parameter を -1 に設定すると、システムは指定された開始イベントまたは終了イベントに基づいてセッションを分割します。

    たとえば、パス (イベント系列 a、b、c) がセッション内で 10 回繰り返されます。pad_funnel 関数は、このセッションのコンバージョンを 1 回だけ記録します。繰り返されるパスごとに新しいセッションとして記録し、セッションごとに 1 つのコンバージョンをカウントする場合は、このパラメーターを true に設定してセッションを分割できます。このように、繰り返されるパスごとに 1 つのセッションとして記録され、セッションごとに 1 つのコンバージョンがカウントされます。

  • 戻り値

    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 (リテラル)

    イベント系列。

  • 戻り値

    path_analysis_detail:TEXT 型の値が返されます。例:text []{"",\x01a\x01b<,\x01b\x01c<,""}

    説明

    戻り値はシリアル化された配列であり、直接読み取ることはできません。パスパース関数を使用して戻り値を読み取ることができます。

パスパース関数

pad_full_path

pad_full_path 関数は、path_analysis_detail 関数の戻り値に対して包括的なパースを実行できます。pad_full_path 関数は、フルパス、サブパス、および各イベントの時間消費も解析できます。これは、ビジネス担当者がパスをより直感的に観察するのに役立ちます。

  • 構文

    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:セッション ID。

  • 戻り値

    ARRAY 型の値が返されます。

データの準備

-- 拡張機能を作成します。拡張機能はデータベースレベルで作成されます。データベースごとに、拡張機能を 1 回だけ作成する必要があります。
CREATE extension flow_analysis;
-- データを準備します。
CREATE TABLE path_demo( 
    uid text,
    event text,
    event_time timestamptz
);

INSERT INTO path_demo VALUES
('1','登録','2023-11-24 16:01:23+08'),
('1','ログイン','2023-11-24 16:02:10+08'),
('1','閲覧','2023-11-24 16:02:15+08'),
('1','ライブストリームの視聴','2023-11-24 16:03:10+08'),
('1','閲覧','2023-11-24 16:03:15+08'),
('1','お気に入りに追加','2023-11-24 16:04:20+08'),
('1','閲覧','2023-11-24 16:07:21+08'),
('1','購入','2023-11-24 16:08:23+08'),
('1','終了','2023-11-24 16:09:05+08'),

('2','ログイン','2023-11-24 16:10:23+08'),
('2','購入','2023-11-24 16:12:23+08'),

('3','ログイン','2023-11-24 16:02:23+08'),
('3','閲覧','2023-11-24 16:02:23+08'),
('3','お気に入りに追加','2023-11-24 16:03:53+08'),
('3','ライブストリームの視聴','2023-11-24 16:04:53+08'),

('4','ログイン','2023-11-24 16:02:23+08'),
('4','閲覧','2023-11-24 16:03:53+08'),
('4','購入','2023-11-24 16:04:23+08'),
('4','ライブストリームの視聴','2023-11-24 16:05:53+08'),
('4','注文のキャンセル','2023-11-24 16:06:53+08');

例 1:すべてのイベントパスを取得する

  • 時間に基づいてセッションを分割する:開始イベントを指定し、session_interval_sec パラメーターを 180 秒に設定し、path_depth パラメーターを 7 に設定します。

    -- 時間に基づいてセッションを分割する:「ログイン」を開始イベントとして指定し、session_interval_sec パラメーターを 180 秒に設定し、path_depth パラメーターを 7 に設定し、pad_full_path 関数を使用して結果を解析します。
    SELECT uid, pad_full_path(path_analysis_detail(event, event_time, 'ログイン', 180, 7, 0, false)) AS ret FROM path_demo GROUP BY uid;

    次のコードは、返された結果を示しています。

     uid |                        ret
    -----+---------------------------------------------------
     3   | {ログイン -> お気に入りに追加 -> ライブストリームの視聴}
     4   | {ログイン -> 閲覧-> 購入 -> ライブストリームの視聴 -> 注文のキャンセル}
     1   | {ログイン -> 閲覧-> ライブストリームの視聴 -> 閲覧 -> お気に入りに追加}
     2   | {ログイン -> 購入}
    (4 rows)
  • 時間とイベントに基づいてセッションを分割する:開始イベントを指定し、session_interval_sec パラメーターを 180 秒に設定し、path_depth パラメーターを 7 に設定します。

    -- 時間とイベントに基づいてセッションを分割する:「閲覧」を開始イベントとして指定し、session_interval_sec パラメーターを 180 秒に設定し、path_depth パラメーターを 7 に設定し、pad_full_path 関数を使用して結果を解析します。
    SELECT uid, pad_full_path(path_analysis_detail(event, event_time, '閲覧', 180, 7, 0, false,TRUE)) AS ret FROM path_demo GROUP BY uid;

    次のコードは、返された結果を示しています。

     uid |                            ret
    -----+-----------------------------------------------------------
     1   | {閲覧 -> ライブストリームの視聴, 閲覧 -> お気に入りに追加, 閲覧 -> 購入 -> 終了}
     2   | {}
     4   | {閲覧 -> 購入 -> ライブストリームの視聴 -> 注文のキャンセル}
     3   | {閲覧 -> ログイン -> お気に入りに追加 -> ライブストリームの視聴}

例 2:パス結果を展開する

-- パスを展開します。
SELECT uid, unnest(pad_full_path(path_analysis_detail(event, event_time, 'ログイン', 180, 7, 0, false))) AS ret FROM path_demo GROUP BY uid;
説明

UNNEST 句の詳細については、「UNNEST 句」をご参照ください。

次のコードは、返された結果を示しています。

 uid |                       ret
-----+-------------------------------------------------
 3   | ログイン -> お気に入りに追加 -> ライブストリームの視聴
 1   | ログイン -> 閲覧 -> ライブストリームの視聴 -> 閲覧 -> お気に入りに追加
 2   | ログイン -> 購入
 4   | ログイン -> 閲覧 -> 購入 -> ライブストリームの視聴 -> 注文のキャンセル
(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, 'ログイン', 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 |               | ログイン         |             -1 |               0 |        0
 1   |          0 | ログイン        | 閲覧         |              0 |               1 |        5
 1   |          0 | 閲覧        | ライブストリームの視聴      |              1 |               2 |       55
 1   |          0 | ライブストリームの視聴     | 閲覧         |              2 |               3 |        5
 1   |          0 | 閲覧        | お気に入りに追加         |              3 |               4 |       65
 2   |          0 |               | ログイン         |             -1 |               0 |        0
 2   |          0 | ログイン        | 購入         |              0 |               1 |      120
 3   |          0 |               | ログイン         |             -1 |               0 |        0
 3   |          0 | ログイン        | お気に入りに追加         |              0 |               1 |       90
 3   |          0 | お気に入りに追加        | ライブストリームの視聴      |              1 |               2 |       60
 4   |          0 |               | ログイン         |             -1 |               0 |        0
 4   |          0 | ログイン        | 閲覧         |              0 |               1 |       90
 4   |          0 | 閲覧        | 購入         |              1 |               2 |       30
 4   |          0 | 購入        | ライブストリームの視聴      |              2 |               3 |       90
 4   |          0 | ライブストリームの視聴     | 注文のキャンセル   |              3 |               4 |       60
(15 rows)

例 4:特定のセッションのイベント系列を取得する

SELECT
    uid,
    pad_session_path_array (path_analysis_detail (event, event_time, 'ログイン', 180, 7, 0,FALSE), 0) AS ret
FROM
    path_demo
GROUP BY
    uid;

次のコードは、返された結果を示しています。

 uid |                      ret
-----+-----------------------------------------------
 1   | {ログイン,閲覧,ライブストリームの視聴,閲覧,お気に入りに追加}
 2   | {ログイン,購入}
 3   | {ログイン,お気に入りに追加,ライブストリームの視聴}
 4   | {ログイン,閲覧,購入,ライブストリームの視聴,注文のキャンセル}
(4 rows)

例 5:重複排除なしで各サブパスの PV と UV を計算する

-- 重複排除なしで各サブパスのページビュー (PV) とユニークビジター (UV) を計算します。重複排除が必要な場合は、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, 'ログイン', 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 |               | ログイン         |     4
         1 | ログイン        | お気に入りに追加         |     1
         1 | ログイン        | 閲覧         |     2
         1 | ログイン        | 購入         |     1
         2 | お気に入りに追加        | ライブストリームの視聴      |     1
         2 | 閲覧        | ライブストリームの視聴      |     1
         2 | 閲覧        | 購入         |     1
         3 | ライブストリームの視聴     | 閲覧         |     1
         3 | 購入        | ライブストリームの視聴      |     1
         4 | 閲覧        | お気に入りに追加         |     1
         4 | ライブストリームの視聴     | 注文のキャンセル   |     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, 'ログイン', 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
---------------+----------------+------------
 お気に入りに追加        | ライブストリームの視聴      |  60.000000
 閲覧        | お気に入りに追加         |  65.000000
 閲覧        | ライブストリームの視聴      |  55.000000
 閲覧        | 購入         |  30.000000
 ログイン        | お気に入りに追加         |  90.000000
 ログイン        | 閲覧         |  47.500000
 ログイン        | 購入         | 120.000000
 ライブストリームの視聴     | 注文のキャンセル   |  60.000000
 ライブストリームの視聴     | 閲覧         |   5.000000
 購入        | ライブストリームの視聴      |  90.000000
               | ログイン         |   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, 'ログイン', 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 | ログイン -> お気に入りに追加 -> ライブストリームの視聴                       |               | ログイン         |       0 |        0
 3   |          0 | ログイン -> お気に入りに追加 -> ライブストリームの視聴                       | ログイン        | お気に入りに追加         |       1 |       90
 3   |          0 | ログイン -> お気に入りに追加 -> ライブストリームの視聴                       | お気に入りに追加        | ライブストリームの視聴      |       2 |       60
 1   |          0 | ログイン -> 閲覧 -> ライブストリームの視聴 -> 閲覧 -> お気に入りに追加       |               | ログイン         |       0 |        0
 1   |          0 | ログイン -> 閲覧 -> ライブストリームの視聴 -> 閲覧 -> お気に入りに追加       | ログイン        | 閲覧         |       1 |        5
 1   |          0 | ログイン -> 閲覧 -> ライブストリームの視聴 -> 閲覧 -> お気に入りに追加       | 閲覧        | ライブストリームの視聴      |       2 |       55
 1   |          0 | ログイン -> 閲覧 -> ライブストリームの視聴 -> 閲覧 -> お気に入りに追加       | ライブストリームの視聴     | 閲覧         |       3 |        5
 1   |          0 | ログイン -> 閲覧 -> ライブストリームの視聴 -> 閲覧 -> お気に入りに追加       | 閲覧        | お気に入りに追加         |       4 |       65
 2   |          0 | ログイン -> 購入                                  |               | ログイン         |       0 |        0
 2   |          0 | ログイン -> 購入                                  | ログイン        | 購入         |       1 |      120
 4   |          0 | ログイン -> 閲覧 -> 購入 -> ライブストリームの視聴 -> 注文のキャンセル |               | ログイン         |       0 |        0
 4   |          0 | ログイン -> 閲覧 -> 購入 -> ライブストリームの視聴 -> 注文のキャンセル | ログイン        | 閲覧         |       1 |       90
 4   |          0 | ログイン -> 閲覧 -> 購入 -> ライブストリームの視聴 -> 注文のキャンセル | 閲覧        | 購入         |       2 |       30
 4   |          0 | ログイン -> 閲覧 -> 購入 -> ライブストリームの視聴 -> 注文のキャンセル | 購入        | ライブストリームの視聴      |       3 |       90
 4   |          0 | ログイン -> 閲覧 -> 購入 -> ライブストリームの視聴 -> 注文のキャンセル | ライブストリームの視聴     | 注文のキャンセル   |       4 |       60
(15 rows)

例 8:指定されたパスの詳細を表示する

-- pad_tunnel 関数を使用して、指定されたパスの詳細を表示できます。この例では、閲覧 > 購入パスの詳細またはサブパス情報がクエリされます。
SELECT uid, pad_full_path(pad_funnel(path_analysis_detail(event, event_time, 'ログイン', 180, 7, 0, false), array['ログイン', '購入'])) AS ret FROM path_demo GROUP BY uid;

次のコードは、返された結果を示しています。

 uid |       ret
-----+------------------
 3   | {ログイン}
 4   | {ログイン -> 購入}
 1   | {ログイン}
 2   | {ログイン -> 購入}
(4 rows)