home ユーザーガイド 基本情報 ヘルプセンター ドキュメンテーション コミュニティ トレーニング 認証
menu
close
settings
Looker keyboard_arrow_down
language keyboard_arrow_down
English
Français
Deutsch
日本語
search
print
Looker documentation will be moving to cloud.google.com on August 22, 2022!
All the information you rely on will be migrated and all docs.looker.com URLs will be redirected to the appropriate page.
LookMLでの結合の使用

結合を使用すると、異なるビューに接続できるため、複数のビューから同時にデータを探索し、データのさまざまな部分が互いにどのように関連しているかを確認できます。

例えば、データベースに、order_itemsordersusersというテーブルがあるかもしれません。すべてのテーブルから同時にデータを探索するために、結合を使用できます。このページでは、特定の結合パラメーターや結合のパターンなど、LookMLでの結合について紹介します。

結合はExploreから開始

結合はモデルファイルで定義され、Exploreビューの関係を確立します。結合は1つ以上のビューを単一のExploreに、直接、または他の結合されたビューを介して連結します。

order_itemsordersの2つのデータベーステーブルを考えてみましょう。両方のテーブルのビューを生成してから、それらの1つ以上を、モデルファイルのexploreパラメーターで次のように宣言します。

explore: order_items { … }

クエリをorder_items Exploreから実行すると、order_itemsは、生成されたSQLのFROM句に次のように表示されます。

SELECT … FROM order_items

order_items Exploreに追加情報を結合できます。例えば、order_itemの所属先のorderについてのデータを追加するには、次のように実行できます。

explore: order_items { join: orders { type: left_outer relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} ;; } }

上記のLookMLは2つのことを達成します。まず、次のようにUIでordersorder_itemsの両方のフィールドを表示できます。

次に、LookMLはordersorder_itemsの結合方法を記述します。このLookMLが、次のようなSQLに変換されます。

SELECT … FROM order_items LEFT JOIN orders ON order_items.order_id = orders.id

これらのLookMLパラメーターについては、以下のセクションで詳しく説明します。このLookMLがどのようにSQLに変換されるかについては、joinパラメーターのリファレンスページを参照してください。

チャットチーム情報:最もお問い合わせの多い検証エラーは「不明なフィールドまたはアクセスできないフィールドです」で、これは結合がされていない場合に起こる可能性があります。詳細については、このエラーに関するヘルプセンターの記事を参照してください。

結合パラメーター

結合には、4つの主要なパラメーター、joinsjointyperelationshipsql_onが使用されます。

ステップ1:Exploreの開始

まず、order_items Exploreを作成します。

explore: order_items { … }

ステップ2:join

テーブルを結合する場合は、まずビューで宣言する必要があります。この例では、ordersはモデルの既存のビューです。

joinパラメーターを使用して、ordersビューをorder_itemsと結合することを次のように宣言できます。

explore: order_items { join: orders { … } }

ステップ3:type

どのtypeの結合を実行するかを検討します。LookerはLEFT JOININNER JOINFULL OUTER JOINCROSS JOINをサポートします。これらは、left_outerinnerfull_outercrosstypeパラメーター値に相当します。

explore: order_items { join: orders { type: left_outer } }

typeのデフォルト値はleft_outerであり、最も一般的な結合タイプです。

ステップ4:relationship

order_itemsordersの間の結合relationshipを定義します。Lookerが正確なメジャー計算するには、結合のrelationshipを適切に宣言することが重要です。関係は、order_items Exploreからordersビューと定義されます。使用可能なオプションは、one_to_onemany_to_oneone_to_manymany_to_manyです。

この例では、1つのorderに対して多くのorder_itemsがある可能性があります。order_itemsからordersへの関係は、many_to_oneです。

explore: order_items { join: orders { type: left_outer relationship: many_to_one } }

結合にrelationshipを含めない場合は、デフォルトとしてmany_to_oneになります。

ステップ5:sql_on

sql_onまたはforeign_keyのいずれかのパラメーターを指定して、これら2つのテーブルを結合する方法を宣言します。通常はsql_onをお勧めしています。foreign_keyでできるすべてのことができ、通常はより理解しやすいからです。

sql_onは、クエリのために生成されたSQLのON句に相当します。このパラメーターを使用して、どのフィールドを組み合わせて結合を行うかを宣言できます。

explore: order_items { join: orders { type: left_outer relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} ;; } }

もっと複雑な結合を記述することもできます。例えば、idが1,000より大きいオーダーだけを結合する必要があるかもしれません。

explore: order_items { join: orders { type: left_outer relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} AND ${orders.id} > 1000 ;; } }

これらの例の${ ... }構文について詳しくは、置換演算子を参照してください。

ステップ6:テスト

Order Items Exploreに移動して、この結合が期待通り機能するかテストします。order_itemsordersの両方のフィールドが表示されるはずです。

LookMLの変更のテストについて詳しくは、モデル開発を参照してください。

別のビューを介した結合

別のビューを介してビューをExploreに結合できます。上記の例では、order_idフィールドを介して、ordersorder_itemsに結合しました。また、共通のフィールドがなくても、usersというビューのデータをorder_items Exploreに結合することもできます。これは、ordersビューを介して行うことができます。

sql_onまたはforeign_keyを使用して、usersorder_itemsではなくordersに結合します。これは、ordersのフィールドをorders.user_idと正しくスコーピングすることによって行います。

sql_onを使用した場合の例を次に示します。

explore: order_items { join: orders { type: left_outer relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} ;; } join: users { type: left_outer relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} ;; } }

ビューの複数回結合

買い手売り手の両方のデータを含むusersビューがあるとします。このビューのデータをorder_itemsに結合しますが、これを買い手と売り手で別々に行うには、fromパラメーターを使用し、異なる名前を指定してusersを2回結合できます。

fromパラメーターを使用すると、結合に固有の名前を付けて、その結合でどのビューを使用するかを指定できます。次に例を示します。

explore: order_items { join: orders { type: left_outer relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} ;; } join: buyers { from: users type: left_outer relationship: many_to_one sql_on: ${orders.buyer_id} = ${buyers.id} ;; } join: sellers { from: users type: left_outer relationship: many_to_one sql_on: ${orders.seller_id} = ${sellers.id} ;; } }

このケースでは、買い手データのみがbuyersとして結合され、売り手データのみがsellersとして結合されます。

usersビューは、結合においては、別名のbuyerssellersで参照する必要があります。

結合からのフィールドの制限

fieldsパラメーターを使用すると、結合からExploreに取り出すフィールドを指定できます。デフォルトでは、ビューのすべてのフィールドが結合時に取り出されます。しかし、一部のフィールドだけを取り出したい場合もあります。

例えば、ordersorder_itemsに結合している場合、この結合からshippingtaxフィールドだけを取り込むことができます。

explore: order_items { join: orders { type: left_outer relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} ;; fields: [shipping, tax] } }

また、[set_a*]のように、フィールドをセットで参照することもできます。各セットは、setパラメーターを使用してビュー内で定義します。ordersビューで次のようなセットが定義されているとします。

set: orders_set { fields: [created_date, shipping, tax] }

ordersorder_itemsと結合している場合、次の3つのフィールドだけを取り出すことができます。

explore: order_items { join: orders { type: left_outer relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} ;; fields: [orders_set*] } }

対称集計

Lookerは、結合によってファンアウトが起こっても、集計(合計や平均など)を正しく計算するために「対称集計」と呼ばれる機能を使用しています。対称集計については、ヘルプセンターの記事A simple explanation of symmetric aggregatesで説明されています。対称集計により解決されるファンアウトの問題については、The problem of SQL fanouts記事で説明されています。

必要なプライマリキー

結合からメジャー(集計)を得るには、その結合に関係しているすべてのビューでプライマリキーを定義する必要があります。

これを行うには、primary_keyパラメーターを、各ビューのプライマリキーフィールド定義に追加します。

dimension: id { type: number primary_key: yes }

Lookerが結合されたメジャーを正しく処理できるように、Null値ではない、完全に一意の値を使ってプライマリキーを指定することが必要です。データに主キーが含まれていない場合は、複数のフィールドを連結して、完全に一意で非Null値の主キーとなるかどうか検討してください。主キーが一意でなかったり、Null値を含んでいたりする場合、クエリにこうした問題を示すデータが含まれていると、このヘルプセンターの記事で説明されているエラーがLookerから返されます。

サポートされているSQLダイアレクト

LookerがあなたのLookerプロジェクトの対称集計をサポートできるようにするには、あなたのデータベースダイアレクトもそれをサポートしていなければなりません。次の表は、Looker 22.14において対称集計をサポートしているダイアレクトを示しています。

お使いのダイアレクトが対称集計をサポートしていない場合は、Lookerで結合を実行するときに注意してください。結合のタイプによっては集計が不正確になることがあります(合計や平均など)。この問題とその回避策については、ヘルプセンターの記事The problem of SQL fanoutsで詳しく説明しています。

結合についての詳細

LookMLの結合パラメーターの詳細については、結合リファレンスドキュメンテーションを参照してください。

Top