AWS DMS で MySQL の TIME 型を Redshift の TIME 型にマッピングできないのはなぜですか

AWS DMS で MySQL の TIME 型を Redshift の TIME 型にマッピングできないのはなぜですか

AWS DMS で MySQL の TIME 型を Redshift に移行する際に発生する型の不一致エラーと、その原因及び対応方法についてまとめます。
2026.08.28

困っていた内容

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 に変換されます。

https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MySQL.html#CHAP_Source.MySQL.DataTypes

MySQL のデータ型 AWS DMS データ型
TIME STRING

https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Redshift.html#CHAP_Target.Redshift.DataTypes

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 として定義して受け取る形での対応などをご検討ください。

参考情報

https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Source.MySQL.html#CHAP_Source.MySQL.DataTypes

https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/CHAP_Target.Redshift.html#CHAP_Target.Redshift.DataTypes

https://dev.mysql.com/doc/refman/8.0/en/time.html

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Datetime_types.html


AWSテクニカルサポートノートについて

過去にクラスメソッドのAWS総合支援サービスで頂いたお問合せの中から、通常のAWS利用時でも有益になりうる情報をテクニカルサポートチームがTIPSとしてご紹介しています。技術サポートは、無料でご提供しております。詳細は下記ボタンからご覧ください。

クラスメソッドのAWSサポートの詳細を見る

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事