入力
この文は、例で使用するクリックストリーム データの入力テーブルを作成します。
CREATE MULTISET TABLE clicks1 ( userid INTEGER, sessionid INTEGER, pageid INTEGER, category INTEGER, ts TIMESTAMP FORMAT 'YYYY-MM-DDbHH:MI:SS', referrer VARCHAR (256), val FLOAT ) PRIMARY INDEX ( userid );
この文は、各行のpageidとシーケンスで次の行のpageidを取得します。
SELECT dt.sessionid, dt.pageid, dt.next_pageid FROM nPath (
ON clicks1 PARTITION BY sessionid ORDER BY ts
USING
Mode (OVERLAPPING)
Pattern ('A.B')
Symbols (TRUE AS A, TRUE AS B)
Result (
FIRST(sessionid OF A) AS sessionid,
FIRST (pageid OF A) AS pageid,
FIRST (pageid OF B) AS next_pageid
)
) AS dt;
例: シーケンスで先行する行のカウント
行ごとに、この呼び出しは、あるシーケンスで先行する行の数をカウントします(現在の行を含む)。開始行より前の行でパターンを一致させる必要があるためORDER BY句ではDESCを指定し、一方でセマンティクスでは開始行より後の行でパターンが一致するように指示します。
SELECT dt.sessionid, dt.pageid, dt.countrank FROM nPath (
ON clicks1 PARTITION BY sessionid ORDER BY ts DESC
USING
Mode (OVERLAPPING)
Pattern ('A*')
Symbols (TRUE AS A)
Result (
FIRST (sessionid OF A) AS sessionid,
FIRST (pageid OF A) AS pageid,
COUNT (* OF A) AS countrank
)
) AS dt;
例: 複雑なパスのクエリー
このクエリーは、pageid 50で始まりpageid 80に進むかあるいはカテゴリ9またはカテゴリ10内のページに進むユーザー クリック パスを検索し、パス内の最後のページのpageidを検索し、ページ80への閲覧数をカウントし、最後のページごとに最大カウントを返して、出力をソートします。このクエリーでは、5ページより少ないパスと、カテゴリがゼロ未満のページは無視されます。
SELECT dt.last_pageid, MAX(dt.count_page80) FROM nPath (
ON (SELECT * FROM clicks1 WHERE category >= 0)
PARTITION BY sessionid ORDER BY ts
USING
Pattern ('A.(B|C)*')
Mode (OVERLAPPING)
Symbols (
pageid = 50 AS A,
pageid = 80 AS B,
pageid <> 80 AND category IN (9,10) AS C
)
Result (
LAST(pageid OF ANY (A,B,C)) AS last_pageid,
COUNT (* OF B) AS count_page80,
COUNT (* OF ANY (A,B,C)) AS count_any
)
) AS dt WHERE dt.count_any >= 5
GROUP BY dt.last_pageid
ORDER BY MAX(dt.count_page80);