sql_table_name(适用于视图)

此页面指的是属于视图sql_table_name 参数。

sql_table_name 还可以用作联接的一部分,如 sql_table_name(用于联接)参数文档页面中所述。

sql_table_name 还可以用作探索的一部分,如 sql_table_name(适用于探索)参数文档页面中所述。

用法

view: view_name {
  sql_table_name: table_name ;;
}
层次结构
sql_table_name
默认值
视图的名称

接受
数据库中的表名称

特殊规则

定义

sql_table_name 参数用于指定数据库中将由视图查询的表。

如果您想基于派生表创建视图,请勿使用 sql_table_name 参数。请改用 derived_table 文档页面中介绍的 derived table 参数。如果您在视图文件中同时包含 sql_table_namederived_table,Looker IDE 将返回错误。

如果视图不包含 sql_table_namederived_table 参数,Looker 会假定该视图基于数据库表,并且数据库表的名称与视图的名称一致。换句话说,就是这样:

view: my_name { ... }

在逻辑上等效于以下内容:

view: my_name {
  sql_table_name: my_name ;;
}

回退到此默认行为而不使用 sql_table_name 是很常见的做法。不过,在某些主要情况下,此行为会很有用。首先,在某些情况下,您可能希望视图的名称与基础表的名称不同,例如为了清理杂乱的表名称:

view: orders {
  sql_table_name: prod_orders_2 ;;
}

此外,有时视图需要基于不在数据库用户的默认搜索路径中的数据库或架构。然后,您可以使用 <schema_name>.<table_name> 格式限定表名称的范围,如下所示:

view: desired_view_name {
  sql_table_name: database_name.schema_name.table_name ;;
}

确定表名称的范围

当您仅使用表名称引用表时,Looker 将使用 Looker 管理员在数据库连接的连接设置中配置的默认搜索路径(数据库和架构)。如需了解详情,请参阅本页面的注意事项部分。

如果您需要引用不在数据库用户的默认搜索路径中的其他数据库和架构中的表,可以使用 <database_name>.<schema_name>.<table_name> 格式限定表名称,以指向其他数据库或架构:

  • 如需引用其他架构中的表,请使用 <schema_name>.<table_name>,如本页中的示例所示。
  • 如需引用其他数据库中的表,请使用完整的 <database_name>.<schema_name>.<table_name>

对于 Google BigQuery 连接,您可以使用 <project_name>.<dataset_name>.<table_name> 格式限定表名称,以引用其他项目和数据集中的表。如需了解详情,请参阅 Google BigQuery 连接文档页面。

联邦联接

联接来自不同数据库的两个表称为联合联接。如果两个数据库使用相同的 SQL 方言,并且该方言支持联合联接,并且这两个数据库都可以通过 Looker 中的同一连接访问,则可以使用 Looker 执行联合联接。根据数据库配置,这两个表可能还需要位于同一物理机器上。

在这些条件下,您可以通过在相应视图的 sql_table_name 参数中指定每个表的数据库名称来创建联合联接:

view: view_1 {
  sql_table_name: database_name.table_1 ;;
}

view: view_2 {
  sql_table_name: another_database_name.table_2 ;;
}

然后,使用 sql_on 参数联接这些视图:

explore: view_1 {
  join: view_2 {
    sql_on: ${view_1.view_1_ID} = ${view_2.view_2_ID} ;;
  }
}

如果您想联接采用不同 SQL 方言的数据库,建议您将一个数据库复制到另一个数据库中,以便从单个来源提取所有数据。

示例

此示例使 customers 视图依赖于默认架构中的 customer_1 表:

view: customers {
  sql_table_name: customer_1 ;;
}

此示例通过限定表名称以包含架构名称(使用 <schema_name>.<table_name> 格式),使 customers 视图依赖于 analytics 中的 customer_1 表:

view: customers {
  sql_table_name: analytics.customer_1 ;;
}

注意事项

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

sql_table_name 参数在 view 对象中使用时,该 view 对象可在 explore 对象中引用,而 explore 对象又可在模型对象中引用。模型对象中定义了数据库 connection。当您在 sql_table_name 参数中引用数据库表时,该表需要在模型文件中指定的关联连接中可访问。

默认数据库架构(或 Google BigQuery 的结算项目数据集)由 Looker 管理员在创建 Looker 与数据库的连接时定义。

不友好的表格名称可能需要进行额外的格式设置

某些方言要求将包含不支持的字符(也称为“不友好的”表名称)的表名称放在方括号、双引号或单引号中。例如,表名称 Customers.PaymentInfo 在表名称中包含句点,这可能会被解读为架构 Customers 中名为 PaymentInfo 的表。为了纠正此问题,如果您的方言要求使用方括号,您可以将表名称放在方括号中,如下所示:

sql_table_name: [Customers.PaymentInfo] ;;

如果您的方言需要英文双引号或英文单引号,您需要将方括号替换为这些字符。