[英]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`
您可以使用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.