2025年8月12日 Lookerのネイティブ派生テーブルを活用する Google Cloud Looker 検索する Popular tags 生成AI(Generative AI) Vertex AI Search Looker Studio BigQuery AlloyDB Google Workspace 事例紹介 Cloud SQL Category Google Cloud Author ten SHARE 目次 Lookerの派生テーブル (Derived Table) とは SQL派生テーブルとネイティブ派生テーブル ネイティブ派生テーブルの活用 まとめ Content tenです。 本記事では、Lookerの価値を最大限に引き出す「ネイティブ派生テーブル」について解説していきます。 Lookerの派生テーブル (Derived Table) とは 派生テーブルは、既存のテーブルやビューに対するクエリ結果を、実際のテーブルのように使用できるようにする機能です。 例えば、「ユーザーごとの初回購入日と最終購入日を予め計算しておき、他のデータと組み合わせたい」といったケース、ありますよね。 データベースに慣れた方は、サブクエリやCTEをイメージしていただけると分かりやすいかと思います。 派生テーブルは、主に下記のようなケースで利用します 集計値を基にしたディメンションの作成 ウィンドウ関数の利用 事前集計・フィルタをすることでテーブル結合時の計算コスト削減 SQL派生テーブルとネイティブ派生テーブル Lookerの派生テーブルには、SQLで記述する「SQL派生テーブル」と、主にLookMLで記述する「ネイティブ派生テーブル」の2つがあります。 SQL派生テーブル SQLを直接記述するため、複雑なクエリを自由に書ける 既存のSQL資産がある場合に、流用しやすい SQLに慣れたエンジニアには直感的に利用できる view: user_order_summary_sql { derived_table: { sql: SELECT user_id, COUNT(DISTINCT order_id) as total_orders, SUM(amount) as total_spent, MAX(created_at) as last_order_date FROM orders GROUP BY user_id ;; } } ネイティブ派生テーブル LookMLのExploreを基に構築するため、既存のビジネスロジックを再利用できる 基となるExploreの変更が自動的に反映されるため、保守性が高い さまざまなオプションにより、柔軟なクエリを動的に構築できる view: user_order_summary_native { derived_table: { explore_source: orders { column: user_id {} column: total_orders { field: orders.count } column: total_spent { field: orders.total_amount } column: last_order_date { field: orders.max_created_date } } } ネイティブ派生テーブルの活用 ネイティブ派生テーブルのメリットを詳しく見ていきましょう。 1. 既存のビジネスロジックの再利用 ネイティブ派生テーブルは、すでに定義済みのviewのフィールドをそのまま活用できます。 これにより、複雑な計算ロジックやビジネスルールを重複して記述する必要がありません。 以下のようなviewがあるとします。(一部省略しています) view: orders { dimension: order_id { primary_key: yes } dimension: status { type: string } measure: net_revenue { type: sum sql: ${amount} * (1 - ${discount_rate}) * (1 - ${tax_rate}) ;; filters: [status: "completed, shipped"] } measure: average_days_to_ship { type: average sql: DATEDIFF(day, ${created_date}, ${shipped_date}) ;; value_format_name: decimal_1 } } 上記を利用したネイティブ派生テーブルがこちらです。 net_revenueの箇所は、ネイティブ派生テーブル側ではシンプルな記述ですが、定義済みの計算式やフィルタが自動的に反映されます。 そのため、ビジネスロジックの変更に伴って計算式やフィルタに変更する際も、ネイティブ派生テーブル側のLookMLを変更する必要がありません。 view: summary { derived_table: { explore_source: orders { column: net_revenue {} # 複雑なロジックやフィルタ条件も含めて、そのまま再利用 column: average_days_to_ship {} } } } 2. 保守性の高さ 分かりやすい例として、access_filterによるフィルタの動作を見てみましょう。 以下のようなExploreがあるとします。 explore: sales_transactions { access_filter: { field: category user_attribute: user_attribute_category } } このExploreを利用して、下記のような簡単なネイティブ派生テーブルを作ります。 view: ndt_sales_transactions { derived_table: { explore_source: sales_transactions { column: status {} column: count {} } } dimension: status {} dimension: count {} } このネイティブ派生テーブルをExplore化して、フィールドを選択すると次のようなクエリが得られます。 赤枠で囲った部分が、基となったExploreで定義していたaccess_filterによるものです。 このように、ネイティブ派生テーブルでは、既存のExploreへの設定を再定義することなく利用できます。 3. オプションによる柔軟なクエリ SQL派生テーブルとの大きな違いとして、bind_filtersの存在があります。 bind_filtersは、ネイティブ派生テーブルをExplore上で他のviewと結合して使う際に、「ユーザーがExploreで指定したフィルタ条件を、ネイティブ派生テーブルにも引き継がせる」機能です。 少し分かりづらいと思いますので、実際の例を見ていきましょう。 下記のExploreを基に、ネイティブ派生テーブルを構成します。 explore: sales_transactions {} view: ndt_sales_transactions { derived_table: { explore_source: sales_transactions { column: customer_id {} column: status {} column: total_amount {} } } dimension: customer_id {} dimension: status {} dimension: total_amount {} } ネイティブ派生テーブルを結合しておきます。 explore: sales_transactions { join: ndt_sales_transactions { type: inner sql_on: ${sales_transactions.customer_id} = ${ndt_sales_transactions.customer_id} ;; relationship: many_to_one } } こちらを基にExploreでフィルタを設定してみると、下記のようなクエリが得られます。 ネイティブ派生テーブルによって構成されているWITH句内ではフィルタが掛かっていないことが確認できます。 次に、ネイティブ派生テーブル側にbind_filtersを追加します。 view: ndt_sales_transactions { derived_table: { explore_source: sales_transactions { column: customer_id {} column: status {} column: total_amount {} bind_filters: { to_field: sales_transactions.status from_field: ndt_sales_transactions.status } } } dimension: customer_id {} dimension: status {} dimension: total_amount {} } 再度クエリを見てみましょう。 WITH句内にもフィルタが適用されていますね。 今回は、かなりシンプルな例で、bind_filtersの動作をご紹介いたしましたが、テンプレートフィルタなども活用することで、より柔軟な構成が可能です。 特に、BigQueryではbind_filtersとテンプレートフィルタを組み合わせて、パーティション分割テーブルのスキャン範囲を動的に制御するといったことが実現できます。 まとめ ネイティブ派生テーブルは、Lookerの価値を最大限に高める強力な機能です。 既存のLookMLを活用しながら、パフォーマンスや保守性を両立させ、より効率的なデータモデリングを実現できます。 ネイティブ派生テーブルを活用して、Lookerの魅力を存分に引き出していきましょう! 参考URL: https://cloud.google.com/looker/docs/derived-tables?hl=ja https://cloud.google.com/looker/docs/creating-ndts?hl=ja システムサポートでは、Google CloudやLookerの導入や活用を支援しております。 Lookerを導入したい・導入したけど使いこなせていない…という方は、お気軽にご相談ください! Google Cloud導入・活用支援に関するご相談はこちら 関連コンテンツ 【Google Cloud】Looker Studio × Looker Studio Pro × Looker を徹底比較!機能・選び方を解説 by Google Cloud研究開発チームon 2023年9月5日 自然言語でデータを可視化できるLookerのExplore Assistantを試してみた by tenon 2024年9月26日 Looker の生成 AI 拡張機能 Query Insights を試す by tomon 2025年6月5日 Looker の生成 AI 拡張機能 Dashboard Summarization を試す by tomon 2025年4月3日 頂きましたご意見につきましては、今後のより良い商品開発・サービス改善に活かしていきたいと考えております。 よく分かった 気になる おもしろい イマイチ Author ten 株式会社システムサポート 大阪事業本部ソリューションデザイン事業部所属。 Google Cloud 認定 14資格、AWS 認定 14資格。最近はAIエージェント×Lookerの可能性を探っています。 Google Cloud Looker 2025年8月12日 Lookerのネイティブ派生テーブルを活用する Category Google Cloud 前の記事を読む Google Cloud Next Tokyo 25 参加レポート【全体ダイジェスト編】 次の記事を読む BigQueryのパイプ構文を使ってみよう! Recommendation オススメ記事 2023年9月5日 Google Cloud 【Google Cloud】Looker Studio × Looker Studio Pro × Looker を徹底比較!機能・選び方を解説 2023年8月24日 Google Cloud 【Google Cloud】Migrate for Anthos and GKEでVMを移行してみた(1:概要編) 2022年10月10日 Google Cloud 【Google Cloud】AlloyDB と Cloud SQL を徹底比較してみた!!(第1回:AlloyDB の概要、性能検証編) BigQuery ML ワークショップ開催のお知らせ 生成AI導入支援パッケージ Discovery AI導入支援パッケージ Google Cloud ホワイトペーパー 新着記事 2025年8月12日 Google Cloud BigQueryのパイプ構文を使ってみよう! 2025年8月12日 Google Cloud Lookerのネイティブ派生テーブルを活用する 2025年8月8日 Google Cloud Google Cloud Next Tokyo 25 参加レポート【全体ダイジェスト編】 HOME Google Cloud Lookerのネイティブ派生テーブルを活用する