…そういえば「紀元前」の日時データってRedshiftで扱えるんだったっけ?
小ネタです。
先日、日付やタイムスタンプのデータチェックに関する会話をした時に
- 「そういえば日付の範囲指定って何か必要だっけ?」
- 「実在する年月日の組み合わせはまぁマストですよね」
- 「日付範囲の最大値チェックも要るんじゃないですかね?」
- 「0000年01月01日から9999年12月31日までで、年は4桁以下であれば特に問題無さそうっすけどねぇ」
といった感じで会話が進み、ちょうど対象とするデータソースがAmazon Redshiftを想定していた会話だったのでその流れ「...あれっそう言えばRedshiftって日付やタイムスタンプのデータ、扱えるんだっけか?」と思い立ちました。当エントリではそんなニッチなトピックについて現状把握してみた内容をまとめてみたいと思います。
Amazon Redshiftにおける日時データの最大値について
早速の結論です。
Amazon Redshiftでは、日付型(Date)、タイムスタンプ型(Timestamp)いずれの場合でも、紀元前のデータも扱えるし、何なら西暦10000年以降のデータも扱えます。
AWSの公式ドキュメントにおける日時情報の書式に関する情報を確認すると、B.C.(紀元前)やA.D.(紀元後)に関する記載があります。
範囲に関する情報を漁ってみると、ありました。過去は紀元前4713年まで、未来日付はなんと4桁を超えて西暦294276年まで扱えるようです。てっきり範囲としては4桁の域を出ないものかと思っていましたがまさかここまで範囲が広いとは驚きました。これは太っ腹!(?)
その他主要なデータベース等の日時データ最大値
Redshiftは紀元前に関するデータを扱えることが分かりました。ちなみに他の製品ではどんな状況になっているのでしょうか?CSA(カスタマーストーリーアナリティクス)で対応しているSnowflakeとBigQueryは共に紀元(AD)以降、西暦4桁の範囲に収まっているようです。
その他主要なデータベース等の範囲については下記エントリが参考になるかと思います。
まとめ
という訳で、日付・タイムスタンプ型の有効範囲、及び「紀元前のデータを扱えるか否か」という観点からのちょっとした調査メモのご紹介でした。(実際この手の情報が役に立つ日が来るのだろうか...という気がしないでもないですが...)