Looker 可将基于时间的数据转换为不同的时区,让基于时间的数据更易于理解。用户可以查看查询结果,也可以使用已转换为其当地时区的时间数据创建过滤器。例如,位于纽约的用户在查看加利福尼亚州创建的数据时,无需手动减去 3 个小时来过滤或解读查询。
在查询数据时,Looker 会在生成 SQL 时转换基于时间的数据。底层数据不会受到影响;相反,查询结果会使用 Looker 的时区设置进行转换。这也意味着,使用 SQL Runner 运行的查询不会转换基于时间的数据。
Looker 中的多项设置指定了如何转换基于时间的数据:
系统时区
系统时区是为运行 Looker 的服务器配置的时区。Looker 的内部数据库用于存储 i__looker
和系统活动探索中提供的信息,并以系统时区存储基于时间的数据。
无法通过 Looker 应用配置系统时区。对于 Looker 托管的实例,系统时区始终设置为世界协调时间 (UTC)。客户托管的实例可能采用不同的系统时区。更改系统时区并非易事,也不建议这样做。如果您需要调整 i__looker
或“系统活动”探索中的时间戳,Looker 建议您使用表计算来创建经过时间调整的列。例如,如需从世界协调时间 (UTC) 转换为东部标准时间 (EST),您可以创建一个包含表格计算 add_hours(-5, ${time})
的列。
数据库时区
添加数据库连接时,您可以在连接设置页面上为数据库时区设置值。
此设置表示数据库所在的时区,通常为世界协调时间 (UTC)。如果将此值设置为数据库所在时区以外的任何值,都可能会导致意外结果。
用户自选时区
对于基于时间的数据转换,最重要的设置是用户专属时区选项,该选项位于 Looker 管理部分的常规设置页面上。
您可以通过以下步骤启用或停用用户特定时区:
- 启用后,系统会为每位 Looker 用户分配一个时区,而该时区会指定其查询结果的外观。
- 停用后,用户的账号不会分配单独的时区。相反,所有查询都使用查询时区值运行。
启用用户专用时区后,用户可以在账号页面上设置自己的时区,或者 Looker 管理员可以在用户页面上为用户分配时区。如果未为用户设置时区,其账号将默认采用 Looker 的应用时区设置。
每当用户创建查询时,系统均会以用户所在的时区创建该查询。因此,当查询返回基于时间的数据时,Looker 会将数据库时区中的数据转换为用户的时区。当用户在查询中使用与时间相关的过滤条件值时,Looker 会将过滤条件值转换为数据库时区。
此外,启用此选项后,Looker 会在 Explore 和 Looks 中显示一个时区下拉菜单。
此下拉菜单中的选项包括:
- 每个图块的时区(仅限信息中心):所有查询均在其保存时所在的时区运行。
- 查看者时区:所有查询都以用户当前的时区设置运行。
- 每个时区的列表,用户可以根据需要手动选择。
所有查询默认使用创建查询时所用的时区。换句话说,如果 Alice 创建了一个时区为“America/Los_Angeles”的查询并将其发送给 Bob,Bob 将看到时区为“America/Los_Angeles”的查询,即使 Bob 的时区设为“America/New_York”也是如此。同样,展开细目始终会默认采用创建查询时所用的时区。
每当查看查询时,用户均可使用下拉菜单替换时区,只需选择自己的查看者时区,或为该查询或该信息中心内的一组查询选择不同的时区。
关于用户特定时区的注意事项
启用用户专属时区后,不同时区的用户看到的数据可能会有所不同。
例如,不同时区的“last month
”时间段的确切构成时间可能不同,因此,如果用户位于不同的时区,但都使用“last month
”进行过滤,则他们可能会看到不同的数据值。
应用时区
您可以在 Looker 管理部分的常规设置页面上配置应用时区设置。
应用时区是内容提交的默认时区。用于内容提交的时区不会影响查询返回基于时间的数据;只会影响数据提交的时间。
如果您启用用户专用时区选项,则应用时区将成为未为其账号设置时区值的用户的默认时区。
查询时区
只有在您停用了用户自选时区的情况下,系统才会显示查询时区选项。在这种情况下,您可以在连接设置页面上添加与数据库的连接时设置查询时区值。
如果您停用用户特定时区,则所有基于时间的数据查询都会使用查询时区,Looker 会将所有基于时间的数据从数据库时区转换为查询时区。
convert_tz
LookML 参数
默认情况下,Looker 会进行时区转换。如需为单个字段停用时区转换,您可以使用 convert_tz
LookML 参数。例如:
dimension_group: created {
type: time
timeframes: [time, date]
convert_tz: no
}
如需了解详情,请参阅 convert_tz
参数文档页面。
sql
个 LookML 参数
您还可以在 LookML 维度的 sql
参数中使用数据库方言的函数手动定义时区转换。例如,如需在 MySQL 中手动定义时区转换,您可以使用以下 LookML:
dimension_group: created {
type: time
timeframes: [time, date]
sql: CONVERT_TZ(${TABLE}.created_at,'UTC','PST') ;;
}
MySQL 方言备注
MySQL 需要先有时区表,然后其时区转换函数才能正常运行。此命令可以由管理员运行。如需了解详情,请参阅 MySQL 文档。
Postgres 方言备注
Looker 使用驱动程序设置来选择目标时区。与 pgAdmin 相比,这可能会影响 SQL Runner 中查询的处理方式,因为 Looker 将使用所选时区的当前日期时间。
对时区转换的数据库方言支持
若要让 Looker 转换 Looker 项目中的时区,您的数据库方言必须支持时区转换。下表显示了最新版 Looker 支持时区转换的方言:
方言 | 是否支持? |
---|---|
阿克蒂安雪崩 | 否 |
Amazon Athena | 是 |
Amazon Aurora MySQL | 是 |
Amazon Redshift | 是 |
Apache Druid | 否 |
Apache Druid 0.13+ | 是 |
Apache Druid 0.18 及更高版本 | 是 |
Apache Hive 2.3 及更高版本 | 是 |
Apache Hive 3.1.2 及更高版本 | 是 |
Apache Spark 3 及更高版本 | 是 |
ClickHouse | 否 |
Cloudera Impala 3.1 及以上版本 | 是 |
搭配原生驱动程序的 Cloudera Impala 3.1 及更高版本 | 是 |
带有原生驱动程序的 Cloudera Impala | 是 |
DataVirtuality | 否 |
Databricks | 是 |
Denodo 7 购物中心 | 否 |
迪诺多 8 号星 | 否 |
Dremio | 是 |
Dremio 11+ | 是 |
Exasol | 否 |
Firebolt | 否 |
Google BigQuery 旧版 SQL | 否 |
Google BigQuery 标准 SQL | 是 |
Google Cloud PostgreSQL | 是 |
Google Cloud SQL | 是 |
Google Spanner | 是 |
Greenplum | 是 |
HyperSQL | 否 |
IBM Netezza | 是 |
MariaDB | 是 |
Microsoft Azure PostgreSQL | 是 |
Microsoft Azure SQL 数据库 | 是 |
Microsoft Azure Synapse Analytics | 是 |
Microsoft SQL Server 2008 及更高版本 | 否 |
Microsoft SQL Server 2012 及更高版本 | 否 |
Microsoft SQL Server 2016 | 是 |
Microsoft SQL Server 2017 及更高版本 | 是 |
MongoBI | 否 |
MySQL | 是 |
MySQL 8.0.12 及更高版本 | 是 |
Oracle | 是 |
Oracle ADWC | 是 |
PostgreSQL 9.5 及更高版本 | 是 |
9.5 之前的 PostgreSQL | 是 |
PrestoDB | 是 |
PrestoSQL | 是 |
SAP HANA 2+ | 否 |
SingleStore | 是 |
单一商店 7+ | 是 |
Snowflake | 是 |
TeraData | 否 |
Trino | 是 |
矢量 | 否 |
Vertica | 是 |