Materials, Views, Result
すべての QAL クエリは3つの動く部品からできています。これらの関係が分かれば、言語の残りは自然に続きます。
Material — データ面
マテリアル は名前付きのデータ面で、粒度が固定されています。allpv は1行 = 1ページビュー。click_event は1行 = 1クリック。gsc は1行 = 1検索クエリ×1日。粒度はマテリアルの性質であって、クエリ時に選ぶものではありません。
ユーザーの質問に基づいてマテリアルを選びます。「検索から何セッション来たか?」なら、欲しいのは allpv (粒度 = 1ページビュー) と gsc (粒度 = 1検索クエリ) を JOIN したもので、click_event ではありません。
マテリアルは ai/materials.yaml に列挙されています。ここに無い名前は存在しません。
View — 名前付きの変換
ビュー はマテリアル(または別のビュー)の上に作られた名前付きの変換です。「このソースからこれらのカラムを残し、これらのフィルタをかけて、これを JOIN して、これを集計して、この列でソートする」ということを宣言します。
1つの make ブロックに複数のビューを定義できます。ビューは連鎖できて、あるビューの出力を別のビューの from に使えます。これが CTE 構文を渡さずに多段クエリを組む方法です。
ビューが作業単位です。実行器が走らせるのはクエリではなくビューです — クエリ全体は「これらのビューを定義して、この1つを返す」という指示です。
Result — 実際に返されるもの
result ブロックは、どのビューをどんな形で返すか を実行器に伝えます。1回のクエリで返せるのは1つのビューだけで、result.use で指定します。
result.use— 返すビューの名前result.limit— 行数の上限 (count_onlyでなければ必須)result.count_only: true— 行数だけ返し、limitを無視
make の他のビューは無駄ではありません。返されない中間ビューでも、返されるビューの from として参照できます。これがサブクエリの代わりになります。
頭のイメージ
materials (データ面)
│
▼
make (名前付きビュー — 連鎖可能)
│
▼
result (どのビューをどれだけ)
正しく書かれた QAL クエリは全部、この絵を左から右に進みます。もしクエリがこの形と戦っているように感じるなら、たいてい make でやるべき作業を result でやろうとしているか、粒度の合わないマテリアルを選んでいるかのどちらかです。
次に読むページ
- Materials — 実際のデータ面とサンプル表。
- AI Instructions — AI クライアント向けのルール集。