本页引用了联接中的
type
参数。
type
也可以用作维度的一部分,如维度、过滤条件和参数类型文档页面中所述。
type
也可以用作测量量的一部分,如测量类型文档页面所述。
type
也可以用作信息中心过滤条件的一部分,如信息中心参数文档页面中所述。
type
也可以用作信息中心元素的一部分,如type
(适用于 LookML 信息中心)参数文档页面中所述。
用量
join: view_name_2 {
type: inner
}
}
层次结构
type |
默认值
left_outer 接受
联接类型(cross 、full_outer 、inner 、left_outer )特殊规则
当您使用 type 以外的 left_outer 时,可能需要使用 always_join 来确保生成的行包含联接限制。
|
定义
type
用于描述要执行的联接类型。可能的联接类型值会在下一张图片中显示:
可能的联接类型值如本页以下各部分所述:
left_outer
(默认值)
Looker 中最常见的联接类型是 left_outer
(本页面上的 left_outer
联接类型通常是首选类型部分,介绍了频繁使用联接的原因)。在 SQL 中,您可能以 LEFT JOIN
的形式知道它。使用此 type
时,“探索”功能中的所有行都包含在内,并且会合并来自“合并”视图的数据(如果有)。
full_outer
full_outer
联接类型(在 SQL 中可能知道为 FULL OUTER JOIN
)包括“探索”和“联接”视图中的所有行,即使另一个视图中没有相应的数据也是如此。请注意,MySQL 不支持全外联接。
inner
inner
联接类型(在 SQL 中您可能知道它是 JOIN
或 INNER JOIN
)仅包含在“探索”和“合并”视图中都有匹配记录的行。
cross
很少使用 cross
联接类型(您可能知道 SQL 就是 CROSS JOIN
)。有时,它适用于零填充或矩阵生成。它会为“探索”和“合并”视图的每个组合创建一行。这个概念很难在维恩图示上展示,不妨通过表格示例更好地理解:
示例
使用 LEFT JOIN
将 dna
数据添加到 people
数据(如果有 dna
信息):
explore: person {
join: dna {
sql_on: ${person.dna_id} = ${dna.id} ;;
type: left_outer # Could be excluded since left_outer is the default
}
}
使用 FULL OUTER JOIN
向您的 order
数据添加 user
数据(即使用户尚未下单):
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
type: full_outer
}
}
使用 INNER JOIN
添加 user
数据至您的 event
数据,并将结果限制为仅由用户生成的事件:
explore: event {
join: user {
sql_on: ${event.user_id} = ${user.id} ;;
type: inner
}
}
使用 CROSS JOIN
生成 owner
和 property
的所有可能组合:
explore: property {
join: owner {
sql_on: 1 = 1 ;; # this sql_on condition is required in some dialects,
type: cross # but causes problems in other dialects, try adding or
} # removing if you experience problems with cross joins
}
注意事项
通常首选 left_outer
联接类型
在学习和使用 SQL 时,许多人主要关注 JOIN
,技术上也称为“内联接”。因此,人们可能会认为在大多数情况下应使用 type: inner_join
。不过,Looker 通常最适合与 type: left_outer
搭配使用,就像在 SQL 中使用 LEFT JOIN
一样。
这是因为与探索相关联的数据视图(而不是已加入探索的数据视图)通常是“主要”数据。例如,您可能有基于活动信息的“探索”。某些事件可能是由您的系统生成的,而其他事件可能是由您的用户生成的。如果您使用常规 JOIN
将 user
加入 event
,则只能查看用户创建的活动,而且无法查看系统事件。改用 LEFT JOIN
后,您将能够查看所有事件,无论是否存在与之关联的用户。
如果限制行数非常重要,您可能需要使用 always_join
在为查询生成 SQL 时,Looker 会尝试尽可能创建最简洁的 SQL,并且只会使用用户选择的字段所必需的联接。使用 type
定义除 LEFT JOIN
之外的值时,您可能希望特定联接(或一组联接)包含在查询中,以确保生成的行包含联接限制。您可以使用 always_join
参数来实现此目的。