tools-and-features-hogql について
PostHog 分析用の HogQL クエリを作成するためのリファレンススキルです。クエリを構築・調整する開発者向けに、構文の説明と再利用できるパターンを関連ドキュメントとともに提供します。
主な機能
- 01HogQL のプロパティアクセスを説明
- 02式と集計関数を網羅
- 03イベントとプロパティのクエリ例
- 04変数、セッション、関数を解説
- 05フィルターと期間の指定を案内
活用シーン
- 01イベント内訳クエリの作成
- 02フィルター付きダッシュボードクエリの構築
- 03セッションや変数の構文確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ posthog/ skills --skill tools-and-features-hogqlインストール後、Claude Code で/tools-and-features-hogqlを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/aggregations.mdclickhouse-functions.mddata-access.mdexpressions.mdposthog.mdsessions.mduseful-functions.mdvariables.md詳細
PostHog の HogQL クエリ
このスキルでは、PostHog の分析に使う HogQL クエリの作成方法を説明します。HogQL は PostHog の SQL 方言で、ClickHouse SQL をベースに、プロパティへのアクセスを簡略化し、PostHog 固有の関数を追加したものです。
参考ファイル
references/expressions.md- SQL 式 - ドキュメントreferences/aggregations.md- サポートされている集計 - ドキュメントreferences/clickhouse-functions.md- サポートされている ClickHouse 関数 - ドキュメントreferences/data-access.md- SQL を使ったデータへのアクセス - ドキュメントreferences/variables.md- SQL 変数 - ドキュメントreferences/useful-functions.md- 便利な SQL 関数 - ドキュメントreferences/posthog.md- PostHog のテーブルスキーマ(イベント、人物、グループ、セッション)references/sessions.md- セッション - ドキュメント
SQL の構文、利用可能な関数、クエリのパターンについては、ドキュメントを参照してください。
主な原則
- プロパティへのアクセス:イベントプロパティには
properties.$property_name、人物プロパティにはperson.properties.$property_nameを使います - NULL の処理:HogQL では、生の ClickHouse SQL と比べて NULL の処理が簡略化されています
- フィルターのプレースホルダー:PostHog のダッシュボードで UI によるフィルタリングを可能にするには、クエリで
{filters}を使います - 集計:
count()、uniq()、avg()、sum()などの ClickHouse の集計関数を優先します
よく使われるパターン
イベントクエリ
SELECT event, count()
FROM events
WHERE {filters}
GROUP BY event
ORDER BY count() DESC
プロパティ別の内訳
SELECT properties.$browser AS browser, count()
FROM events
WHERE event = '$pageview' AND {filters}
GROUP BY browser
人物プロパティ
SELECT person.properties.email, count()
FROM events
WHERE {filters}
GROUP BY person.properties.email
フレームワークのガイドライン
- イベントプロパティには
properties.$name、人物プロパティにはperson.properties.$nameの構文を使います properties['$feature/cool-flag']のように、特殊文字にはブラケット記法を使います- コホートを指定するには、
person_id IN COHORT 'cohort-name'でフィルタリングします - アクションには、WHERE 句で
matchesAction('action-name')を使います - ダッシュボードで UI によるフィルタリングを有効にするには、WHERE 句に
{filters}のプレースホルダーを含めます - ダッシュボード全体で再利用する SQL 変数には、
{variables.name}を使います - ダッシュボードの日付範囲には、
{filters.dateRange.from}と{filters.dateRange.to}でアクセスします - 必ず時間範囲でフィルタリングします。範囲が短いほど高速です(例:
timestamp >= now() - INTERVAL 7 DAY) - 一意の値を数える場合は、
count(distinct)より効率的なuniq()を優先します - 同じテーブルを複数回スキャンしないでください。再利用するサブセットにはマテリアライズドビューを使います
- 大規模なデータセットでは、OFFSET ではなくタイムスタンプベースのページネーションを使います
- query_log でデバッグしやすいよう、クエリには内容がわかる名前を付けます
- 時間単位でグループ化するには、
dateTrunc()を使います(例:dateTrunc('day', timestamp)) - ファネルクエリには、
windowFunnel()またはsequenceMatch()関数を使います - インサイトや API で使う前に、PostHog の SQL エディターでクエリをテストします
コメント
Markdown 対応