Looker 可以将基于时间的数据转换为不同的时区,使其更易于理解。用户可以查看查询结果,并创建过滤条件,并将基于时间的数据转换为其当地时区。例如,如果位于纽约的用户查看加利福尼亚州创建的数据,则无需手动减去 3 小时来过滤或解读其查询。
Looker 在对 Look、探索或信息中心执行查询期间生成 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 会在探索和 Look 中显示时区下拉菜单。
此下拉菜单中的选项包括:
- 每个图块的时区(仅限信息中心):所有查询均以保存它们的时区为准。
- 查看者时区:所有查询都以用户当前的时区设置运行。
- 每个时区的列表,用户可以根据需要手动选择。
所有查询都默认采用创建查询时所用的时区。换句话说,如果小红创建一个时区为“美国/洛杉矶”的查询并将其发送给小鲍,那么即使小鲍的时区设置为“美国/纽约”,Bob 也会看到时区为“美国/洛杉矶”的查询。同样,深入分析始终默认采用创建查询时所用的时区。
用户在查看查询时,可以使用下拉菜单覆盖时区,方法是选择自己的观看者时区,或为该查询或该信息中心的一组查询选择任何其他时区。
有关用户特定时区的注意事项
当您启用用户专用时区后,不同时区的用户看到的数据可能会有所不同。
例如,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 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 | 否 |
Denodo 8 星 | 否 |
德雷米奥 | 是 |
Dremio 11 及更高版本 | 是 |
Exasol | 否 |
火箭 | 否 |
Google BigQuery 旧版 SQL | 否 |
Google BigQuery 标准 SQL | 是 |
Google Cloud PostgreSQL | 是 |
Google Cloud SQL | 是 |
Google Spanner | 是 |
绿紫红 | 是 |
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 及更高版本 | 是 |
PostgreSQL 9.5 版之前的版本 | 是 |
PrestoDB | 是 |
PrestoSQL | 是 |
SAP HANA 2 及更高版本 | 否 |
SingleStore | 是 |
SingleStore 7 或更高版本 | 是 |
Snowflake | 是 |
Teradata | 否 |
Trino | 是 |
矢量 | 否 |
Vertica | 是 |