sql(适用于派生表)

此页面指的是属于派生表sql 参数。

您还可以按照 sql(针对字段)参数文档页面上的说明,将 sql 用作字段的一部分。

用法

view: my_derived_table {
  derived_table: {
    sql: 
      SELECT *
      FROM events
      WHERE type NOT IN ('test', 'staff')
 ;;
    ...
  }
}
层次结构
sql
默认值

接受
SQL 块

定义

sql 可让您指定用于生成派生表的 SQL。您可以在 sql 参数中使用任何合法的 SQL 查询,前提是该 SQL 查询以原始 SQL 编写,并且不引用 Looker 字段。如需更全面地了解派生表,请参阅 Looker 中的派生表文档页面。

除了引用常规数据库表之外,您还可以在 sql 中引用 LookML 视图或派生表。为此,请使用:

${view_or_derived_table_name.SQL_TABLE_NAME} AS view_or_derived_table_name

此引用中的 SQL_TABLE_NAME 是一个字面值字符串,您无需将其替换为任何内容。例如,如果您想在派生表 key_customer_order_facts 中引用名为 key_customer 的派生表,可以采用如下方式:

view: key_customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT( * ) AS lifetime_orders
      FROM
        order
      INNER JOIN
        ${key_customer.SQL_TABLE_NAME} AS key_customer
      ON
        order.customer_id = key_customer.id
      GROUP BY 1
      ;;
  }
}

包含 sql 的 Liquid 变量

您还可以将 Liquid 变量sql 参数搭配使用。借助 Liquid 变量,您可以访问字段中的值、有关字段的数据以及应用于字段的过滤条件等数据。

date_startdate_end Liquid 变量对于按日期将数据分区到多个表中的数据库方言(例如 BigQuery)非常有用。如需深入了解,请参阅date_startdate_end 与日期过滤条件搭配使用最佳实践页面。

尤其是 _in_query_is_selected_is_filtered Liquid 变量,可为派生表添加一些有趣的功能。它们会根据查询中是否包含字段或过滤条件来返回 true 或 false。在正确使用这些 true/false 值时,需要考虑一些细节;如需了解详情,请参阅 Liquid 变量页面

例如,此派生表会根据用户选择的字段更改其查询的数据库表:

view: dynamic_order_counts {
  derived_table: {
    sql:
      SELECT
        period, number_of_orders
      FROM
        {% if dates.reporting_date._in_query %}
          daily_orders
        {% elsif dates.reporting_week._in_query %}
          weekly_orders
        {% else %}
          monthly_orders
        {% endif %}
      GROUP BY 1
      ;;
  }
}

示例

创建 customer_order_facts 派生表:

view: customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT( * ) AS lifetime_orders
      FROM
        order
      GROUP BY 1
      ;;
  }
}

注意事项

sql 引用的表必须可通过当前连接访问

包含派生表的 viewsexplorejoin 参数引用,而这些参数又由模型引用。模型会确定使用哪个数据库连接(请参阅 connection 参数文档页面)。数据库连接本身是在 Looker 的管理部分中定义的。在 sql 参数中引用表时,该表需要在关联的连接中可访问。

使用原始 SQL 和 sql,而不是 Looker 字段引用

您写入派生表 sql 参数的 SQL 应该是原始 SQL,引用数据库中的底层列和表。不应引用 Looker 字段名称或视图名称。

在派生表中使用 _filters['view_name.field_name'] 需要 sql_quote

在定义基于 SQL 的派生表时,如果您使用 _filters['view_name.field_name'] Liquid 变量(该变量的值在 SQL 中呈现,并且过滤条件返回字符串值),则需要在输出内容前后添加单引号。您可以通过添加 sql_quote Liquid 过滤条件来实现此目的。

否则,如果您未在 Liquid 变量后附加 | sql_quote,您将收到以下 LookML 警告:

Using "_filters[]" in Derived Table SQL without "sql_quote" is discouraged.

如需了解详情,请参阅 Liquid 变量参考文档页面。