karte_eventテーブルは、KARTEのタグや接客サービスなどから発生した「イベント」のログが格納されているテーブルです。
イベントテーブルは日付ごとにパーティションされています。
※ クエリv1は、2025年2月までのご契約プロジェクトで利用可能です。2025年3月以降のご契約については、クエリv2のみの提供となります。
テーブル範囲の指定
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 |
|---|
| sync_date |
🚧 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.680Zis_visitor
true,falsevalues
後述
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 |
📘 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 |
|---|
| message.campaign_id |
📘 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キーを入れてください