用途
explore: view_name_1 {
join: view_name_2 {
foreign_key: dimension_name
}
}
|
階層
foreign_key |
デフォルト値
なし
許可
Looker ディメンション名
特別なルール
|
定義
foreign_key は、ビューとその Explore の間に結合関係を確立します。Looker は、foreign_key で参照されるディメンションを結合されたビューの主キーと照合します。結合されたビューの主キーを設定するには、主キーとして機能するフィールドの primary_key をオンにします。
foreign_key を使用すると、ビューを Explore に直接結合できます。また、その Explore にすでに結合されている 2 つ目のビューを介して結合することもできます。
ビューが Explore に直接結合されている最初のケースの例は次のようになります。
explore: order {
join: customer {
foreign_key: customer_id
}
}
customer の主キーが id という名前であると仮定すると、Looker が生成する SQL は次のようになります。
SELECT ...
FROM order
LEFT JOIN customer
ON order.customer_id = customer.id
2 番目のケースでは、ビューは、その Explore にすでに結合されている中間ビューを介して Explore に結合されます。たとえば、次のようなケースです。
explore: order_items {
join: order {
foreign_key: order_id
}
join: customer {
foreign_key: order.customer_id
}
}
ここでは、customer を order_items に直接結合することはできません。代わりに、order を介して結合する必要があります。order と customer の両方の主キーが id という名前であると仮定すると、Looker が生成する SQL は次のようになります。
SELECT ...
FROM order_items
LEFT JOIN order
ON order_items.order_id = order.id
LEFT JOIN customer
ON order.customer_id = customer.id
これを正しく機能させるため、customer を結合する際に、単に customer_id ではなく、完全スコープのフィールド参照 order.customer_id を使用しています。customer_id のみを使用した場合、Looker は order.customer_id を介さずに customer を order_items.customer_id に直接結合しようとします。
例
customer の主キーを order.customer_id と照合して、customer という名前のビューを order という名前の Explore に結合します。
explore: order {
join: customer {
foreign_key: customer_id
}
}
order というビューを介して、customer というビューを order_items という Explore に結合します。customer の主キーを order.customer_id と、order の主キーを order_items.order_id と照合します。
explore: order_items {
join: order {
foreign_key: order_id
}
join: customer {
foreign_key: order.customer_id
}
}
order と inventory_item という名前のビューを order_items という名前の Explore に結合します。order の主キーを order_items.order_id と、inventory_item の主キーを order_items.inventory_id と照合します。
explore: order_items {
join: order {
foreign_key: order_id
}
join: inventory_item {
foreign_key: inventory_id
}
}
一般的な課題
foreign_key は列名ではなく、ディメンション名を参照する必要があります
foreign_key パラメータは、基盤となる SQL データベースの列名ではなく、ディメンション名のみを受け取ります。ディメンション名と列名が同じである場合が多く、列名を使用できるという誤った結論に至る可能性があります。
foreign_key で結合されたビューで主キーを定義する必要があります
foreign_key が正しく機能するには、結合されたビューのディメンションの 1 つが、そのビューの主キーとして定義されている必要があります。主キーは primary_key パラメータで定義されます。
主キーとして定義できるディメンションは 1 つだけであるため、複数列の主キーを持つビューで foreign_key を使用することはできません。このような場合は、代わりに sql_on を使用する必要があります。
知っておくべきこと
Looker で結合する方法は foreign_key だけではありません
foreign_key では一部の結合関係を確立できません。たとえば、結合で結合されたビューの主キーが使用されない場合や、複数の条件が結合の一部として必要になる場合があります。このような場合は、代わりに sql_on を使用します。