LoginSignup
2
2

More than 5 years have passed since last update.

Vertica でパターンマッチングしてみる。

Posted at

Vertica とは

高速な分析が可能な列指向DB。

公式サイト

最近良く使うので便利だな〜〜〜これいいわ〜〜〜と思ったことを書いていきます。

やりたいこと

たとえば、
ECサイトでページビュー、コンバージョン(購入完了とか)を何かしらのログに出力していたとして、
そのログデータから、

  • コンバージョンしたユーザーのよく通るページビューの経路を抽出する。(例1)
  • コンバージョンしていないけど、コンバージョンしたユーザーとよく通るページビューの経路を抽出する。(例2)
  • コンバージョンしていないけど、コンバージョンしたユーザーとよく通るページビューの経路を抽出する。(例3)

(例1)
○ コンバージョン←ページA←ページB
○ コンバージョン←ページA←ページB←ページC
× コンバージョン←ページA←ページD←ページB
 ↓
 ページA←ページB の経路がよく通るページビューの経路

(例2)
○ (コンバージョンしてない←)ページA←ページB
○ (コンバージョンしてない←)ページA←ページB←ページC
× (コンバージョンしてない←)ページA←ページD←ページD
 ↓
 ページA←ページB の経路がよく通るページビューの経路

(例3)
○ (コンバージョンしてない←)ページA←ページB
× (コンバージョンしてない←)ページA←ページB←ページC
× (コンバージョンしてない←)ページA←ページD←ページD
 ↓
 ページA←ページB の経路がよく通るページビューの経路

やってみる

参考にした myVerticaのドキュメント

※ 最近は、「これ君のmyVerticaでどうにかならないかなぁ〜?」というのが口癖。

(例1)
・・・作業中

=> SELECT
    uid,
    sid,
    ts,
    refURL,
    pageURL,
    action,
    event_name(),
    pattern_id(),
    match_id()

FROM clickstream_log
MATCH
(PARTITION BY uid, sid ORDER BY ts
 DEFINE
    entry AS refURL NOT ILIKE '%website2.com%' AND pageURL
        ILIKE '%website2.com%',
    onsite as pageURL ILIKE '%website2.com%' and action='V',    
    purchase AS pageURL ILIKE '%website2.com%' AND
        action='P'
PATTERN P as (entry onsite* purchase)
ROWS MATCH FIRST EVENT);

(例2)
・・・作業中

(例3)
・・・作業中

課題

  • もっと簡単にできないか?
  • 複雑なパターンをもっと増やしてやってみてもこのSQLでいけるか?

APPENDIX

  • サンプルデータ
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2