用法
explore: view_name_1 {
join: view_name_2 {
foreign_key: dimension_name
}
}
|
层次结构
foreign_key |
默认值
无
接受
Looker 维度名称
特殊规则
|
定义
foreign_key 用于在视图及其探索之间建立联接关系。Looker 会将 foreign_key 引用的维度与联接视图的主键进行匹配。您可以通过为用作主键的字段启用 primary_key 来设置联接视图的主键。
使用 foreign_key 时,视图可以直接联接到探索,也可以通过已联接到相应探索的第二个视图进行联接。
第一种情况(视图直接联接到探索)的示例如下所示:
explore: order {
join: customer {
foreign_key: customer_id
}
}
假设 customer 的主键名为 id,则 Looker 生成的 SQL 将为:
SELECT ...
FROM order
LEFT JOIN customer
ON order.customer_id = customer.id
在第二种情况下,视图通过已与探索联接的中间视图与探索联接。例如:
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 时使用了完全限定的字段引用 order.customer_id,而不是简单的 customer_id。如果我们只使用 customer_id,Looker 会尝试直接将 customer 连接到 order_items.customer_id,而不是通过 order.customer_id 进行连接。
示例
通过将视图 customer 中的主键与探索 order 中的 order.customer_id 相匹配,将视图 customer 与探索 order 联接起来:
explore: order {
join: customer {
foreign_key: customer_id
}
}
通过名为 order 的视图,将名为 customer 的视图与名为 order_items 的探索相关联。将 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 的探索联接。将 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 正常运行,联接视图中的一个维度必须定义为该视图的主键。主键通过 primary_key 参数定义。
由于只能将一个维度定义为主键,因此您无法将 foreign_key 与具有多列主键的视图搭配使用。在这种情况下,您需要改用 sql_on。
注意事项
foreign_key 并不是在 Looker 中进行联接的唯一方式
某些联接关系无法通过 foreign_key 建立。例如,联接可能不使用联接视图的主键,或者可能要求多个条件是联接的一部分。在这些情况下,请改用 sql_on。