繁体   English   中英

BigQuery 将 unix 时间戳结构转换为日期时间结构

[英]BigQuery convert unix timestamp struct to struct of datetime

我有一个 BigQuery 表,其中包含一个名为daySliderTimes的结构列,格式如下:

daySliderTimes STRUCT<_field_1 STRUCT<_seconds INT, _nanoseconds INT>, _field_1 STRUCT<_seconds INT, _nanoseconds INT>

_field_1_field_2代表两个不同的时间戳。 _seconds_nanoseconds表示自 Unix 纪元以来的时间。

我想将数据转换为具有以下形式的新STRUCT

daySlidertimes STRUCT<startTime DATETIME, endTime DATETIME>

这是在 BigQuery UI 中看到的表:

在此处输入图片说明

如果要从旧表创建一个格式为daySlidertimes STRUCT<startTime DATETIME, endTime DATETIME>的新表,您可以以毫秒为单位转换数据,然后使用“TIMESTAMP_MICROS”函数将其转换为 TIMESTAMP,请查看此链接查看解析时间戳的函数数量 [1]。

查询示例应如下所示:

CREATE TABLE `project.dataset.new_table` AS 
   SELECT searchDocId, 
   STRUCT(TIMESTAMP_MICROS(CAST( 
   ((daySliderTimes.field1.seconds * 1e+6)  + 
   ROUND(daySliderTimes.field1.nanoseconds * 0.001)) AS INT64)) as 
   startTime, 
   TIMESTAMP_MICROS(CAST( ((daySliderTimes.field2.seconds * 1e+6)  + 
   ROUND(daySliderTimes.field2.nanoseconds * 0.001)) AS INT64)) as endTime) 
   as daySliderTimes, 
   enabledDaySliders
FROM `project.dataset.old_table`

[1] https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#parse_timestamp

您可以使用TIMESTAMP_SECONDS()函数。 此函数将秒数转换为DATETIME格式。

因此,您可以使用TIMESTAMP_SECONDS()函数将daySliderTimes._field_1.seconds转换为日期。 以及,对于_field_2 ,然后将它们聚合为新的结构格式。

在创建视图或表期间,您可以在选择中执行以下操作:

WITH table_newStruct as(
  SELECT 
#Select all the desired fields
         searchDocId,
         STRUCT(TIMESTAMP_SECONDS(daySliderTimes._field_1.seconds) as startTime, 
         TIMESTAMP_SECONDS(daySliderTimes._field_.seconds) as endTime) as new_daySlidertimes

FROM 'table_source')

SELECT searchDocId, new_daySlidertimes 
FROM 'table_newStruct'

此外,返回的TIMESTAMP应采用以下格式1970-01-01 00:00:00 UTC 您可以使用FORMAT_DATE()函数对其进行格式化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM