同じエラーに出くわす人いると思ったので書いておきます。
S3にParquet形式で保存したデータをRedshift Spectrumで読み込むと以下のエラーが発生することがあります。
> select * from some_spectrum_table; Assert DETAIL: ----------------------------------------------- error: Assert code: 1000 context: !(tsval % (USECS_PER_DAY)) - Error fetching values of DATE column. Validate that DATE columns match the corresponding file types. Consider using TIMESTAMP type instead. query: 700869 location: fetchers.hpp:6304 process: query0_125_700869 [pid=22647] -----------------------------------------------
AWSサポートに問い合わせたところ、Date型の項目に 1400-01-01
より古い日付を指定すると発生するらしいです。
最初は結構驚いたのですが、1400-01-01
で検索してみると、Date型の実装で結構あるようです。
このあたりとか。
とは言え、紙を読み取りデータを自動登録しているような機器を使っている場合など、読み込みエラーなどで1400-01-01より前の変なデータが入ってきてしまうことがゼロとは言えません。そのような異常なデータが1件でもあれば上記のエラーになってしまいクエリがエラーになってしまうのはマズいです。
対策としては可能であれば、Timestamp型やString型に変えることです。
今回はデータの利用側で問題ないことを確認してから、Parquetに変換するGlueのジョブにてDate型にCASTしていたところを、Timestamp型に変換することで解決しました。
今、サービス開発側で対応中とのことで、あくまで2019/06/04現在の情報となります。