2014-11-21 88 views
0

我正好遇到一種情況,我必須加載數據一樣東西:有像時間戳(9)中的Teradata

'情節中字13:59:10:060606066'

在Teradata表的數據類型爲Timestamp ,您可以以毫秒的格式看到有9位數字,有沒有什麼方法可以加載這樣的數據 或者Teradata根本不支持它。

現在我已經刪除了最後3位數字,使它像'2014-12-24 13:59:10:060606'並加載到數據庫中,但我可能需要在將來處理它。

  1. Message_Queue_Timestamp TIMESTAMP(6) NOT NULL
  2. Message_Queue_Date DATE NOT NULL
  3. Message_Queue_Seconds_From_Midnight FLOAT NOT NULL

使用dnoeth的建議使用to_timestamp()保留了將輸入轉換:

+0

Teradata不支持超過6位數。這些數據來自哪裏? – dnoeth 2014-11-21 11:42:42

+0

我們從一個源平面文件中獲取(,分隔) 有什麼辦法可以處理這種數據? – 2014-11-21 13:34:36

+0

您可以使用子字符串刪除多餘的字符,也可以在TD14中應用'to_timestamp(col,'yyyy-mm-dd hh24:mi:ss:FF9')'。在這兩種情況下,你只能得到6個小數位。順便說一句,我的意思是哪個數據源以納秒級精度創建數據。 – dnoeth 2014-11-21 14:04:17

回答

1

也許你可以通過存儲在表三場做到這一點DBA友好的時間戳在表中。這是Message_Queue_Timestamp

然後將傳入的時間戳分成兩個字段:Message_Queue_DateMessage_Queue_Seconds_From_Midnight。我原本打算建議將後者存儲爲DECIMAL(14,9),但後來實現爲FLOAT格式化/將其轉換爲Teradata中的TIME更容易。這兩個字段允許您保留數據庫攝入的時間戳的精度,而不必將數據存儲爲字符串。

將時間戳轉換爲秒應該在您的ETL處理中相當直接。希望這可以幫助。

+0

感謝羅布,這是一個常設的數據倉庫,我不能修改核心表結構,但我一定會嘗試並取回。 – 2014-11-25 11:15:38

相關問題