Looker 可以将基于时间的数据转换为不同的时区,从而让您更轻松地理解这些数据。用户可以查看查询结果,并根据已转换为其本地时区的时间数据创建过滤条件。例如,纽约的用户查看加利福尼亚州创建的数据时,无需手动减去 3 小时即可过滤或解读查询。
Looker 会在查询 Look、探索或信息中心时生成 SQL,从而转换基于时间的数据。基础数据不受影响;而是使用 Looker 的时区设置转换查询结果。这也意味着,使用 SQL Runner 运行的查询不会转换基于时间的数据。
Looker 中的多项设置可用于指定如何转换基于时间的数据:
系统时区
系统时区是指运行 Looker 的服务器所配置的时区。Looker 的内部数据库,用于存储系统活动探索中的可用信息,以系统时区存储基于时间的数据。
无法通过 Looker 应用配置系统时区。对于 Looker 托管的实例,系统时区始终设置为 UTC。客户托管的实例可能位于不同的系统时区。更改系统时区并非易事,不建议这样做。如果您需要在“系统活动”探索中调整时间戳,请使用表格计算创建时间调整后的列。例如,如需将时间从世界协调时间 (UTC) 转换为美国东部标准时间 (EST),您可以创建一个包含表格计算 add_hours(-5, ${time})
的列。
数据库时区
添加数据库连接时,您可以在连接设置页面上设置数据库时区的值。
此设置表示数据库所在的时区,通常为世界协调时间 (UTC)。将此值设置为数据库所在时区以外的任何时区都可能会导致意外结果。
用户自选时区
对于基于时间的数据转换,最重要的设置是“用户自选时区”选项,该选项位于 Looker 的“管理”部分内的“常规设置”页面上。
您可以启用或停用用户自选时区:
- 启用后,每个 Looker 用户都会被分配一个时区,该时区会指定其查询结果的显示方式。
- 停用后,系统不会为用户账号分配个人时区。而是所有查询都使用 Query Time Zone 值运行。
启用用户专用时区后,用户可以在账号页面上设置自己的时区,Looker 管理员也可以在用户页面上为用户分配时区。如果未为用户设置时区,其账号会默认采用 Looker 应用时区设置。
每当用户创建查询时,系统都会以用户的时区创建该查询。因此,当查询返回基于时间的数据时,Looker 会将数据从数据库时区转换为用户所在的时区。当用户在查询中使用与时间相关的过滤条件值时,Looker 会将过滤条件值转换为数据库时区。
此外,启用此选项后,Looker 会在探索和Look 中显示时区下拉菜单。
此下拉菜单中的选项包括:
- 每个图块的时区(仅限信息中心):所有查询均以保存时所用的时区运行。
- 查看者时区:所有查询均在用户当前的时区设置中运行。
- 每个时区的列表,用户可以根据需要手动选择。
所有查询默认采用创建查询时所用的时区。换句话说,如果 Alice 创建了一个时区为“America/Los Angeles”的查询并将其发送给 Bob,那么即使 Bob 的时区设置为“America/New York”,Bob 也会看到时区为“America/Los Angeles”的查询。同样,细分始终默认采用创建查询时所用的时区。
用户在查看查询时,可以随时使用下拉菜单替换时区,为相应查询或相应信息中心的一组查询选择查看者时区或任何其他时区。
用户自选时区功能的相关注意事项
启用用户专用时区后,不同时区的用户可能会看到不同的数据。
例如,构成时间段 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 最新版本中哪些方言支持时区转换:
方言 | 是否支持? |
---|---|
Actian Avalanche | 否 |
Amazon Athena | 是 |
Amazon Aurora MySQL | 是 |
Amazon Redshift | 是 |
Amazon Redshift 2.1+ | 是 |
Amazon Redshift Serverless 2.1+ | 是 |
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+ with Native Driver | 是 |
Cloudera Impala with Native Driver | 是 |
DataVirtuality | 否 |
Databricks | 是 |
Denodo 7 | 否 |
Denodo 8 & 9 | 否 |
Dremio | 是 |
Dremio 11+ | 是 |
Exasol | 否 |
Firebolt | 否 |
Google BigQuery Legacy SQL | 否 |
Google BigQuery Standard SQL | 是 |
Google Cloud PostgreSQL | 是 |
Google Cloud SQL | 是 |
Google Spanner | 是 |
Greenplum | 是 |
HyperSQL | 否 |
IBM Netezza | 是 |
MariaDB | 是 |
Microsoft Azure PostgreSQL | 是 |
Microsoft Azure SQL Database | 是 |
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 pre-9.5 | 是 |
PrestoDB | 是 |
PrestoSQL | 是 |
SAP HANA | 否 |
SAP HANA 2+ | 否 |
SingleStore | 是 |
SingleStore 7+ | 是 |
Snowflake | 是 |
Teradata | 否 |
Trino | 是 |
Vector | 否 |
Vertica | 是 |