5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アクセスログからセッションを作成する方法

Posted at

背景

ログ解析の分野において、セッション集計というのは主流でありますが、それを実現するには特定の業者のツールやルールによって集計されていることが多い。
なかなか自分でルールを決めて集計するということ以前は難しかったのですが、クエリで簡単に集計できるという手順を説明いたします。

準備  

今回もトレジャーデータの機能を利用して試してみます。
前回同様JavaScriptSDKでデフォルトで取得できるログを利用します。

  • 主に集計に利用するユーザ関数(UDF):TD_SESSIONIZE

    使い方はマニュアルを参考にしました。
  • やりたいこと

     - セッション集計をしてみる

     - セッションごとにユーザセグメントなどを作成してみる

では実際に実行してみましょう。

集計方法

集計したテーブルはトレジャーデータのResultOutput機能を利用して

データを書き出す。

  • 用意したログをセッションIDを付与する
    作成した集計テーブル:session
--hive
SELECT 
  TD_SESSIONIZE(time, 86400, td_ip) as session_id
, time
, td_ip
, td_path
, td_client_id
, td_title
, td_browser
, td_color
, td_os_version
, td_browser_version
, td_referrer 
, td_screen 
, td_os
, td_host 
, td_url
, td_language
FROM 
(
  SELECT time, td_ip, td_path, td_client_id, td_title
        ,td_browser, td_color, td_os_version
        ,td_browser_version, td_referrer, td_screen 
        ,td_os, td_host, td_url, td_language
  from access
  distribute by td_ip
  sort by td_ip,time
) a 



  • セッションIDごとに開始時間と終了時間を集計する
     (そのセッションが何PVかも一緒に出力)
    集計したテーブル名:session_summary
SELECT
   b.session_id as session_id
 , b.td_client_id as td_client_id
 , TD_TIME_FORMAT(b.session_start_time, 'yyyy-MM-dd HH:mm:ss', 'JST') as session_start_time
 , TD_TIME_FORMAT(b.session_end_time, 'yyyy-MM-dd HH:mm:ss', 'JST') as session_end_time
 , (b.session_end_time - b.session_start_time) as session_stay_time
 , b.session_cnt as session_cnt
FROM
(
SELECT
   a.session_id as session_id
 , a.td_client_id as td_client_id
 , min(a.time) as session_start_time
 , max(a.time) as session_end_time
 , count(1) as session_cnt
FROM
(
  SELECT 
    TD_SESSIONIZE(time, 86400, td_ip) as session_id
  , time
  , td_ip
  , td_path
  , td_client_id
  FROM (
    SELECT time, td_ip, td_path, td_client_id
    from access
    distribute by td_ip
    sort by td_ip,time
  ) t
) a
GROUP BY a.session_id,a.td_client_id
ORDER BY a.session_id
) b



  • 出力結果
session



  • やってみて思うこと
  • 1日分のログを集計単位とすれば、1日における一人のセッションに関して情報をまとめることが可能。
  • ipが同じものをセッションと定義し集約している。他の要素でもセッションが定義できそう。
    例えば、同じユーザエージェントであるという要素も加えることが可能。

簡単に作成できるので試してみてください。

5
8
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
5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?