此页面指的是属于 联接的
type参数。
type还可以用作维度的一部分,如维度、过滤条件和参数类型文档页面中所述。
type还可以用作指标的一部分,如指标类型文档页面中所述。
type还可以用作信息中心过滤条件的一部分,如信息中心参数文档页面中所述。
type也可以用作信息中心元素的一部分,如type(适用于 LookML 信息中心)参数文档页面中所述。
用法
explore: view_name {
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)包含探索和联接视图中的所有行,即使另一个视图中没有相应的数据也是如此。

inner

inner 联接类型(您可能在 SQL 中将其称为 JOIN 或 INNER JOIN)仅包含在探索视图和联接视图中都有匹配记录的行。

cross

cross 联接类型(您可能在 SQL 中将其称为 CROSS JOIN)很少使用。有时,这对于零填充或矩阵生成很有用。它会为探索和联接视图的每种组合创建一个行。

示例
使用 FULL OUTER JOIN 将 user 数据添加到 order 数据中,即使该用户尚未下单:
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
当 Looker 为查询生成 SQL 时,它会尝试创建尽可能简洁的 SQL,并且只会使用用户选择的字段所需的联接。当您使用 type 定义 LEFT JOIN 以外的内容时,您可能始终希望某个联接(或一组联接)成为查询的一部分,以确保生成的行包含您的联接限制。您可以使用 always_join 参数来实现此目的。