SQLクエリ
前述の分析モデルのほかに、SQLを使って分析モデルでは実現が難しい高度な分析を行い、現在のクラスター内のすべてのプロジェクトのデータを自由にクエリすることもできます。SQL IDEで価値のある内容が見つかった場合は、レポートとして保存し、他のモデルのレポートと同様にダッシュボードに表示することもできます。
SQLコード入力欄でクエリ文を記述する
AEシステムはTrinoクエリエンジンを使用しており、標準SQLでクエリ文を記述できます。最も簡単な例は次のとおりです:
SELECT
"$part_date"
, count(DISTINCT "#user_id")
FROM
ta.v_event_1
WHERE ("$part_date" BETWEEN '2023-01-01' AND '2023-01-07') AND ("$part_event" = 'login')
GROUP BY "$part_date"
ORDER BY "$part_date" ASC
記述する際は、次の点に注意してください:
- フィールド名は二重引用符
" "で囲んでください。省略することもできますが、クエリするフィールド名に特殊記号($、#など)が含まれる場合は、二重引用符で囲む必要があります - 文字列は必ず一重引用符
' 'で囲んでください SELECT文とWITH句を使用できます
クエリ文を記述する際は、「テーブル構造」の情報を参照して、テーブル名やテーブル内のフィールド名をコピーできます。また、「テーブル解析」を使って、すべてのフィールドを含むクエリ文を入力欄に自動で挿入することもできます。
現在のSQLコード入力欄の内容をブックマークとして保存し、書きかけの内容が失われないようにすることもできます。保存したブックマークは「ブックマーク」で確認できます。
クエリ文で動的な時間を使用したい場合や、クエリ文の一部を他のメンバーが動的に調整できるようにしたい場合は、動的パラメーターを追加することで実現できます。
他の分析モデルとは異なり、SQL IDEでは権限を持つすべてのプロジェクトのデータを使用できます。例えば、プロジェクト1とプロジェクト2のDAUを同時にクエリできます:
SELECT
a."$part_date"
, "Project_1_DAU"
, "Project_2_DAU"
FROM
((
SELECT
"$part_date"
, count(DISTINCT "#user_id") "Project_1_DAU"
FROM
ta.v_event_1
WHERE (("$part_date" BETWEEN '2023-01-01' AND '2023-01-07') AND ("$part_event" = 'login'))
GROUP BY "$part_date"
) a
INNER JOIN (
SELECT
"$part_date"
, count(DISTINCT "#user_id") "Project_2_DAU"
FROM
ta.v_event_2
WHERE (("$part_date" BETWEEN '2023-01-01' AND '2023-01-07') AND ("$part_event" = 'login'))
GROUP BY "$part_date"
) b ON (a."$part_date" = b."$part_date"))
ORDER BY a."$part_date" ASC
イベントテーブルとユーザーテーブルのほかに、クエリ文では次のデータも使用できます:
- タグコホート表:ta.user_result_cluster_{project_id}
- 履歴タグテーブル:ta.history_tag_{project_id}
- 履歴為替レートデータテーブル:ta_dim.ta_exchange
- 参照テーブル
- 一時的テーブル
クエリ文で次のデータを使用する必要がある場合は、担当のカスタマーサクセスマネージャーにお問い合わせください:
- ユーザーのデイリーミラーテーブル:毎日サーバーのタイムゾーンの0時に、AEシステムがその時点のユーザーの状態をバックアップします。デフォルトでは直近180日間のユーザーテーブルのミラーが保存され、SQL IDEで使用できます
- 二次開発ツールでカスタムテーブルをインポートする
- Trino Connectorsを利用して外部データソースを関連付ける
クエリ結果を確認してレポートとして保存する
「計算」ボタンをクリックすると、今回のSQLの実行結果を確認できます。詳細データは最大20000行まで表示されます。全データを確認する場合はCSVファイルをダウンロードしてください(最大100万行まで対応)。また、今回のクエリ結果を「一時的テーブル」として保存することもでき、一時的テーブルは後続のクエリで使用できます。
データの詳細を直接確認するほか、可視化モジュールで提供される折れ線グラフや円グラフなど、さまざまなグラフの種類でデータを表示することもできます。また、現在のクエリ文と可視化設定をレポートとして保存し、他のメンバーと共有することもできます。
他のモデルのレポートと同様に、SQLレポートでメンバーが確認できるデータもデータ権限の影響を受けます。例えば、iOSチャネルの権限しか持たないメンバーには、iOSチャネルのユーザーの行動データのみを含む結果が表示されます。
データ権限のほかに、SQLレポートにイベント権限を設定することもできます。選択したイベントの使用権限を持たないメンバーには、このレポートのデータは一切表示されません(図1)。
なお、クエリ文で他のプロジェクトのデータを使用しているかどうかにかかわらず、レポートは現在のプロジェクトにのみ保存されます。クエリ文に現在のプロジェクトに属さないテーブルが含まれる場合は、閲覧者がクエリに関係するすべてのプロジェクトの権限を持つ必要があるかどうかも確認してください(図2)。
SQLレポートのクエリ文は複雑になりがちなため、表示キャッシュを設定できます(図3)。計算が完了するとデータ結果がキャッシュされ、次回同じレポートをクエリするときはキャッシュされたデータ結果を直接読み込むため、再計算が不要になり、クラスターのリソースを節約できます。
ダッシュボードの定期更新はすべてのSQLレポートに適用され、どのように設定していても、ダッシュボードの定期更新時に計算されます。T+1以外のレポートのキャッシュを24時間に設定し、ダッシュボードの定期更新をオンにすれば、計算は1日1回で済みます。
クエリ文の実行時間が300秒を超える場合、そのレポートにはダッシュボードのキャッシュを設定する必要があり、手動で更新することはできません(ダッシュボードの定期更新は引き続き有効です)。クエリ文を最適化するか、クエリするデータの範囲を絞り込んで、クエリを高速化してください。

