データ型のルールとガイドライン
一部のデータ型については、特定のルールとガイドラインに従う必要があります。
time、datetime、timestamp、およびtimestampz
time、datetime、timestamp、またはtimestampzデータ型を含むデータについては、次のルールとガイドラインを考慮してください。
- •timeデータ型を使用してマッピングを実行すると、タスクは正常に実行されますが、出力の10進数値が切り捨てられます。Timeデータ型の場合、SQLクエリのCallableStatement .setTime(java.sql.Time)は、秒までの精度をサポートします。
- •timeカラムを含むデータのマッピングを作成し、データ型をtimeからtimestampに編集すると、実行時にマッピングが失敗します。
- •Amazon Redshiftとの間で読み書きを行うと、マッピングのすべてのトランスフォーメーションのデータプレビューで、Timeデータ型にダミー値が追加されて表示されます。また、すべてのダウンストリームトランスフォーメーションも、追加されたダミーの日付値を受け取ります。ただし、time値は、既存のAmazon Redshiftターゲットでのみ正しく表示されます。
- •実行時にターゲットを作成し、入力値にtimeカラムが含まれている場合、timeカラムはターゲットのtimestampデータ型に変換されます。timeカラムがソースに追加された場合に、スキーマを動的に更新すると、timestampデータ型でターゲットにカラムが作成されます。
- •Amazon Redshiftからストアドプロシージャを呼び出すようにSQLトランスフォーメーションを設定し、SQLトランスフォーメーションのパラメータとして小数秒を含むtimeデータ型を指定すると、精度が切り詰められます。
- •マッピングタスクのクエリでSESSSTARTTIME変数を指定してdatetime値を返すようにする場合は、次の形式でクエリを指定します。
:select to_timestamp('$$$SESSSTARTTIME','YYYY-MM-DD HH24:MI:SS.MS')::TIMESTAMP as xz;
詳細セッションプロパティの[日時形式文字列]をYYYY-MM-DD HH24:MI:SS.MSに設定する必要があります。
マッピングタスクでSESSIONSTARTTIMEにデフォルトの形式MM/DD/YYYを使用する場合は、クエリで次の形式を使用する必要があります。
:select to_timestamp('$$$SESSSTARTTIME','MM-DD-YYYY HH24:MI:SS.MS')::TIMESTAMP as xz;
- •フィルタトランスフォーメーションを使用してDate、Timestamp、またはTimeカラムにフィルタを適用する場合は、次の形式でto_date()式を使用します。例えば、 to_date('1970-01-01 23:05:06.123457','YYYY-MM-DD HH24:MI:SS.US'と指定します。ソース文字列の形式と形式文字列が一致している必要があります。ソース値に基づいて、文字列の小数部分を変更します。TO_DATE形式の文字列の詳細については、『トランスフォーメーション言語リファレンスガイド』を参照してください。
- •Timeデータ型カラムで簡易フィルタを使用してAmazon Redshiftソースから読み取り、マッピングを実行すると、タスクは実行時に次のエラーで失敗します: 操作に失敗しました: フィルタ条件[]の式文字列が無効です。
回避策として、詳細フィルタを使用してAmazon Redshiftソースから読み取りを行います。
- •timestampzカラムの動的スキーマを更新すると、varcharデータ型はカラム値にのみプロパゲートされますが、timestampzにはプロパゲートされません。
- •Dateデータ型のデータをAmazon Redshiftターゲットに書き込み、Secure AgentとAmazon Redshiftクラスタのタイムゾーンが異なる場合、ターゲットに記録される日付は実際の日付より1日前の日付になります。
例えば、日付2014-12-07は、ターゲットでは2014-12-06と書き込まれます。
小数
Decimalデータ型を含むデータについては、次のルールとガイドラインを考慮してください。
- •Decimalデータ型の動作は、マッピングと詳細モードのマッピングでは異なります。マッピングでサポートされているDecimalの最大精度は28ですが、詳細モードのマッピングでサポートされているDecimalの最大精度は38です。マッピングでは、ソースのDecimalデータ型の精度が28を超えると、10進数の数値は16番目の精度の後に切り詰められ、ターゲットの残りの桁はゼロに置き換えられます。
例えば、ソース内の値2.3121356348957890888898699898989999990はターゲットでは2.3121356348957890000000000000000000000に四捨五入されます。ただし、詳細モードのマッピングでは、ソースのDecimalデータはターゲットでも同じままです。
マッピングでのこの問題を解決するには、ソーステーブルのDecimalデータ型の精度を28以下に指定します。
- •decimalデータ型のカラムを含むデータを読み取る場合、decimalデータ型のカラムに対して設定したスケールの変更は、デフォルトで考慮されます。スケールの変更が考慮されないようにするには、Secure AgentプロパティでJVMオプション-honorDecimalScaleRedshiftの値をfalseに設定します。デフォルトでは、このプロパティはtrueに設定されます。
- •ステージングパフォーマンスのためにステージング最適化プロパティを指定してAmazon Redshift V2ターゲットに書き込み、ソース値にFloatデータ型のデータがある場合、ターゲットの10進数値は切り捨てられ、最も近い整数に四捨五入されます。この問題を回避するには、[システム構成の詳細]セクションの[タイプ]でデータ統合サービスとして[DTM]を選択し、[DisableInfaDoubleHandlingForStaging]の値を[はい]に設定します。
スーパー
Superデータ型を含むデータについては、次のガイドラインを考慮してください。
- •SQLトランスフォーメーションでストアドプロシージャを設定する場合は、Superデータ型のカラムに入力、出力、または入出力パラメータを使用しないようにしてください。Superデータ型のカラムに入力、出力、または入出力パラメータを使用した場合、マッピングは失敗し、次の警告が表示されます:
EP_13248 DLLエラーメッセージ: SQL txのエラー
- •詳細モードでマッピングを設定して、COPYコマンドを使用してAmazon RedshiftターゲットのSuperデータ型のカラムにデータの書き込みを行う場合は、SUPERデータ型の列に文字列値を挿入しないようにしてください。SUPERデータ型の列に文字列値を挿入した場合、詳細モードでのマッピングは失敗します。
- •Superデータ型のカラムに対して、簡易フィルタまたはキャッシュを使用しないルックアップでルックアップ条件を定義することはできません。
- •デフォルトでは、Superデータ型の精度は256です。マッピングで精度が正しく設定されていない場合、データの切り捨てまたはターゲットのオーバーフローによりマッピングは失敗します。
フラットファイルターゲットに書き込むソースSQL ELTの最適化のマッピングを有効にし、精度が設定されていない場合、データは切り捨てられます。
- •SQL ELTの最適化が有効なマッピングからSuperデータ型を含むデータの書き込みを行うために、実行時に新しいターゲットを作成した場合、精度値が65536文字を超えているとマッピングは失敗します。受信Superデータ型がターゲットのSuperデータ型にマッピングされていることを確認します。ターゲットのSuperデータ型にマッピングされていない場合、Amazon RedshiftのSuper型は文字列トランスフォーメーションデータ型にマッピングされます。したがって、Super型のカラムを持つ新しいターゲットがvarcharとして作成されます。varcharカラムの場合、精度は65536未満である必要があります。
Superデータ型の精度に関する同じ制限は、動的スキーマリフレッシュ操作にも適用されます。
- •次のようなデータ型をターゲットのSuperデータ型にマッピングすると、COPYコマンドは失敗します。
- - char
- - varchar
- - date
- - time
- - timestamp
- - timestamptz
この問題は、Amazon RedshiftテーブルのSuperカラムが、COPYコマンドを使用してデータをロードするときには、文字列データが二重引用符で囲まれていることが常に想定されているために発生します。Charデータ型とVarcharデータ型をターゲットのSuperデータ型にマッピングする場合は、受信データに二重引用符(")が含まれていることを確認してください。
注: 同じ問題は、マッピング内のAmazon S3 V2ソースオブジェクトがSuperデータ型のAmazon Redshiftターゲットカラムに書き込みを行うことによっても発生します。
- •Superデータ型のカラム値を含む単一のオブジェクトソースから読み取りを行ってそのカラムに単純なフィルタを定義すると、マッピングは成功しますが、完全なSQL ELTの最適化が有効になっているマッピングのカラムに対してレコードは生成されません。
- •マッピングを詳細モードで実行して、Amazon Redshiftソースから読み取りを行いターゲットに書き込みを行うときに、Superデータ型のカラムにNULL値が含まれている場合、このNULL値は文字列値「NULL」としてターゲットに書き込まれます。