BigQuery 时间戳函数:简化的语法和示例查询

2022-06-01 00:00:00 函数 代码 时间 复制 数据类型

进入数据科学领域,并决定使用一种工具来解决一个特定的问题,有时是一种挑战,特别是当你有大量的选择。在这个数据转型的时代,企业不断寻求改善日常数据处理的方法,并寻找方法将这些操作的成本降到低,在云中处理这些数据转型已成为当务之急,因为它更容易管理,也更有成本效益。

多年来,数据仓库的架构已经迅速改变,大多数的服务提供商现在都是基于云的。因此,公司越来越多地与云端的此类产品保持一致,因为它为他们提供了较低的前期成本,增强了可扩展性,以及相对于传统的内部数据仓库系统的性能。谷歌BigQuery是其中一个的和广泛接受的基于云的数据仓库应用程序。

在这篇文章中,你将获得有关BigQuery时间戳功能的信息。你也将获得对谷歌BigQuery的全面了解,它的主要特点,日期和时间功能,以及BigQuery的数据类型。继续阅读以了解有关BigQuery时间戳功能的深入信息。

目录

  • Google BigQuery简介
    • 谷歌BigQuery的主要特点
  • 了解Google BigQuery中的日期和时间功能
  • BigQuery中的日期和时间数据类型
  • 标准SQL中的时间戳函数
    • BigQuery时间戳功能。CURRENT_TIMESTAMP 函数
    • BigQuery时间戳功能。EXTRACT函数
    • BigQuery时间戳功能。STRING功能
    • 大数据时间戳功能。时间戳功能
    • BigQuery时间戳功能。函数:TIMESTAMP_ADD
    • BigQuery的时间戳功能。时间戳函数:TIMESTAMP_SUB
    • BigQuery时间戳功能。大数据时间戳函数:TIMESTAMP_DIFF
    • BigQuery时间戳功能。函数:TIMESTAMP_TRUNC
    • BigQuery时间戳功能。FORMAT_TIMESTAMP函数
    • BigQuery时间戳功能。PARSE_TIMESTAMP函数
  • 总结

谷歌BigQuery简介

图片来源

Google BigQuery是一个基于云的数据仓库,提供大数据分析网络服务来处理PB级的数据。它的目的是为了分析大规模的数据。它由两个不同的部分组成。存储查询处理。它采用了Dremel查询引擎来处理查询,并建立在Colossus文件系统上进行存储。这两个组件是解耦的,可以独立和按需进行扩展。

Google BigQuery完全由云服务提供商管理。我们不需要部署任何资源,如磁盘或虚拟机。它被设计用来处理只读数据。Dremel和Google BigQuery使用柱状存储进行快速数据扫描,以及使用ANSI SQL执行查询的树状结构,并在大规模计算机集群中汇总结果。此外,由于其部署周期短,按需定价,Google BigQuery是无服务器的,并被设计为具有极强的可扩展性。

有关Google Bigquery的进一步信息,请关注官方文档。

谷歌BigQuery的主要特点

图片来源

  • 可扩展性。Google BigQuery利用其大规模并行计算和安全存储引擎提供真正的可扩展性和一致的性能。
  • 数据输入格式。Google BigQuery允许用户加载各种格式的数据,如AVRO、CSV、JSON等。
  • 内置人工智能和ML:它支持使用其自动ML表功能进行预测分析,这是一个无代码界面,有助于开发具有佳精度的模型。谷歌BigQuery ML是另一项功能,支持K手段、逻辑回归等算法。
  • 平行处理。它使用基于云的并行查询处理引擎,同时从成千上万的磁盘中读取数据。

关于谷歌BigQuery的进一步信息,你可以在这里查看官方网站。

用Hevo的无代码数据管道简化BigQuery的ETL和分析

像Hevo Data这样完全管理的无代码数据管道平台,可以帮助你以毫不费力的方式,从100多个不同的来源 (包括30多个免费来源)整合和加载数据到数据仓库,如Google BigQuery或你选择的目的地。Hevo以其小的学习曲线可以在短短几分钟内完成设置,允许用户在不影响性能的情况下加载数据。它与众多数据源的强大集成使用户能够顺利地引入不同种类的数据,而不必编写一行代码。

免费开始使用Hevo

看看Hevo的一些很酷的功能吧。

  • 完全自动化。Hevo平台可以在短短几分钟内完成设置,并且需要小的维护。
  • 变换。Hevo通过Python代码提供预加载转换。它还允许你为你设置的数据管道中的每个事件运行转换代码。你需要编辑转化方法中收到的事件对象的属性作为参数来进行转化。Hevo还提供拖放转换,如日期和控制函数、JSON和事件处理等,仅举几例。这些都可以在投入使用之前进行配置和测试。
  • 连接器。Hevo支持 100多个与SaaS平台、文件、数据库、分析和BI工具的 集成。它支持各种目的地,包括Google BigQuery、Amazon Redshift、Snowflake数据仓库;Amazon S3数据湖;以及MySQL、SQL Server、TokuDB、DynamoDB、PostgreSQL数据库等等。
  • 实时数据传输。Hevo提供实时的数据迁移,所以你可以随时拥有可供分析的数据。
  • 完整和准确的数据传输。Hevo强大的基础设施确保了可靠的数据传输和零数据丢失。
  • 可扩展的基础设施。Hevo有内置的100多个来源**(包括30多个免费来源)**的集成,可以帮助你根据需要扩展你的数据基础设施。
  • 24/7现场支持。 Hevo团队全天候通过聊天,电子邮件和支持电话为你提供卓越的支持。
  • 模式管理。H evo消除了繁琐的模式管理任务,自动检测传入数据的模式并将其映射到目标模式。
  • 实时监控。Hevo允许你监控数据流,所以你可以检查你的数据在某个特定时间点的位置。

在这里注册获得14天的免费试用!

了解谷歌BigQuery中的日期和时间功能

BigQuery支持四套日期和时间功能。日期(DATE)、时间(TIME)、日期时间(DATETIME )和 时间戳(TIMESTAMP)。这些集合包括更具体的函数,如CURRENT_DATETIME, DATE_SUB, EXTRACT, FORMAT_TIME 等。这些函数允许BigQuery用户处理日期和时间数据类型。例如,他们可以提取日期或时间表达式的一部分,为日期或时间添加一个区间,等等。

BigQuery中的日期和时间数据类型

在Google BigQuery中可用于时间和日期的数据类型如下。

  • 日期类型。它表示一个日历日期,不受时区限制。包括以下信息:年、月、日:YYYY-MM-DD(例如:2021-05-15)。
  • 时间类型。它显示时间的方式与数字手表相同;它不依赖于日期。其格式是。HH:MM:SS(例如:16:45:14)。
  • 日期时间类型。它包括日历日期和时间。它不跟踪时区。其格式是。YYYY-MM-DD HH:MM:SS(例如:2021-05-15 16:45:23)。
  • 时间戳类型。日期、时间和时区信息都包含在时间戳中。如果没有给定时区,格式就会退回到UTC。其格式是。YYYY-MM-DD [时区] HH:MM:SS(例如:2021-05-15 16:45:18 UTC)。

标准SQL中的时间戳函数

时间戳函数从一个值或一对值中返回一个时间戳。Google BigQuery支持以下BigQuery时间戳函数

一些BigQuery的时间戳函数如下。

  • BigQuery时间戳功能。CURRENT_TIMESTAMP 函数
  • BigQuery时间戳功能。EXTRACT功能
  • 大数据时间戳功能。STRING功能
  • 大数据时间戳功能。时间戳功能
  • BigQuery时间戳功能。函数:TIMESTAMP_ADD
  • BigQuery的时间戳功能。时间戳函数:TIMESTAMP_SUB
  • BigQuery时间戳功能。大数据时间戳函数:TIMESTAMP_DIFF
  • BigQuery时间戳功能。函数:TIMESTAMP_TRUNC
  • BigQuery时间戳功能。FORMAT_TIMESTAMP函数
  • BigQuery时间戳功能。PARSE_TIMESTAMP函数

1) CURRENT_TIMESTAMP函数

A) 语法

CURRENT_TIMESTAMP()
复制代码

B) 描述

**CURRENT TIMESTAMP()**返回一个TIMESTAMP值,该值是连续的和不含糊的,每分钟有60秒,并且不在闰秒上重复数值。在这个BigQuery Timestamp函数中,括号的使用是可选的。

这个BigQuery Timestamp函数处理闰秒的方法是根据插入的闰秒在20个小时的时间范围内分散它们。

C)支持的输入类型

不适用

D) 结果数据类型

TIMESTAMP数据类型

E) 示例

SELECT CURRENT_TIMESTAMP() as now;
复制代码

输出。

+--------------------------------+
| now                            |
+--------------------------------+
| 2020-06-02 23:57:12.120174 UTC |
+--------------------------------+
复制代码

当一个名为current_timestamp的列出现时,列名和没有括号的函数调用是不明确的。为了确保函数调用,你可以添加括号。为了确保列名的正确性,用它的范围变量来限定它。例如,下面的查询将选择now列中的函数和current_timestamp列中的表列。

WITH t AS (SELECT 'column value' ASWITH t AS (SELECT 'column value' AS `current_timestamp`)
SELECT current_timestamp() AS now, t.current_timestamp FROM t; `current_timestamp`)SELECT current_timestamp() AS now, t.current_timestamp FROM t
复制代码

输出。

+--------------------------------+-------------------+
| now                            | current_timestamp |
+--------------------------------+-------------------+
| 2020-06-02 23:57:12.120174 UTC | column value      |
+--------------------------------+-------------------+
复制代码

2) EXTRACT函数

A) 语法

EXTRACT(part FROM timestamp_expression [AT TIME ZONE timezone])
复制代码

B)描述

这个BigQuery Timestamp函数从提供的timestamp_expression中返回一个与指定部分相对应的值。这个函数支持一个可选的**时区**参数。

部分值可从以下方面选择。

  • 微秒(MICROSECOND
  • 毫秒
  • 分钟
  • 小时
  • 周的一天
  • 年的一天
  • 周()
  • 周(ISOWEEK
  • 第四季度
  • 年(ISOYEAR)
  • 日期
  • 日期
  • 时间

低阶时间段在返回值中被截断。当提取秒时,EXTRACT截断了毫秒和微秒的值。

关于部分数值的进一步信息,请访问这里。

C)返回数据类型

INT64,除了当。

  • partDATE,那么它返回一个DATE对象。
  • partDATETIME,那么它返回一个DATETIME对象。
  • 部分TIME,那么它返回一个TIME对象。

D) 示例

这里,EXTRACT返回一个与DAY 时间部分相对应的值。

WITH Input AS (SELECT TIMESTAMP("2008-12-25 05:30:00+00") AS timestamp_value)
SELECT
  EXTRACT(DAY FROM timestamp_value AT TIME ZONE "UTC") AS the_day_utc,
  EXTRACT(DAY FROM timestamp_value AT TIME ZONE "America/Los_Angeles") AS the_day_california
FROM Input;
复制代码

输出。

+-------------+--------------------+
| the_day_utc | the_day_california |
+-------------+--------------------+
| 25          | 24                 |
+-------------+--------------------+
复制代码

这里,EXTRACT 从一列时间戳中返回对应于不同时间部分的值。

WITH Timestamps AS (
  SELECT TIMESTAMP("2005-01-03 12:34:56+00") AS timestamp_value UNION ALL
  SELECT TIMESTAMP("2007-12-31 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2009-01-01 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2009-12-31 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2017-01-02 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2017-05-26 12:00:00+00")
)
SELECT
  timestamp_value,
  EXTRACT(ISOYEAR FROM timestamp_value) AS isoyear,
  EXTRACT(ISOWEEK FROM timestamp_value) AS isoweek,
  EXTRACT(YEAR FROM timestamp_value) AS year,
  EXTRACT(WEEK FROM timestamp_value) AS week
FROM Timestamps
ORDER BY timestamp_value;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+---------+---------+------+------+
| timestamp_value         | isoyear | isoweek | year | week |
+-------------------------+---------+---------+------+------+
| 2005-01-03 12:34:56 UTC | 2005    | 1       | 2005 | 1    |
| 2007-12-31 12:00:00 UTC | 2008    | 1       | 2007 | 52   |
| 2009-01-01 12:00:00 UTC | 2009    | 1       | 2009 | 0    |
| 2009-12-31 12:00:00 UTC | 2009    | 53      | 2009 | 52   |
| 2017-01-02 12:00:00 UTC | 2017    | 1       | 2017 | 1    |
| 2017-05-26 12:00:00 UTC | 2017    | 21      | 2017 | 21   |
+-------------------------+---------+---------+------+------+
复制代码

在下面的例子中,timestamp_expression是在星期一。EXTRACT使用周日开始的星期来计算列,而第二列则使用周一开始的星期来计算。

WITH table AS (SELEWITH table AS (SELECT TIMESTAMP("2017-11-05 00:00:00+00") AS timestamp_value)
SELECT
  timestamp_value,
  EXTRACT(WEEK(SUNDAY) FROM timestamp_value) AS week_sunday,
  EXTRACT(WEEK(MONDAY) FROM timestamp_value) AS week_monday
FROM table;CT TIMESTAMP("2017-11-05 00:00:00+00") AS timestamp_value)SELECT  timestamp_value,  EXTRACT(WEEK(SUNDAY) FROM timestamp_value) AS week_sunday,  EXTRACT(WEEK(MONDAY) FROM timestamp_value) AS week_mondayFROM table;-- Display of results may differ, depending upon the environment and time zone where this query was executed.+-------------------------+-------------+---------------+| timestamp_value         | week_sunday | week_monday   |+-------------------------+-------------+---------------+| 2017-11-05 00:00:00 UTC | 45          | 44            |+-------------------------+-------------+---------------+
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------+---------------+
| timestamp_value         | week_sunday | week_monday   |
+-------------------------+-------------+---------------+
| 2017-11-05 00:00:00 UTC | 45          | 44            |
+-------------------------+-------------+---------------
复制代码

3) STRING

A) 语法

STRING(timestamp_expression[, timezone])
复制代码

B) 描述

这个BigQuery Timestamp函数将一个timestamp_expression转换为STRING数据类型。它还支持一个可选的参数来指定一个时区。

C)返回数据类型

STRING数据类型

D)示例

SELECT STRING(TIMESTAMP "2008-12-25 15:30:00+00", "UTC") AS string;
复制代码

输出。

+-------------------------------+
| string                        |
+-------------------------------+
| 2008-12-25 15:30:00+00        |
+-------------------------------+
复制代码

4) TIMESTAMP函数

A) 语法

TIMESTAMP(string_expression[, timezone])
TIMESTAMP(date_expression[, timezone])
TIMESTAMP(datetime_expression[, timezone])
复制代码

B) 描述

  • string_expression[, timezone]。它将一个STRING表达式转换为TIMESTAMP数据类型。string_expression必须包括一个时间戳字样。如果string_expression在时间戳字面中包含一个时区,那么就不应该包含明确的时区参数。
  • date_expression[, timezone]。它将一个DATE对象转换为TIMESTAMP数据类型。
  • datetime_expression[, timezone]。它将一个DATETIME对象转换为TIMESTAMP数据类型。

这个BigQuery Timestamp函数支持一个可选的参数来指定一个时区。如果没有指定时区,将使用默认的时区,即UTC。

C)返回数据类型

TIMESTAMP数据类型

D)示例

SELECT TIMESTAMP("2008-12-25 15:30:00+00") AS timestamp_str;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
复制代码
SELECT TIMESTAMP("2008-12-25 15:30:00", "America/Los_Angeles") AS timestamp_str;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 23:30:00 UTC |
+-------------------------+
复制代码
SELECT TIMESTAMP("2008-12-25 15:30:00 UTC") AS timestamp_str;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
复制代码
SELECT TIMESTAMP(DATETIME "2008-12-25 15:30:00") AS timestamp_datetime;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_datetime      |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
复制代码
SELECT TIMESTAMP(DATE "2008-12-25") AS timestamp_date;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_date          |
+-------------------------+
| 2008-12-25 00:00:00 UTC |
+-------------------------+
复制代码

5) TIMESTAMP_ADD函数

A) 语法

TIMESTAMP_ADD(timestamp_expression, INTERVAL int64_expression date_part)
复制代码

B) 描述

这个BigQuery时间戳函数将日期部分int64_表达式单位添加到时间戳,与任何时区无关。

TIMESTAMP_ADD支持以下日期部分的值。

  • 微秒(MICROSECOND
  • 毫秒
  • 分钟
  • 小时(60分钟
  • 一天(24小时

C)返回数据类型

TIMESTAMP数据类型

D)示例

SELECT  TIMESTAMP("2008-12-25 15:30:00+00"SELECT
  TIMESTAMP("2008-12-25 15:30:00+00") AS original,
  TIMESTAMP_ADD(TIMESTAMP "2008-12-25 15:30:00+00", INTERVAL 10 MINUTE) AS later) AS original,  TIMESTAMP_ADD(TIMESTAMP "2008-12-25 15:30:00+00", INTERVAL 10 MINUTE) AS later;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+
| original                | later                   |
+-------------------------+-------------------------+
| 2008-12-25 15:30:00 UTC | 2008-12-25 15:40:00 UTC |
+-------------------------+-------------------------+
复制代码

6) TIMESTAMP_SUB函数

A) 语法

TIMESTAMP_SUB(timestamp_expression, INTERVAL int64_expression date_part)
复制代码

B) 描述

这个BigQuery时间戳函数从时间戳中减去日期_部分int64_表达式单位,与任何时区无关。

TIMESTAMP_SUB支持以下的date_part的值。

  • 微秒(MICROSECOND
  • 毫秒
  • 分钟
  • 小时(60分钟
  • 一天(24小时

C)返回数据类型

TIMESTAMP数据类型

D)示例

SELECT
  TIMESTAMP("2008-12-25 15:30:00+00") AS original,
  TIMESTAMP_SUB(TIMESTAMP "2008-12-25 15:30:00+00", INTERVAL 10 MINUTE) AS earlier;

复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+
| original                | earlier                 |
+-------------------------+-------------------------+
| 2008-12-25 15:30:00 UTC | 2008-12-25 15:20:00 UTC |
+-------------------------+-------------------------+
复制代码

7) TIMESTAMP_DIFF函数

A) 语法

TIMESTAMP_DIFF(timestamp_expression_a, timestamp_expression_b, date_part)
复制代码

B) 描述

这个BigQuery Timestamp函数返回两个TIMESTAMP对象**(timestamp_expression_a - timestamp_expression_b)之间完整的指定日期_部分的间隔数。如果个TIMESTAMP在第二个之前,输出为负数。如果计算结果溢出,例如两个TIMESTAMP对象之间的微秒之差会溢出一个INT64**值,则抛出一个异常。

TIMESTAMP_DIFF支持以下日期部分的值。

  • MICROSECOND
  • 毫秒
  • MINUTE
  • 小时(60分钟
  • 一天(24小时

C)返回数据类型

INT64数据类型

D)示例

SELECT
  TIMESTAMP("2010-07-07 10:20:00+00") AS later_timestamp,
  TIMESTAMP("2008-12-25 15:30:00+00") AS earlier_timestamp,
  TIMESTAMP_DIFF(TIMESTAMP "2010-07-07 10:20:00+00", TIMESTAMP "2008-12-25 15:30:00+00", HOUR) 
AS hours;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+-------+
| later_timestamp         | earlier_timestamp       | hours |
+-------------------------+-------------------------+-------+
| 2010-07-07 10:20:00 UTC | 2008-12-25 15:30:00 UTC | 13410 |
+-------------------------+-------------------------+-------+
复制代码

在下面的例子中,个时间戳发生在第二个时间戳之前,导致输出为负数。

SELECT TIMESTAMP_DIFF(TIMESTAMP "2018-08-14", TIMESTAMP "2018-10-14", DAY);
复制代码

输出。

+---------------+
| negative_diff |
+---------------+
| -61           |
+---------------+
复制代码

在这个例子中,结果是0,因为只包括整个指定的HOUR时间间隔的数量。

SELECT TIMESTAMP_DIFF("2001-02-01 01:00:00", "2001-02-01 00:00:01", HOUR)
复制代码

输出结果。

+---------------+
| negative_diff |
+---------------+
| 0             |
+---------------+
复制代码

8) TIMESTAMP_TRUNC函数

A) 语法

TIMESTAMP_TRUNC(timestamp_expression, date_part[, timezone])
复制代码

B)描述

这个BigQuery Timestamp函数将时间戳截断到date_part的粒度。

TIMESTAMP_TRUNC支持以下日期部分的值。

  • 微秒(MICROSECOND
  • 毫秒
  • MINUTE
  • 小时
  • 周()
  • 第四季度
  • ISOYEAR

TIMESTAMP_TRUNC函数支持一个可选的时区参数。这个参数适用于以下日期部分

  • MINUTE
  • 小时
  • 周()
  • 第四季度
  • ISOYEAR

关于date_part值的进一步信息,请访问这里。

如果你想使用默认时区UTC以外的时区,作为截断操作的一部分,可以使用这些参数。

当把TIMESTAMP截断到MINUTEHOUR时,TIMESTAMP_TRUNC确定TIMESTAMP在指定(或默认)时区的民用时间,并从该TIMESTAMP中减去分和秒(当截断到HOUR时)或秒(当截断到MINUTE时)。虽然这在大多数情况下提供了直观的结果,但在不以小时为单位的夏令时过渡期,其结果就不直观了。

C)返回数据类型

TIMESTAMP数据类型

D) 示例

SELECT  TIMESTAMP_TRUNC(TIMESTAMP "2008-12-25 15:30:0SELECT FORMAT_TIMESTAMP("%c", TIMESTAMP "2008-12-25 15:30:00+00", "UTC") AS formatted;0+00", DAY, "UTC") AS utc,  TIMESTAMP_TRUNC(TIMESTAMP "2008-12-25 15:30:00+00", DAY, "America/Los_Angeles") AS la;      
复制代码

输出。

+--------------------------+
| formatted                |
+--------------------------+
| Thu Dec 25 15:30:00 2008 |
+--------------------------+
复制代码

在下面的例子中,timestamp_expression的时区偏移为+12。UTC时间的timestamp_expression显示在栏。第二列显示TIMESTAMP_TRUNC对星期一开始的星期的结果。TIMESTAMP_TRUNC时间戳_表达式截断到前一个星期一,因为它在UTC中是星期天。相同的函数在第三栏中显示,其中有可选的时区定义参数 "太平洋/奥克兰"。代码在这里使用新西兰夏令时来截断timestamp_expression,而新西兰夏令时是在星期一。

SELECT
  timestamp_value AS timestamp_value,
  TIMESTAMP_TRUNC(timestamp_value, WEEK(MONDAY), "UTC") AS utc_truncated,
  TIMESTAMP_TRUNC(timestamp_value, WEEK(MONDAY), "Pacific/Auckland") AS nzdt_truncated
FROM (SELECT TIMESTAMP("2017-11-06 00:00:00+12") AS timestamp_value);
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+-------------------------+
| timestamp_value         | utc_truncated           | nzdt_truncated          |
+-------------------------+-------------------------+-------------------------+
| 2017-11-05 12:00:00 UTC | 2017-10-30 00:00:00 UTC | 2017-11-05 11:00:00 UTC |
+-------------------------+-------------------------+-------------------------+
复制代码

在下面的例子中,原始的timestamp_expression是在公历2015年。然而,带有ISOYEAR日期部分的TIMESTAMP_TRUNC时间戳_表达式截断到ISO年的开始,而不是公历年。因为2015年日历年的个星期四是2015-01-01,2015年的ISO年开始于之前的星期一,2014-12-29。因此,在时间戳_表达式2015-06-15 00:00:00+00之前的ISO年边界是2014-12-29。

SELECT
  TIMESTAMP_TRUNC("2015-06-15 00:00:00+00", ISOYEAR) AS isoyear_boundary,
  EXTRACT(ISOYEAR FROM TIMESTAMP "2015-06-15 00:00:00+00") AS isoyear_number;
复制代码

输出。

-- Display of results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+----------------+
| isoyear_boundary        | isoyear_number |
+-------------------------+----------------+
| 2014-12-29 00:00:00 UTC | 2015           |
+-------------------------+----------------+
复制代码

9)FORMAT_TIMESTAMP函数

A) 语法

FORMAT_TIMESTAMP(format_string, timestamp[, timezone])
复制代码

B) 描述

这个BigQuery Timestamp函数根据指定的format_string 格式化一个时间戳。

C)返回数据类型

STRING数据类型

D) 示例

SELECT FORMAT_TIMESTAMP("%c", TIMESTAMPSELECT FORMAT_TIMESTAMP("%c", TIMESTAMP "2008-12-25 15:30:00+00", "UTC") AS formatted; "2008-12-25 15:30:00+00", "UTC") AS formatted;
复制代码

输出。

+--------------------------+
| formatted                |
+--------------------------+
| Thu Dec 25 15:30:00 2008 |
+--------------------------+
复制代码
SELECT FORMAT_TIMESTAMP("%b-%d-%Y", TIMESTAMP "2008-12-25 15:30:00+00") 
 AS SELECT FORMAT_TIMESTAMP("%b-%d-%Y", TIMESTAMP "2008-12-25 15:30:00+00") AS formatted; 
复制代码

输出。

+-------------+
| formatted   |
+-------------+
| Dec-25-2008 |
+-------------+
复制代码
SELECT FORMAT_TIMESTAMP("%b %Y", TIMESTASELECT FORMAT_TIMESTAMP("%b %Y", TIMESTAMP "2008-12-25 15:30:00+00")
  AS formatted;MP "2008-12-25 15:30:00+00")  AS formatted;
复制代码

输出。

+-------------+
| formatted   |
+-------------+
| Dec 2008    |
+-------------+
复制代码

10) PARSE_TIMESTAMP函数

A) 语法

PARSE_TIMESTAMP(format_string, timestamp_string[, timezone])
复制代码

B) 描述

这个BigQuery Timestamp函数将时间戳的字符串表示转换为TIMESTAMP对象。

format_string包含格式元素,指定时间戳_字符串的格式化。 时间戳字符串中的每个元素都必须与format_string中的一个元素成对。format_string中每个元素的位置必须与 timestamp_string中每个元素的位置匹配。

-- This works because elements on both sides m-- This works because elements on both sides match.
SELECT PARSE_TIMESTAMP("%a %b %e %I:%M:%S %Y", "Thu Dec 25 07:30:00 2008")

-- This doesn't work because the year element is in different locations.
SELECT PARSE_TIMESTAMP("%a %b %e %Y %I:%M:%S", "Thu Dec 25 07:30:00 2008")

-- This doesn't work because one of the year elements is missing.
SELECT PARSE_TIMESTAMP("%a %b %e %I:%M:%S", "Thu Dec 25 07:30:00 2008")

-- This works because %c can find all matching elements in timestamp_string.
SELECT PARSE_TIMESTAMP("%c", "Thu Dec 25 07:30:00 2008")atch.SELECT PARSE_TIMESTAMP("%a %b %e %I:%M:%S %Y", "Thu Dec 25 07:30:00 2008")-- This doesn't work because the year element is in different locations.SELECT PARSE_TIMESTAMP("%a %b %e %Y %I:%M:%S", "Thu Dec 25 07:30:00 2008")-- This doesn't work because one of the year elements is missing.SELECT PARSE_TIMESTAMP("%a %b %e %I:%M:%S", "Thu Dec 25 07:30:00 2008")-- This works because %c can find all matching elements in timestamp_string.SELECT PARSE_TIMESTAMP("%c", "Thu Dec 25 07:30:00 2008")
复制代码

格式字符串完全支持大多数格式元素,除了**%Q**、%a%A、%g、%G、%j、%P、%u、%U、%V、%w和**%W**。

当使用PARSE_TIMESTAMP时,应牢记以下几点。

  • 未指定的字段。任何未指定的字段都是从1970-01-01 00:00:00.0初始化的。这个初始化值使用由函数的时区参数指定的时区,如果存在的话。如果没有,初始化值使用默认的时区,UTC。例如,如果没有指定年份,则默认为1970年,以此类推。
  • 不区分大小写的名称。名称,如星期一二月等,是不分大小写的。
  • 留白。格式字符串中的一个或多个连续的空白与时间戳字符串中的零或多个连续的空白相匹配。同时,时间戳字符串中的前导和尾部的空白总是被允许的,即使它们不在格式字符串中。
  • 格式优先。当两个(或更多)格式元素有重叠的信息时(例如**%F%Y都影响年份),后一个格式元素通常优先于任何早期的格式元素,但有一些例外(见%s**、%C和**%y**的描述)。

C)返回数据类型

TIMESTAMP数据类型

D) 示例

SELECT PARSE_TIMESTAMP("%c", "Thu Dec 25 07:30:00 2008") AS parsed;
复制代码

输出。

+-------------------------+
| parsed                  |
+-------------------------+
| 2008-12-25 07:30:00 UTC |
+-------------------------+
复制代码

关于BigQuery时间戳函数的进一步信息,你可以关注官方文档。

总结

在这篇文章中,你已经了解了Google BigQuery,它的主要功能和时间戳。这篇文章还提供了关于日期和类型函数的类型以及BigQuery时间戳函数的用法的信息。

Hevo Data,一个无代码的数据管道,为你提供了一个一致和可靠的解决方案,只需点击几下就可以管理各种来源和各种期望目的地之间的数据传输。

访问我们的网站来探索Hevo

Hevo Data与100多个数据源 **(包括30多个免费数据源)**的强大集成,使你不仅可以从你所需的数据源导出数据,并将其加载到你选择的目的地, 如谷歌BigQuery,而且还可以转换和丰富你的数据,使其可以分析,这样你就可以专注于你的关键业务需求,并使用BI工具进行有洞察力的分析。

注册 一个14天的免费试用,亲身体验功能丰富的Hevo套件。你也可以看一下惊人的价格,这将有助于你选择符合你要求的佳方案。

在下面的评论区分享你对BigQuery时间戳功能的理解经验!我们希望听到您的想法。

谷歌BigQuery的无代码数据管道

免费试用

  • BigQuery时间戳功能
  • 日期和时间数据类型
  • Google BigQuery
  • 标准SQL

相关文章