簡體   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