複数のクエリのデータを結合する

Looker の Explore は Looker 開発者によって設計され、データ フィールドとテーブル間の定義された関係を使用して、データベース テーブルからのデータが効率的に結合されています。そのため、1 つの Explore を使用してデータを調べることをおすすめします。

ただし、Looker 開発者が必要な関係を作成していない場合や、技術的な制限事項がある場合があります。このような場合、[データを結合] ページを使用すると、異なる Explore(異なるモデルやプロジェクトを含む)の 2 つ以上のクエリの結果を結合(またはマージ)し、クエリ結果を 1 つのクエリのように表示できます。結合クエリを使用すると、Explore とビジュアリゼーションの作成を行うデータテーブルを作成できます。また、LookML プロジェクトとモデルをさらに開発、定義するための概念実証としても使用できます。

結合された結果について

クエリを結合または統合する際は、まず 1 つの Explore から 1 つのクエリを作成します。次に、この最初のクエリに他のクエリを組み合わせます。

デフォルトでは、最初のクエリはプライマリ クエリとみなされます。Looker がデータを照合して結合された結果を作成する際は、追加された各クエリをプライマリ クエリと照合するため(他の追加クエリとは照合しない)、プライマリ クエリは重要です。クエリを追加するときは、必ずプライマリ クエリのディメンションと照合可能なディメンションを含める必要があります。

たとえば、次のクエリについて考えてみます。

プライマリ クエリは、次の結果を返します。

Products Category 商品数
有効 5
Jeans 9
フォーマル ウェア 3

セカンダリ クエリは、次の結果を返します。

Products Category 品目の在庫数
有効 11
Jeans 16
フォーマル ウェア 6

これらのクエリを [商品カテゴリ] フィールドに結合すると、Looker が次の結合結果を生成します。

Products Category 商品数 品目の在庫数
有効 5 11
Jeans 9 16
フォーマル ウェア 3 6

結合された結果では、実際の SQL 結合は実行されません(データベース内マージクエリを使用している場合を除く)。ただし、SQL 結合に慣れている方のために、クエリの結合では、左結合と同じように複数の Explore の結果を結合します。追加されたクエリの結果は、プライマリ クエリに左結合されているかのように、プライマリ クエリの結果と結合されます。

結合された結果の仕組みを理解するために、左結合の概念を理解している必要はありません。具体的には次の理由により、プライマリ クエリの指定が重要となります。

  • フィールド名の表示方法: フィールドの照合では、上記の例に示すように、プライマリ クエリのフィールド名が結合された結果で使用されます。
  • 一致する値のないクエリを結合された結果で処理する方法: 次のセクションの1 つのクエリに一致するデータ値がない場合で、一部のクエリの一致するディメンションにのみ特定の値がある場合のデータ結合処理について説明しています。

    結合された結果の値が欠落している、または null である場合のトラブルシューティングのヒントについては、結合された結果のセカンダリ クエリに null がある理由をご覧ください。ベスト プラクティス ページをご覧ください。

  • 結合された結果で一致する値が複数あるクエリを処理する方法: このページの後半の1 つのクエリに同じ値の行が複数ある場合では、一部のクエリの一致するディメンションに特定の値(または値の組み合わせ)を持つ複数の行がある場合に、Looker がデータの結合を処理する方法について説明します。

1 つのクエリに一致するデータ値がない場合

プライマリ クエリが重要であるもう一つの理由は、一致したディメンションでの null 値の処理方法にあります。

  • プライマリ クエリに存在する行が追加クエリには存在しない場合、追加クエリのその行のフィールドは NULL(∅)になります。
  • 追加クエリに存在する行がプライマリ クエリには存在しない場合、その行は結果に表示されません。

この動作を説明するために、次のクエリ例について考えてみます。

プライマリ クエリは、次の結果を返します。

Products Category 製品部門 商品数
有効 キッズ 522
有効 大人 545
Dresses 大人 878
フォーマル ウェア 大人 349

セカンダリ クエリは、次の結果を返します。

Products Category 商品のブランド名 品目の在庫数
有効 ブランド 1 223
Dresses ブランド 2 80
Dresses Brand 3 3
Jeans Brand 3 8
Jeans ブランド 2 19

これらのクエリを [商品カテゴリ] フィールドに結合すると、Looker が次の結合結果を生成します。

Products Category 製品部門 商品のブランド名 商品数 品目の在庫数
有効 大人 ブランド 1 545 223
有効 キッズ ブランド 1 522 223
Dresses 大人 ブランド 2 878 80
Dresses 大人 Brand 3 878 3
フォーマル ウェア 大人 ∅ 349 ∅

プライマリ クエリには Formalwear の行があるため、結合された結果にはこの行が表示されます。追加クエリには Formalwear 行がないため、追加クエリの Formalwear のフィールドは NULL(∅)になります。

追加クエリに Jeans という行が 2 つありますが、プライマリ クエリには Jeans という行はありません。その結果、これらの行は結合された結果に表示されません。

この例では、プライマリ クエリを切り替えて、追加されたクエリを新しいプライマリ クエリにすると、Looker が代わりに次の結合された結果を生成します。

Products Category 商品のブランド名 製品部門 品目の在庫数 商品数
有効 ブランド 1 大人 223 545
有効 ブランド 1 キッズ 223 522
Dresses ブランド 2 大人 80 878
Dresses Brand 3 大人 3 878
Jeans ブランド 2 ∅ 19 ∅
Jeans Brand 3 ∅ 8 ∅

Formalware 行は、新しいプライマリ クエリには存在しないため、Looker は表示しなくなりました。しかし現在、Looker では Jeans の行が表示され、プライマリ クエリに追加されているクエリのみに含まれるディメンションとメジャーに対して NULL(∅)が表示されます。

結合された結果の値が欠落している、または null である場合のトラブルシューティングのヒントについては、結合された結果のセカンダリ クエリに null がある理由をご覧ください。ベスト プラクティス ページをご覧ください。

1 つのクエリに同じ値の行が複数ある場合

プライマリ クエリを指定することが重要である理由として、複数の行に一致する値がある場合の処理方法について説明します。追加されたクエリの複数の行に、プライマリ クエリ内の行と一致する値がある場合、プライマリ クエリの行はその回数だけ複製されます。

次の例では、追加されたクエリにはる Dresses の 2 つの行があります。結合された結果には、プライマリ クエリの Dresses の値が 2 回表示されます(追加されたクエリの Dresses 行ごとに 1 回ずつ)。

プライマリ クエリは、次の結果を返します。

Products Category 製品部門 商品数
有効 キッズ 522
有効 大人 545
Dresses 大人 878
フォーマル ウェア 大人 349

セカンダリ クエリは、次の結果を返します。

Products Category 商品のブランド名 品目の在庫数
有効 ブランド 1 223
Dresses ブランド 2 80
Dresses Brand 3 3
Jeans Brand 3 8
Jeans ブランド 2 19

結合された結果クエリでは、[商品カテゴリ] フィールドを結合して次の結果が返されます。

Products Category 製品部門 商品のブランド名 商品数 品目の在庫数
有効 大人 ブランド 1 545 223
有効 キッズ ブランド 1 522 223
Dresses 大人 ブランド 2 878 80
Dresses 大人 Brand 3 878 3
フォーマル ウェア 大人 ∅ 349 ∅

この場合にプライマリ クエリを切り替えると、新たに指定したプライマリ クエリには Dresses 行が 2 つあるため、引き続き Dresses 行は 2 つになります。クエリを結合すると、プライマリ クエリにある行よりも多くの行が結果に表示される可能性がありますが、行数が減少することはありません。

インデータベース マージクエリ

デフォルトでは、結合されたクエリは Looker のメモリで処理されるため、各クエリは結合可能な 5,000 行に制限されます。Looker 管理者が データベース内マージクエリ Looker Labs 機能を有効にしている場合、同じ BigQuery 接続にある 2 つのクエリ間の結合は、BigQuery データベース自体で実行されます。データベースで結合を実行すると、パフォーマンスが向上し、無制限の行を結合できます。

また、結合された結果の Explore クエリを作成すると、Looker UI に [行数の上限] フィールドが表示されます。Looker では、結合された結果クエリの処理方法に応じて、[行数の上限] フィールドが異なる方法で使用されます。

  • Looker メモリで計算される結合クエリの場合、Looker は各クエリの [行数の上限] フィールドで指定された行数を取得し、そのデータを結合して結合結果を作成します。
  • データベース内統合クエリの場合、Looker は各ソースクエリの行数制限値を無視し、各ソースクエリの完全なデータセットを結合します。

Looker が結合クエリに対してデータベース内結合を実行できる場合、クエリがデータベースで実行されていること、および Looker が各ソースクエリから行制限を省略していることを示すバナーが表示されます。

次に、データベース内のマージされたクエリの結果テーブルに、[行数制限] フィールドではなく [マージされた結果] フィールドが表示されます。統合された結果フィールドは、処理される行ではなく、結果テーブルに表示される行を制限します。これは、データベース内の統合された結果クエリには、処理できる行数に制限がないためです。

クエリの結合

複数のクエリの結果を結合するには、次の手順を行います。

  1. プライマリ クエリという最初のソースクエリを作成します。
  2. 次のソースクエリを追加します。
  3. 必要に応じて、結合されたクエリの結合ルールを構成します。
  4. 必要に応じて、結合されたクエリを可視化します。
  5. 結合クエリを作成したら、結合クエリを保存または共有します。
  6. 必要に応じて、結合されたクエリを変更します。

プライマリ クエリの作成

複数のクエリの結果を結合するには、まず [Explore] メニューから Explore を選択し、フィールド ピッカーから目的のディメンションとメジャーを選択して、プライマリ クエリを準備します。このステップ中は、ディメンションのピボット処理はしないでください。または、Look またはダッシュボードを選択し、Look またはダッシュボード タイルで [ここから探索] をクリックします。

これで結果の統合を開始できます。ただし、次のオプションの方法でクエリをさらに絞り込むこともできます。

  • データのフィルタを追加します。
  • 表計算を含めてアドホック指標を作成します。ソースクエリからの表計算は、結合された結果では標準ディメンションとして表示されます。
  • [実行] をクリックしてプライマリ クエリの結果を確認し、フィルタと表計算をテストします。

次のソースクエリの追加

プライマリ Explore クエリを作成したら、次の手順で別のソースクエリを追加します。

  1. Explore の [構成] パネルで、[クエリを統合(データを結合)] をクリックして、[データを結合] ページを開きます。
  2. [結合を追加] ウィンドウで、別のソースクエリを追加する方法を選択します。

    • Explore から新しいクエリを作成する: Looker に Explore のリストが表示されます。ソースクエリとして使用する Explore を選択し、[クエリを追加] をクリックします。Looker に [結合フィールドの構成] ページが表示されます。新しいクエリのディメンションとメジャーを選択し、フィルタやカスタム フィールドを追加します。ソースクエリのディメンションはピボットせず、結合された結果のディメンションをピボットします。値がプライマリ クエリのディメンションと完全に一致するディメンションを少なくとも 1 つ含めてください。新しいソースクエリの設定が完了したら、[保存して続行] をクリックします。
    • 事前構築済みクエリの URL を貼り付け: [事前構築済みクエリの URL を追加] フィールドに、ソースクエリとして使用するクエリ、Look、ダッシュボード タイルの URL を入力し、[クエリを追加] をクリックします。
    • Look を選択: Looker に Look のリストが表示されます。ソースクエリとして使用する Look を選択し、[クエリを追加] をクリックします。
    • ダッシュボード タイルを選択: Looker にダッシュボードのリストが表示されます。ダッシュボードを選択すると、Looker にそのダッシュボードのタイルのリストが表示されます。タイルを選択して [クエリを追加] をクリックします。

結合ルールの構成

2 つ以上のクエリを結合するために、Looker によってクエリの中から値が一致するディメンションが検出されます。追加する各クエリには、値がプライマリ クエリのディメンションと完全に一致する共通ディメンションが少なくとも 1 つ必要です。たとえば、注文の Explore に顧客データを追加する場合、注文の Explore と顧客クエリの両方に一致する値を持つ Customer ID フィールドがあれば、Customer ID フィールドを使用してクエリを結合できます。ただし、両方のクエリに Date ディメンションがあり、一方のクエリでは値として "2017-10-01" が使用され、もう一方のクエリでは値として "October 2017" が使用されている場合、Looker はクエリの結合にこのディメンションを使用できません。

プライマリ ソースクエリと追加のソースクエリを選択して構成すると、Looker は最適な結合フィールドを自動的に選択し、[データを結合] ページの [結合を構成] ウィンドウに結合ルールを作成します。プライマリ クエリと各結合ルールは、[ソースクエリと結合ルール] に個別のエントリとして表示されます。

[ソースクエリと結合ルール] セクションでは、次の方法で結合ルールを変更できます。

  • プライマリ クエリまたはソースクエリの結合フィールドを変更します。
  • 新しい結合フィールドを追加します。
  • 結合フィールドを削除します。
  • ソースクエリをプライマリ クエリにします。プライマリ クエリを切り替えると、結合された結果が変更される可能性があります。プライマリ クエリの役割については、結合された結果についてをご覧ください。
  • [結合を追加] をクリックして、新しいソースクエリを追加します。

グラフのスタイルを構成する

結合されたクエリを可視化するには、[グラフを選択] をクリックして可視化タイプを選択します。または、[自動可視化] オプションを使用して、Gemini に適切な可視化を選択させることもできます。次に、[グラフのスタイル] を選択して、そのグラフタイプのグラフ オプションを構成します。

使用可能なすべてのビジュアリゼーション設定とサポートされているグラフタイプの詳細については、ビジュアリゼーションの構成と編集をご覧ください。

結合クエリの保存または共有

結合クエリを作成したら、[保存または共有] をクリックして次の操作を行うことができます。

  • 新しいダッシュボードに保存: Looker に [新しいダッシュボードとして保存] ウィンドウが表示されます。新しいダッシュボードにタイトルを付け、新しいダッシュボードを保存するフォルダを選択します。
  • 既存のダッシュボードに保存: Looker に [このフォルダのダッシュボードに追加] ウィンドウが表示されます。新しいダッシュボード タイルのタイトルを入力し、クエリを保存するダッシュボードを選択します。
  • URL をコピー: Looker に [URL を共有] ウィンドウが表示され、クエリの短縮 URL と拡張 URL が表示されます。URL を共有したり、ブラウザでブックマークしたりして、同じ結合クエリを後で再度実行できます。結合された結果を Look として保存することはできません。

結合されたクエリをダッシュボードに追加したら、結合されたクエリタイルにダッシュボード フィルタを追加または適用する、タイルを並べ替える、タイルを編集する、ダッシュボードに新しいタイルを追加するといった操作が可能です。結合された結果に基づくタイルからデータを直接ダウンロードすることはできませんが、ダッシュボードを PDF として、または CSV ファイルのコレクションとしてダウンロードできます。

結合されたクエリの変更

結合クエリを作成したら、[データの結合] ページで次の方法で結果を操作し、クエリを変更できます。

  • データを調べて並べ替えます(データのドリルダウンを含む)。ただし、2 つの Explore の結合に使用されたディメンションをドリルダウンすると、プライマリ Explore のドリル フィールドのみが表示されます。
  • [結合を構成する] ウィンドウで、プライマリ クエリの横にある [クエリを編集] を選択してクエリのデータテーブルを開き、フィールド ピッカーを使用して変更を加えます。たとえば、フィールドの追加や削除、表計算の追加、ソースクエリのフィルタの変更などを行います(結合された結果にフィルタを直接追加することはできません)。プライマリ クエリの横にある [オプション] を選択して、プライマリ クエリの名前を変更または削除することもできます。
  • [結合を構成する] ウィンドウで、結合ルールで変更するクエリの横にある [クエリを編集] を選択します。追加のソースクエリごとに、[オプション] を選択してクエリの名前を変更または削除することもできます(削除したクエリを結合された結果に再び追加するには、ブラウザの戻るボタンを使用します)。または、そのソースクエリを結合されたクエリのプライマリ クエリにすることもできます。
  • [結合フィールドとグラフのスタイル] ウィンドウの [結合フィールド] タブで、1 つ以上の結合クエリ フィールドをピボットし、表計算を追加します。ソースクエリからの表計算は、結合された結果では標準ディメンションとして表示されることに注意してください。
  • [結合フィールドとグラフのスタイル] ウィンドウの [グラフのスタイル] タブで、結合クエリの可視化の設定を変更します。
  • [合計] 切り替えボタンを使用して、結合されたクエリに合計を追加または削除します。Looker では、各コンポーネント クエリの合計を計算し、それらの合計値を結合された結果で使用します。そのため、表示されるのは結果が結合される前に計算された合計なので、合計が高すぎるように見える場合があります。常に最新のデータを表示する 1 つの方法は、各クエリでフィルタを揃えることです。
  • [グラフを変更] をクリックして、結合されたクエリに別の可視化を選択します。

変更を加えた後、[Run to update] をクリックすると、更新された結合クエリの結果を表示できます。

ダッシュボードで結合クエリタイルを編集する

ダッシュボードで結合クエリタイルを編集する手順は次のとおりです。

  1. ダッシュボードを編集モードにします。
  2. タイルで [結合されたクエリを編集] を選択します。
  3. Looker のダッシュボード編集キャンバス内で [データを結合] ページが開きます。
  4. プライマリ クエリ、追加のソースクエリ、結合ルール、ビジュアリゼーションに変更を加えます。
  5. [保存] を選択して結合クエリの設定を更新し、[保存] を選択してダッシュボードのタイルを更新します。

埋め込みの Look、ダッシュボード、Explore 内のクエリの統合

適切な権限があれば、埋め込みの Look、ダッシュボード、Explore 内のクエリを結合できます。

  • 埋め込み Look または埋め込みダッシュボード タイルのクエリを別のクエリと結合するには、[ここから探索] をクリックして Look またはダッシュボード タイルから Explore を開き、クエリを結合する手順に沿って操作します。
  • 埋め込み Explore で、[構成] パネルの [クエリを統合(データを結合)] をクリックし、クエリを結合する手順に沿って操作します。

メモ

  • プライマリ クエリのすべてのフィールドは、プライマリ クエリのフィールド名で結合された結果に表示されます。一致するディメンションに対してプライマリ クエリと追加クエリで異なる名前が使用されている場合は、プライマリ クエリのディメンション名のみが結果に表示されます。
  • 結合されたクエリには行数制限がある場合があります。

    • デフォルトでは、結合クエリの結合は Looker メモリで処理されるため、結合される各クエリは結合可能な 5,000 行に制限されます(管理者がより高い上限を指定している場合は最大 50,000 行)。行数の上限を超える行数を返すクエリを結合すると、結合された結果には、行数の上限を超える行は表示されません。
    • Looker 管理者が データベース内マージクエリの Looker Labs 機能を有効にしていて、同じ BigQuery 接続にある 2 つのクエリの結果をマージする場合、2 つのクエリ間の結合は BigQuery データベース自体で実行されます。データベース内マージクエリにより、パフォーマンスが向上し、無制限の行を結合できます。詳細については、このページのデータベース内マージクエリセクションをご覧ください。
  • Looker メモリで処理される結合クエリの場合、クエリの統合はクエリ後の処理機能です。この機能は慎重に使用しないと、Looker インスタンスのリソースが過負荷になり、すべてのユーザーに対する Looker インスタンスのレスポンスが遅くなる可能性があります。データベース内マージクエリを利用できない場合は、データベースで処理される SQL を生成する関数とロジックを LookML で定義することをおすすめします。Looker のパフォーマンスの最適化について詳しくは、Looker のパフォーマンスを最適化するのベスト プラクティス ページをご覧ください。

まとめ

Looker 開発者はさまざまなデータベース テーブルのデータを組み合わせる方法を慎重に検討しているため、可能な限り 1 つの Explore のデータを使用してください。ただし、必要であればクエリを結合できます。これは、複数の Explore やデータベースのデータを組み合わせることができる便利な手法です。