karte_eventテーブルへのクエリを作成する
karte_eventテーブルは、KARTEのタグや接客サービスなどから発生した「イベント」のログが格納されているテーブルです。
イベントテーブルは日付ごとにパーティションされています。
テーブル範囲の指定
FROM句にkarte_eventテーブルを指定する場合、BigQueryの記法とは異なるKARTE独自記法で記述する必要があります。
実際には、BigQueryの記法に置換された後でクエリ実行されます。
クエリを実行する対象日付の範囲指定は下記のように行います。
SELECT *
FROM {% karte_event '20181201', '20181203' %}
SELECT *
FROM {{ karte_event('20181201', '20181203') }}
- Period型のクエリパラメータを使う場合は、次のように記述してください
period:
type: period
label: 抽出期間
SELECT *
FROM {% karte_event period[0], period[1] %}
SELECT *
FROM {{ karte_event(period[0], period[1]) }}
なお、全期間を指定したい場合は次のように記述します。
※ クエリリソース消費量が大きいため、全期間を指定したクエリの実行には十分に注意してください。
SELECT
*
FROM {% karte_event_all %}
BigQueryの関数を使ってテーブル範囲を指定したい場合
- クエリv2で、BigQueryの関数を使って期間を絞り込みたい場合は、次のように記述してください
SELECT
*
FROM {% karte_event_all %} AS t
WHERE
-- クエリv2 で {% karte_event_all %} を使って karte_event テーブルを呼び出した場合にのみ、
-- 日付別テーブルの _TABLE_SUFFIX が、 TABLE_SUFFIX という名前で出力されます
-- TABLE_SUFFIX による絞り込みを行わないと、全期間のデータを読み込むため、クエリリソースの使用量にご注意ください
t.TABLE_SUFFIX >= FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 3 DAY))
-- 例: period型パラメータで指定した期間よりも終了日を1日分多く指定する
SELECT
sync_date
, {{period[0]}} AS period_0
, FORMAT_DATE("%Y%m%d", DATE_ADD(PARSE_DATE("%Y%m%d", {{period[1]}}), INTERVAL 1 DAY)) AS period_1
FROM {% karte_event_all %} AS t
WHERE
t.TABLE_SUFFIX >= {{period[0]}}
AND t.TABLE_SUFFIX <= FORMAT_DATE("%Y%m%d", DATE_ADD(PARSE_DATE("%Y%m%d", {{period[1]}}), INTERVAL 1 DAY))
ORDER BY sync_date DESC
karte_eventテーブルの分割単位について
karte_eventテーブルは、UTC(協定世界時)ベースの日付単位で分割されています。
karte_event
の引数として指定する日付指定についても、UTCベースの日付として解釈されます。
別のタイムゾーンについて特定期間のデータを抽出する場合は、1日分長く指定した上で、WHERE句で絞り込んでください。
スキーマ
karte_eventテーブルのスキーマ
field name | display name | description |
---|---|---|
sync_date | 送信日時 | タイムスタンプタイプのイベントデータが同期された日時です。タイムスタンプタイプ自体はタイムゾーンを持っていませんが、タイムスタンプタイプの値を表示した際には視認性のために特定のタイムゾーンに応じた時刻として表示されデフォルトではUTCとして表示されます。任意のタイムゾーンに変換したい場合はTIMESTAMP()等をご利用ください。 |
user_id | ユーザーID | ユーザータグで連携されたユーザーIDです。ID連携前のユーザー(ビジター)については、基本的にはビジターIDの先頭に"vis-"を付加した値が格納されます。 |
visitor_id | ビジターID | ブラウザ毎に付与されるIDです。Webのユーザーについては、cookieに記録されます。 |
session_id | セッションID | セッション毎に付与されるIDです。 |
event_name | イベント名 | イベントの名前です。 |
values | イベント値 | イベントの値です。JSON形式で格納されています。 |
shorten_segments | 短縮セグメントID | イベント発生時点の短縮セグメントIDのリストです。 |
scores | スコア | イベント発生時点の各スコアの値です。JSON形式で格納されています。 |
is_visitor | ビジターフラグ | ユーザーIDがタグで連携されていない(メンバー化していない)ユーザーの場合、trueになります。 |
source | イベント発生ソース | イベントが発生した場所の種類を示す文字列(web , native_app_webview , native_app_sdk )が入ります。 |
event_hash | イベントハッシュ | イベントごとに付与されるハッシュ値です。一意であることを保証しているものではありません。sync_date などの他のフィールドと組み合わせることで、一意なフィールドを生成することが可能です。 |
user_fields | 「作成したディメンション」の値 | 「作成したディメンション」のイベント発生時点の値です。JSON形式で格納されています。 ディメンションと値の対応については、ディメンション詳細画面に表示される「レポート用ID」をご覧ください。 |
dimensions.* | 「インストールしたディメンション」の値 | 「インストールしたディメンション」のイベント発生時点の値です。 ディメンションと値の対応については、ディメンション詳細画面に表示される「レポート用キー」をご覧ください。 |
processor | 解析処理の種類 | イベントにどの解析処理が行われたかを示す文字列が入ります。 default値は null (リアルタイム解析を行う)です。"ingest" の場合はセグメント等の解析を行わず、基本情報のみ書き込まれたことを示します。 |
sync_dateのタイムゾーンについて
KARTEのイベントデータには、sync_date(送信日時)が自動で付加されます。KARTEのセグメント設定画面などでは日本時間に変更されていますが、内部的にはUTC(協定世界時)での時刻です。そのため、JST(日本標準時)に変換する際には、+9時間してください。
karte_eventテーブルのレコード重複について
KARTEに対して送信されたイベントデータは、karte_eventテーブルに対して非同期で書き込まれます。この際、処理のリトライなどによって極稀に同じ内容のイベントが複数回書き込まれてしまうケースがあります。その場合、重複書き込みされたレコードはevent_hashが同一になります。
こうしたレコードの重複を除外して厳密な集計を実施したい場合は、event_hashが同一のレコードをクエリ内で重複削除してください。
karte_eventテーブルの値サンプル
sync_date
2018-06-05T10:27:36.680Z
is_visitor
true
,false
values
- 後述
event_name
"identify"
user_id
"k1234"
"vis-1234567890_1234567890123_123456789"
visitor_id
"1234567890_1234567890123_123456789"
session_id
"k1234_42"
shorten_segments
"kBE,1a2C"
scores
{"foo_score":0.99,"_karte_rank":5.091739579251029}
user_fields
{"1c3":42,"lRF":"foo","lVo":1552467212}
processor
null
"ingest"
valuesのスキーマ
タグのサンプル
以下のようなタグでfoo
イベントを発生させるケースを考えます。
tracker.track('foo', { bar: 42 });
valuesのサンプル
そのイベントのvaluesは、以下のようになります。
{
"foo": {
"bar": 42,
"_source": "web",
"_session": {
"session_id#session": "k1234_42"
},
"date": 1528267862
},
"_keys": {
"api_key": "1234567890abcdef1234567890abcdef",
"user_id": "k1234",
"visitor_id": "1234567890_1234567890123_123456789",
"session_id": "k1234_42",
"is_visitor": false
},
"date": 1528267862,
"_name": "foo"
}
valuesの主なプロパティ
_keys.api_key | APIキー | イベント発生したKARTEプロジェクトのAPIキーです。 |
_keys.user_id | ユーザーID | - |
_keys.visitor_id | ビジターID | - |
_keys.session_id | セッションID | - |
_keys.is_visitor | ビジターフラグ | ユーザーIDがタグで連携されていない(メンバー化していない)ユーザーの場合、true になります。 |
_keys.pv_id | PV ID | viewイベント毎でIDが生成され、そのPVに紐づくイベントには同じIDが入ります。 ※フロントエンドで発生するイベントのみ含まれます ※pv_idはユーザーを超えて重複する可能性があります。JOINのキーに利用する場合はuser_idやsession_idなどと組み合わせてご利用ください |
_keys.original_pv_id | ORIGINAL PV ID | SPA(シングルページアプリケーション)でページ内遷移したときの元のページのPV_ID。 ※SPAでない場合は original_pv_id = pv_id となります |
{{event_name}}.{{property_name}} | イベントプロパティ値 | タグなどで発生させたイベントの各プロパティ値が格納されます。 |
{{event_name}}._source | イベントソース | イベントの発生源を示す文字列です。 |
{{event_name}}.date | イベント送信日時 | イベントが送信された日時です。 |
valuesのサンプル
_keys.api_key
"1234567890abcdef1234567890abcdef"
_keys.is_visitor
true
{{event_name}}._source
"web"
"native_app_sdk"
"native_app_webview"
"public_api"
"filter"
KARTEが発生させる主なイベントの主なプロパティ
KARTEが自動で発生させる主なイベントについて、valuesに含まれる主なイベントプロパティを紹介します。
なお、KARTEでよく発生するイベントの種類については、こちらのイベントリファレンスをご覧ください。
view(閲覧)イベント
field_name | display_name | description |
---|---|---|
access.os.all | OS情報 | アクセス時のOS情報です。 |
access.browser.all | ブラウザ情報 | アクセス時のブラウザ情報です。 |
access.user-agent | ユーザーエージェント | アクセス時のユーザーエージェントです。 |
access.language | 言語設定 | アクセス時の言語設定です。ブラウザ設定の言語タグを小文字変換した文字列が格納されています。 |
access.uri.url | 閲覧ページURL | 閲覧先ページのURLです。 |
access.title | 閲覧ページタイトル | 閲覧先ページのタイトルです。 |
viewイベントのvalues値サンプル
access.os.all
"Mac OS/10.13.4"
access.browser.all
"Chrome/66.0.3359.181"
access.user-agent
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"
access.language
"en-us"
access.uri.url
"https://example.com/"
message_open, message_click, message_closeイベントなど
field_name | display_name | description |
---|---|---|
message.campaign_id | 接客サービスID | 接客サービスのIDです。 |
message.shorten_id | 接客アクションID | 接客アクションのIDです。 ※未実施の場合は、 "__"+campaign_id といった形式の文字列になります。 |
message.is_cg | コントロールグループ(CG)フラグ | A/Bテストで未実施グループに割り当てられた場合に、true になります。 |
message_*イベントのvalues値サンプル
message.campaign_id
"ab1234567890bc1234567890"
message.shorten_id
"A0b"
message.is_cg
false
talk_message_send, message_replyイベントなど
field_name | display_name | description |
---|---|---|
app_name | TALKプラグイン名 | TALKメッセージ送信に利用しているTALKのプラグイン名です。 |
message_id | TALKメッセージID | TALKメッセージのIDです。 |
thread_id | TALKスレッドID | TALKスレッドのIDです。特にウェブチャットで、「対応中」から「対応済み」になるまでの間が1スレッドとして管理されます。 |
talk_message_send, message_replyイベントのvalues値サンプル
app_name
"webchat"
"push_apps"
"sendgrid"
"line"
"twilio"
message_id
"ab1234567890bc1234567890"
thread_id
"bc1234567890cd1234567890"
dimensions.referrer_urlの定義
dimensionsの中には、dimensions.referrer_urlという項目があります。基本的にはそのセッションのreferrer_urlが入りますが、同一セッション内で複数のreferrer_urlが送られた場合は、最新のものが入るようになっています。そのような場合、そのセッションの流入元ではなくなることもあります。
karte_eventテーブルの特別な仕様
karte_eventテーブルは他のテーブルと異なる点がいくつかあります。特に、Datahubのクエリエディタではなく外部サービス(外部BigQueryなど)からクエリを実行する場合に注意が必要です。
実際のテーブル名はkarte_eventテーブルではない
- 実体となるテーブル名は、
karte_event
ではなく、krt_pockyevent_v1_*
です - 外部サービスからクエリ実行する場合、FROM句のテーブル名指定では
krt_pockyevent_v1_*
を使ってください
karte_event
テーブルとkrt_pockyevent_v1_*
テーブルの違い
krt_pockyevent_v1_*
テーブルをkarte_event
テーブルとして参照する場合、一部のカラムが非公開となります。karte_event
テーブルとしては参照できないがkrt_pockyevent_v1_*
テーブルに存在するカラムについては、予告なく仕様が変更されることがあるため、利用しないことを推奨しています。
抽出期間を指定したクエリ実行方法
karte_event
テーブル(krt_pockyevent_v1_*
)は、UTCベースの日付単位で分割されています- Datahubクエリの以下の
karte_event
を使った期間指定方法は、SQLの文法を拡張したDatahub独自の記法となっています - 外部サービスからクエリ実行する場合、WHERE句で_TABLE_SUFFIXを用いて期間指定してください
-- Datahubクエリ
SELECT * FROM {{ karte_event('20210101', '20210102') }} /* クエリv1 */
SELECT * FROM {% karte_event '20210101', '20210102' %} /* クエリv2 */
-- 外部サービスからのクエリ
SELECT * FROM `karte-data.karte_stream_{{API_KEY}}.krt_pockyevent_v1_*`
WHERE _TABLE_SUFFIX BETWEEN '20210101' AND '20210102'
※ {{API_KEY}}
にはプロジェクトのAPIキーを入れてください
Updated 3 months ago