此页面指的是属于视图的
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_name和derived_table,Looker IDE 会返回错误。
如果视图不包含 sql_table_name 或 derived_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] ;;
如果您的方言需要英文双引号或英文单引号,您需要将方括号替换为这些字符。