2017-06-01 47 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が無効である場合、より より6秒以下の桁(マイクロ秒よりも大きい、すなわち精度)、 を有するか、またはサポートされているタイムスタンプの範囲外の時間を表して製造されます。

したがって、これは動作します:

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

タイムスタンプの精度の詳細状況については、9999-12-31 23:59:59.999999から0001-01-01 00:00:00.000000あるsupported range of BigQuery timestampsを、考えます。マイクロ秒の精度では、タイムスタンプをUnixエポックに固定すると、この範囲の開始を整数値-62135596800000000で表し、最後を253402300799999999で表すことができます(UNIX_MICROS関数を適用した場合に得られる値です)。上記のタイムスタンプ)。

ここで、ナノ秒の精度を求めたとしますが、Unixエポックに関連した整数としてタイムスタンプを表現できるようにしたかったとします。最小および最大のタイムスタンプは、-62135596800000000000および253402300799999999と表されます。 int64の範囲を見ると、int64の最小値と最大値は-92233720368547758089223372036854775807であるため、より広い整数型が必要になります。あるいは、私が正しく計算したと仮定して、タイムスタンプの範囲を約1677-09-21 00:12:43から2262-04-11 23:47:16に制限する必要があります。ナノ秒の精度がそれほど有用ではないことを考えると、タイムスタンプの範囲を広げながら64ビット表現を使用できることが最も良い妥協点です。

関連する問題