2017-06-01 91 views
0

我已經做了一些研究,DATETIMETIMESTAMP數據類型,據我所知,他們支持毫秒和微秒BigQuery是否支持其任何日期時間數據類型的納秒數?

像下面的一個表示日期時間,

YYYY-[M]M-[D]D[(|T)[H]H:[M]M:[S]S[.DDDDDD]] 

但是,是否有可能加載/表示具有納秒精度的值?

一樣,

YYYY-[M]M-[D]D[(|T)[H]H:[M]M:[S]S[.DDDDDDDDD]] 

回答

3

其實,BigQuery支援可達微秒級精度,不僅毫秒。

不,我不相信它支持納秒精度(也許一個Google員工會糾正我),我當然不能在docs中看到任何東西。然而,這表示:產生

錯誤如果string_expression是無效的,具有更多的 超過六個亞秒位數(即精度比微秒以上), 或表示所支持的時間戳範圍外的時間。

因此,這將工作:

SELECT CAST('2017-01-01 00:00:00.000000' AS TIMESTAMP) 

但是這不會(「無法施展文字 」2017年1月1日00:00:00.000000000「 鍵入TIMESTAMP」):

SELECT CAST('2017-01-01 00:00:00.000000000' AS TIMESTAMP) 
+0

你是對的,TIMESTAMP和DATETIME的精度都達到微秒級。知道OP具有哪種設備可以測量分佈式環境中的納秒精度會很有趣。 –

1

有關時間戳精度更多的上下文,考慮supported range of BigQuery timestamps,這是0001-01-01 00:00:00.0000009999-12-31 23:59:59.999999。以微秒精度,如果將時間戳固定到Unix紀元,這意味着您可以用整數值-62135596800000000和結尾253402300799999999來表示此範圍的開始(這些值是您將UNIX_MICROS函數應用於上面的時間戳)。

現在假設我們想要納秒精度,但我們仍然希望能夠將時間戳表示爲相對於Unix紀元的整數。最小和最大時間戳將被表示爲-62135596800000000000253402300799999999。不過,看一下int64的範圍,我們需要更寬的整數類型,因爲int64的最小值和最大值分別是-92233720368547758089223372036854775807。或者,我們需要將時間戳的範圍限制爲大約1677-09-21 00:12:432262-04-11 23:47:16,假設我做了正確的數學計算。考慮到納秒精度通常不是很有用,具有更廣泛的時間戳範圍,同時仍能夠使用64位表示是最好的折衷方案。

相關問題