AWS DMS で MySQL の DATETIME / TIMESTAMP 型を Redshift の TIMESTAMPTZ 型へ移行するにはどうしたらいいですか
困っていた内容
AWS DMS で MySQL の DATETIME / TIMESTAMP 型を Redshift の TIMESTAMPTZ 型へ移行したいです。
タスクを実行すると Invalid timestamp format or value [YYYY-MM-DD HH24:MI:SSOF] というエラーで取り込みに失敗します。
どうすれば取り込めるようになりますか。
どう対応すればいいの?
DMS の Redshift ターゲットエンドポイントの追加接続属性 Timeformat に auto を指定してください。
Redshift の COPY コマンドは、TIMEFORMAT を明示的に指定しない場合、TIMESTAMPTZ 列に対しては YYYY-MM-DD HH:MI:SSOF をデフォルトのフォーマットとして用います。
OF は UTC からのオフセット部分を指しており、オフセット付きの値が前提です。
TIMEFORMAT が指定されていない場合、デフォルトの形式は、TIMESTAMP 列では YYYY-MM-DD HH:MI:SS、TIMESTAMPTZ 列では YYYY-MM-DD HH:MI:SSOF です。OF は協定世界時 (UTC) からのオフセットです。timeformat_string には、タイムゾーン指定子を含めることができません。デフォルトの形式と異なる形式の TIMESTAMPTZ データをロードするには、「auto」を指定します。
一方、DMS は MySQL の DATETIME / TIMESTAMP のようにゾーンオフセットを持たない値を、そのままターゲットへ書き出します。
TIMESTAMPTZ (s) — ソースタイムスタンプにゾーンオフセットが含まれている場合 (SQL Server や Oracle など)、insert または update 時に UTC に変換される。オフセットが含まれていない場合、時刻は既に UTC に変換済みとみなされる。
そのため、DMS が書き出すオフセットなしの値と、COPY が期待するオフセット付きのデフォルトフォーマットが噛み合わず、Timeformat 未指定の状態ではエラーとなります。
DMS の Timeformat に auto を指定することで、COPY 実行時の TIMEFORMAT に auto が用いられ、オフセットを持たない値も TIMESTAMPTZ 列へ取り込めるようになります。
時間形式を指定します。これは、文字列入力であり、デフォルトでは空です。auto 引数は、Timeformat 文字列を使用する場合にサポートされない形式を認識します。日の値および時間の値でそれぞれ異なる形式が使用される場合、Timeformat パラメータとともに auto 引数を使用します。
参考情報








