类型

此页面指的是属于 联接type 参数。

type 还可以用作维度的一部分,如维度、过滤条件和参数类型文档页面中所述。

type 还可以用作指标的一部分,如指标类型文档页面中所述。

type 还可以用作信息中心过滤条件的一部分,如信息中心参数文档页面中所述。

type 也可以用作信息中心元素的一部分,如 type(适用于 LookML 信息中心)参数文档页面中所述。

用法

explore: view_name {
  join: view_name_2 {
    type: inner
  }
}
层次结构
type
默认值
left_outer

接受
联接类型(crossfull_outerinnerleft_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 中将其称为 JOININNER JOIN)仅包含在探索视图和联接视图中都有匹配记录的行。

cross

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

示例

使用 FULL OUTER JOINuser 数据添加到 order 数据中,即使该用户尚未下单:

explore: order {
  join: user {
    sql_on: ${order.user_id} = ${user.id} ;;
    type: full_outer
  }
}

使用 INNER JOINuser 数据添加到 event 数据中,并将结果限制为仅包含用户生成的事件:

explore: event {
  join: user {
    sql_on: ${event.user_id} = ${user.id} ;;
    type: inner
  }
}

使用 CROSS JOIN 生成 ownerproperty 的所有可能组合:

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 一样。

这是因为与探索相关联的视图(而不是联接到探索中的视图)通常是“主要”数据。例如,您可能有一个基于活动信息的探索。有些事件可能由您的系统生成,而其他事件可能由您的用户生成。如果您使用常规 JOINuser 加入 event,则只能看到用户创建的事件,而无法看到系统事件。如果改用 LEFT JOIN,您将能够看到所有事件,无论这些事件是否与用户相关联。

如果限制行很重要,您可能需要使用 always_join

当 Looker 为查询生成 SQL 时,它会尝试创建尽可能简洁的 SQL,并且只会使用用户选择的字段所需的联接。当您使用 type 定义 LEFT JOIN 以外的内容时,您可能始终希望某个联接(或一组联接)成为查询的一部分,以确保生成的行包含您的联接限制。您可以使用 always_join 参数来实现此目的。