首页 > 解决方案 > BigQuery 将 unix 时间戳结构转换为日期时间结构

问题描述

我有一个 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 中的表格:

在此处输入图像描述

标签: structgoogle-bigquery

解决方案


如果您想使用格式从旧表创建一个新表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


推荐阅读