ストリーム問合せ構文
概要
ストリーム・ラボおよびアクション・センターでは、ストリーム問合せを使用して、特定のニーズに合わせてストリームを調整できます。ストリーム問合せは、ストリームに含めるデータやデータを照合する必要がある条件などを指定できる点で、SQLと似ています。ストリーム問合せの詳細を示すリファレンスと、これらの問合せによって強力なアナリティクスとデータ・パイプラインを活用できるようにするユース・ケースを次に示します。
問合せ形式:
ストリーム問合せは、次の形式で構成されます。
SELECT <select criteria> WHERE <where criteria> HAVING <having criteria>
Select条件 - 必須
select条件は、メッセージに含める値のカンマ区切りのリストです。
Select条件のタイプ | 例 | 動作 | 選択の適用先 | ノート |
基本セグメント | data.wt.ti
|
現在のイベントに存在する場合、パラメータが送信メッセージに含められます | WHERE条件に一致する場合は、現在のイベント | |
---|---|---|---|---|
基本的な接頭辞ワイルドカード | data.*
|
現在のイベント内でフィルタに一致するすべてのパラメータが送信メッセージに含められます
|
WHERE条件に一致する場合は、現在のイベント | |
すべてのワイルドカード | *
|
現在のイベント内のすべてのパラメータが送信メッセージに含められます | WHERE条件に一致する場合は、現在のイベント | |
任意のセレクタ | ANY(data.wt.ti)
|
セッションから単一のイベント値を含めます。具体的にどの値が返されるかは関係ありません | WHERE条件に一致する場合、現在のイベントまたはパラメータを含むセッション内の他のイベント。 | ワイルドカードはサポートされません |
最初のセレクタ | EARLIEST(data.wt.ti)
|
パラメータを含むセッション内の最初のイベントの値を含めます | HAVING条件に一致するすべてのイベント | ワイルドカードはサポートされません |
nullを含む最初 | EARLIEST_INCLUDE_NULL(data.wt.ti)
|
存在する場合、評価されたセッション内の最初のイベントの値を含めます | HAVING条件に一致するすべてのイベント | ワイルドカードはサポートされません |
カウント・セレクタ | COUNT(data.wt.ti)
|
指定されたキーの値を持つセッション内のイベント数を含めます | HAVING条件に一致するすべてのイベント | ワイルドカードはサポートされません |
重複を除くカウント | COUNT_DISTINCT(data.wt.ti)
|
指定されたキーの一意の値の数を含めます | HAVING条件に一致するすべてのイベント |
ワイルドカードはサポートされません。一致では大/小文字は区別されません |
すべてカウント | EVENT_COUNT()
|
評価されたイベント数を含めます | HAVING条件に一致するすべてのイベント | ワイルドカードはサポートされません |
最後のセレクタ | LATEST(data.wt.ti)
|
最後に検出された値を含めます | HAVING条件に一致するすべてのイベント | ワイルドカードはサポートされません |
nullを含む最後 | LATEST_INCLUDE_NULL(data.wt.ti)
|
存在する場合、最後に評価されたイベントの値を含めます | HAVING条件に一致するすべてのイベント | ワイルドカードはサポートされません |
連結 | CONCAT(data.wt.ti, ';')
|
指定されたセパレータを使用して単一の文字列に連結された、指定されたキーのすべての値を含めます | HAVING条件に一致するすべてのイベント |
ワイルドカードはサポートされません。セパレータには、複数の文字からなる文字列を使用できます 順序および大/小文字が維持されます |
重複を除く連結 | CONCAT_DISTINCT(data.wt.ti, ',')
|
指定されたセパレータを使用して単一の文字列に連結された、指定されたキーのすべての個別値を含めます | HAVING条件に一致するすべてのイベント |
ワイルドカードはサポートされません。セパレータには、複数の文字からなる文字列を使用できます。順序および大/小文字が維持されます。一意性を判別する際には大/小文字は区別されません。あるイベントの値がAaAで、次のイベントの値がaAaの場合、個別値のリストにはAaAのみが含められます |
likeを除く最後 |
|
検出された値のうち、LIKE式に一致しない最後の値を含めます | HAVING条件に一致するすべてのイベント |
単一の一致式のみがサポートされます。 LIKE演算子でサポートされているすべての構文を使用できます |
likeを含む最後 | LATEST_INCLUDE_LIKE(data.wt.ti, '*a*')
|
検出された値のうち、LIKE式に一致する最後の値を含めます | HAVING条件に一致するすべてのイベント |
単一の一致式のみがサポートされます。 LIKE演算子でサポートされているすべての構文を使用できます |
likeを除く最初 | EARLIEST_EXCLUDE_LIKE(data.wt.ti, '')
|
検出された値のうち、LIKE式に一致しない最初の値を含めます | HAVING条件に一致するすべてのイベント |
単一の一致式のみがサポートされます。 LIKE演算子でサポートされているすべての構文を使用できます |
likeを含む最初 | EARLIEST_INCLUDE_LIKE(data.wt.ti, 'abc')
|
検出された値のうち、LIKE式に一致する最後の値を含めます | HAVING条件に一致するすべてのイベント |
単一の一致式のみがサポートされます。 LIKE演算子でサポートされているすべての構文を使用できます |
別名 - オプション
select条件では、 <selection>
AS '<alias>
'という形式のオプションの別名を受け入れることができます。
<selection>
には、ワイルドカードを使用しない、前述の表の任意の条件を指定でき、<alias>
には任意の文字列を指定できます
たとえば:
SELECT session.visitor_id AS 'visitor.id', session.session_id as 'visitor.session', EARLIEST(data.wt.cg_n) AS 'content.group.first', LATEST(data.wt.cg_n) AS 'content.group.last'
次のメッセージが生成されます。
{
"meta": {
"schema_version": "3.0",
"api_version": "3.0",
"message_type": "session_update",
"stream_type": "session_all"
},
"content": {
"group": {
"first": [
"Shop Maxymised"
],
"last": [
"Cart"
]
}
},
"visitor": {
"id": "1348447491483863571",
"session": "1532364415416010076"
}
}
Where条件 - オプション
WHERE
条件では、ストリーム・メッセージが生成されるかどうか、またいつ生成されるかを定義します。イベントがセッションに追加されると、この条件と比較され、trueと評価された場合は更新メッセージが生成されます。
WHERE
句が指定されていない場合、セッションにイベントが追加されるたびに更新メッセージが生成され、セッションがクローズされたときにクローズ・メッセージも生成されます。
現在処理中のイベントのみでなく、セッション内のすべてのイベントを評価する場合は、ALL
およびANY
演算子を使用します。
ノート: 別名およびSelect条件はメッセージの送信時にのみ使用され、問合せ内のWHERE
(またはHAVING
)句では使用できません。
たとえば、次の構文はサポートされません。
- Select data.wt.ti as 'A' where 'A" = 'B'
- Select * where earliest(data.wt.ti) = 'B'
- Select count(data.wt.ti) where count(data.wt.ti) >= 1
- Select event_count() where event_count() >= 1
Where条件のタイプ | 例 | 動作 | スコープ | ノート |
次と等しい | data.wt.ti='title'
|
指定した値と完全に一致するパラメータが存在する場合に、メッセージが送信されます。 | 該当なし |
ワイルドカードはサポートされません 一致では大/小文字は区別されません |
---|---|---|---|---|
存在する | Exists(data.wt.ti)
|
値にかかわらず、パラメータが存在する場合にメッセージが送信されます | 単一イベントのみ |
ワイルドカードはサポートされません 一致では大/小文字は区別されません |
存在しない | NotExists(data.wt.ti)
Not_Exists(data.wt.ti) |
パラメータが存在しない場合にメッセージが送信されます | 単一イベントのみ |
ワイルドカードはサポートされません 一致では大/小文字は区別されません |
等しくない | data.wt.ti!='title'
|
パラメータが存在しないか、指定した値と完全に一致しない場合にメッセージが送信されます。 | 該当なし |
ワイルドカードはサポートされません 一致では大/小文字は区別されません |
類似 | data.wt.ti LIKE 't*'
|
指定した値と一致するパラメータが存在する場合に、メッセージが送信されます。 | 該当なし | 一致では大/小文字は区別されません |
類似ではない |
|
パラメータが存在しないか、指定した値と一致しない場合にメッセージが送信されます。 | 該当なし |
一致では大/小文字は区別されません 受入可能: "NOT_LIKE"または"NOTLIKE" |
すべて | ALL(data.wt.cg_n = 'cg1')
|
セッション内のすべてのイベントで指定した値を持つパラメータが存在する場合に、メッセージが送信されます | セッション内のすべてのイベント |
一致では大/小文字は区別されません セッション内のすべてのイベント |
すべて | ANY(data.wt.cg_n = 'cg1')
|
セッション内の少なくとも1つのイベントで指定した値を持つパラメータが存在する場合に、メッセージが送信されます | セッション内のすべてのイベント |
一致では大/小文字は区別されません セッション内のすべてのイベント |
より小さい | data.wt.tx_u < 3
|
指定した値と一致するパラメータが存在する場合に、メッセージが送信されます。 | 該当なし | 数値のみ |
以下 | data.wt.tx_u <= 3
|
指定した値と一致するパラメータが存在する場合に、メッセージが送信されます。 | 該当なし | 数値のみ |
より大きい | data.wt.tx_u > 3
|
指定した値と一致するパラメータが存在する場合に、メッセージが送信されます。 | 該当なし | 数値のみ |
以上 | data.wt.tx_u >= 3
|
指定した値と一致するパラメータが存在する場合に、メッセージが送信されます。 | 該当なし | 数値のみ |
OR | data.wt.tx_u < 3
OR
|
いずれかの句に指定した値と一致するパラメータが存在する場合に、メッセージが送信されます | 該当なし | |
AND |
AND
|
すべての句に指定した値と一致するパラメータが存在する場合に、メッセージが送信されます | 該当なし |
Having条件 - オプション
HAVING
句では、セッション・レベルのデータを問い合せるときに、セッション内のどのイベントを含めるかを定義します。
HAVING
句では、どのイベントをメッセージに含める必要があるかが決定され、一方WHERE
句では、メッセージを送信する必要があるかどうかが決定されるという点で、HAVING
句はWHERE
句と異なります。
HAVING
句は、次に示すセッション・レベル・セレクタを使用した選択にのみ適用されることに注意してください。
Having句のセレクタ |
---|
CONCAT |
CONCAT_DISTINCT |
COUNT |
COUNT_DISTINCT |
EARLIEST |
EARLIEST_INCLUDE_NULL |
EVENT_COUNT() |
LATEST |
LATEST_INCLUDE_NULL |
たとえば、次のようなselect文があるとします。
SELECT data.wt.ti AS 'current_page_title', CONCAT_DISTINCT(data.wt.ti, ',') AS 'all_phone_page_titles' HAVING data.wt.ti like '*phones*'
WHERE
句がないため、すべてのイベントでメッセージが送信されます。
data.wt.ti
の値は、HAVING句と一致するかどうかにかかわらず、存在する場合はすべてのイベントでcurrent_page_titleとして送信されます。これは、この文でセッション・レベル・セレクタが使用されていないためです。
all_phone_page_titlesにはCONCAT_DISTINCT
のセッション・レベル・セレクタが使用されているため、すべてのイベントからのHAVING句に一致するすべての個別値もすべてのメッセージに含められます。
たとえば:
{
"meta": {
"schema_version": "3.0",
"api_version": "3.0",
"message_type": "session_update",
"stream_type": "session_all"
},
"all_phone_page_titles": "Google Phones,Samsung Phones",
"current_page_title": "SLR Cameras"
}
HAVING
句が指定されていない場合、セッション・レベルのデータを選択すると、セッション内のすべてのイベントが含められます。
HAVING
の演算子は基本的にはWHERE
と同じですが、HAVING
句ではALLおよびANYを使用できません。また、WHERE
句と同様に、別名およびSelect条件はサポートされません。
Having条件のタイプ | 例 | 動作 | スコープ | ノート |
次と等しい | data.wt.ti='title'
|
指定した値と完全に一致するパラメータが存在する場合に、選択したデータにイベントが含められます。 | セッション内のすべてのイベントがスキャンされて、一致が検出されます |
ワイルドカードはサポートされません 一致では大/小文字は区別されません |
---|---|---|---|---|
存在する | Exists(data.wt.ti)
|
値にかかわらず、パラメータが存在する場合に選択したデータにイベントが含められます | セッション内のすべてのイベントがスキャンされて、一致が検出されます |
ワイルドカードはサポートされません 一致では大/小文字は区別されません |
存在しない |
|
パラメータが存在しない場合に、選択したデータにイベントが含められます | セッション内のすべてのイベントがスキャンされて、一致が検出されます |
ワイルドカードはサポートされません 一致では大/小文字は区別されません |
等しくない | data.wt.ti!='title'
|
パラメータが存在しないか、指定した値と完全に一致しない場合に、選択したデータにイベントが含められます。 |
セッション内のすべてのイベントがスキャンされて、一致が検出されます |
ワイルドカードはサポートされません 一致では大/小文字は区別されません |
類似 | data.wt.ti LIKE 't*'
|
指定した値と一致するパラメータが存在する場合に、選択したデータにイベントが含められます。 | セッション内のすべてのイベントがスキャンされて、一致が検出されます | 一致では大/小文字は区別されません |
類似ではない |
|
パラメータが存在しないか、指定した値と一致しない場合に、選択したデータにイベントが含められます。 | セッション内のすべてのイベントがスキャンされて、一致が検出されます | 一致では大/小文字は区別されません |
より小さい | data.wt.tx_u < 3
|
指定した値と一致するパラメータが存在する場合に、選択したデータにイベントが含められます。 | セッション内のすべてのイベントがスキャンされて、一致が検出されます | 数値のみ |
以下 | data.wt.tx_u <= 3
|
指定した値と一致するパラメータが存在する場合に、選択したデータにイベントが含められます。 | セッション内のすべてのイベントがスキャンされて、一致が検出されます | 数値のみ |
より大きい | data.wt.tx_u > 3
|
指定した値と一致するパラメータが存在する場合に、選択したデータにイベントが含められます。 | セッション内のすべてのイベントがスキャンされて、一致が検出されます | 数値のみ |
以上 | data.wt.tx_u >= 3
|
指定した値と一致するパラメータが存在する場合に、選択したデータにイベントが含められます。 | セッション内のすべてのイベントがスキャンされて、一致が検出されます | 数値のみ |
OR |
|
いずれかの句に指定した値と一致するパラメータが存在する場合に、選択したデータにイベントが含められます | セッション内のすべてのイベントがスキャンされて、一致が検出されます | |
AND |
|
すべての句に指定した値と一致するパラメータが存在する場合に、選択したデータにイベントが含められます | セッション内のすべてのイベントがスキャンされて、一致が検出されます |