[英]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.