AWS DMS で MySQL の TIME 型を Redshift の TIME 型にマッピングできないのはなぜですか
困っていた内容
AWS DMS で MySQL の TIME 型を Amazon Redshift の TIME 型の列に移行しようとしています。
Redshift 側に TIME 型のカラムを事前に作成してタスクを実行したところ、CASE types character varying and time without time zone cannot be matched というエラーが発生して取り込みに失敗します。
どう対応すればいいの?
MySQL の TIME 型は、DMS 経由で Redshift の TIME 型にマッピングできません。
DMS における MySQL の TIME 型のマッピング先は、DMS データ型の STRING となります。
Redshift ターゲットでは STRING が VARCHAR に変換されます。
MySQL のデータ型 AWS DMS データ型 TIME STRING
AWS DMS データ型 Amazon Redshift のデータ型 STRING 長さが 1 ~ 65,535 の場合、VARCHAR (バイト単位の長さ) を使用します
そのため、Redshift 側のカラムを TIME 型で事前に定義しても、DMS は VARCHAR 形式で値を書き出すため、型の不一致によってエラーとなります。
これは MySQL の TIME 型が時刻だけでなく経過時間の表現にも使われ、-838:59:59〜838:59:59 という 24 時間を超える値域を持つのに対し、Redshift の TIME 型は 00:00:00〜24:00:00 のみを扱えるため、それぞれの型の間に互換性のない値の領域があることが背景としてあります。
TIME 型の列を移行する場合は、Redshift 側のカラムを VARCHAR として定義して受け取る形での対応などをご検討ください。
参考情報







