変換ルールおよび変換アクション - AWS Database Migration Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

変換ルールおよび変換アクション

選択したスキーマ、テーブルまたはビューに適用する変換を指定するには、変換アクションを使用します。変換ルールはオプションです。

制限事項

  • 同じオブジェクト (スキーマ、テーブル、列、テーブルとテーブルスペース、またはインデックスとテーブルスペース) に対して複数の変換ルールアクションを適用することはできません。各変換アクションが異なるオブジェクトに対して適用される限り、複数の変換ルールアクションを任意のレベルに適用できます。

  • 変換ルールのテーブル名と列名では大文字と小文字が区別されます。例えば、Oracle データベースまたは Db2 データベースのテーブル名と列名は大文字で指定する必要があります。

  • 右から左へ記述する言語の列名の変換はサポートされていません。

  • 変換は、名前に特殊文字 (#、\、/、-など) を含む列では実行できません。

  • BLOB データ型 や CLOB データ型にマップされた列に対してサポートされている変換は、ターゲットでの列の削除のみです。

  • AWS DMS では、2 つのソーステーブルを 1 つのターゲットテーブルにレプリケートすることはできません。 AWS DMS は、レプリケーションタスクの変換ルールに従って、テーブルからテーブル、および列から列にレコードをレプリケートします。重複を避けるため、オブジェクト名は一意である必要があります。

    例えば、ソーステーブルに ID という名前の列があり、対応するターゲットテーブルには id という既存の列があるとします。ルールで ADD-COLUMN ステートメントを使用して id という新しい列を追加し、SQLite ステートメントを使用してその列にカスタム値を設定すると、id という名前の重複したあいまいなオブジェクトが作成されます。これはサポートされません。

[値]

変換ルールタイプを使用するテーブルマッピングルールの場合、次の値を適用できます。

パラメータ 使用できる値: 説明
rule-type transformation 選択ルールにより指定された各オブジェクトにルールを適用する値。特に明記されていない限り、transformation を使用します。
rule-id 数値。 ルールを識別する一意の数値。同じオブジェクト (スキーマ、テーブル、列、テーブル間スペース、インデックステーブルスペース) に複数の変換ルールを指定すると、変換ルールに低い rule-id AWS DMS が適用されます。
rule-name 英数字値。 ルールを特定する一意な名前。
object-locator 以下のパラメータを使用するオブジェクト。
  • schema-name – スキーマの名前。MongoDB と Amazon DocumentDB エンドポイントの場合、これはコレクションの集合を保持するデータベースの名前です。

  • table-name – テーブルまたはビューまたはコレクションの名前。

  • table-tablespace-name - 既存のテーブルのテーブルスペース名。

  • index-tablespace-name - 既存のインデックスのテーブルスペース名。

  • column-name - 既存の列の名前。

  • data-type - 既存の列データ型の名前。

ルールが適用される各スキーマ、テーブルまたはビュー、テーブルのテーブルスペース、インデックスのテーブルスペース、および列の名前。data-type を除く各 object-locator パラメータの値のすべてあるいは一部で、「%」パーセント記号をワイルドカードとして使用できます。したがって、これらの項目には以下を対応させることができます。

  • 単一のスキーマ内の単一のテーブルまたはビュー

  • 一部またはすべてのスキーマの単一のテーブルまたはビュー

  • 単一のスキーマの一部またはすべてのテーブルとビュー

  • 一部またはすべてのスキーマの一部またはすべてのテーブルとビュー

  • 指定したテーブル、ビュー、スキーマ内の 1 つ以上の列。

  • 複数の列が指定されている場合、指定された data-type を持つ列。data-type の指定可能な値については 、次の表で説明されている「data-type」をご参照ください。

また、table-tablespace-name あるいは index-tablespace-name パラメータは、Oracle ソースのエンドポイントと一致させるためのみに使用できます。table-tablespace-name または index-tablespace-name を単一のルールで指定できますが、両方を指定することはできません。したがって、以下の項目のいずれかを一致させることができます。

  • 1 つ、一部、あるいはすべてのテーブルのテーブルスペース

  • 1 つ、一部、あるいはすべてのインデックスのテーブルスペース

rule-action

add-column, include-column, remove-column

rename

convert-lowercase, convert-uppercase

add-prefix, remove-prefix, replace-prefix

add-suffix, remove-suffix, replace-suffix

define-primary-key

change-data-type

add-before-image-columns

オブジェクトに適用する変換。すべて変換ルールアクションでは、大文字と小文字が区別されます。

rule-action パラメータの add-column 値は、テーブルに列を追加します。ただし、同じテーブルの既存の列と同じ名前の新しい列を追加することはできません。

data-type パラメータおよび expression パラメータとともに使用すると、add-column は新しい列データの値を指定します。

rule-actionchange-data-type の値は、column ルールターゲットに対してのみ使用できます。

include-column パラメータのrule-actionの値により、テーブルのモードを[drop all columns by default](デフォルトですべての列を削除する)と[include the columns specified](指定した列を含める)に変更します。複数の列は、include-column ルールを複数回呼び出してターゲットに含まれます。

ルールのスキーマ名またはテーブル名にワイルドカード (%) が含まれている場合は define-primary-key は使用できない。

既存のタスクの場合、remove-columnrenameadd-prefix などのターゲットテーブルスキーマを変更する変換ルールアクションは、タスクを再開するまで有効になりません。変換ルールを追加した後でタスクを再開すると、変更した列で列データが欠落するなど、予期しない動作が発生する可能性があります。変換ルールが正しく動作するには、タスクを再起動する必要があります。

rule-target schema, table, column, table-tablespace, index-tablespace 変換するオブジェクトのタイプ。

table-tablespace および index-tablespace の値は、Oracle ターゲットエンドポイントでのみ使用できます。

object-locator: table-tablespace-name または index-tablespace-name 名の一部として指定するパラメータの値を指定してください。

value ターゲットタイプの名前付けルールに従った英数字値。 入力が必要なアクションの新しい値 (rename など)。
old-value ターゲットタイプの名前付けルールに従った英数字値。 置き換えが必要なアクションの古い値 (replace-prefix など)。
data-type

typerule-actionadd-column である場合に使用するデータ型、または rule-actionchange-data-type である場合は置換データ型。

または、rule-actionchange-data-typecolumn-name の値が "%"、かつ既存のデータ型を識別するための追加の data-type パラメータが object-locator に含まれる場合の置換データ型の名前。

AWS DMS は、次の DMS データ型の列データ型変換をサポートします。 "bytes", "date", "time", "datetime", "int1", "int2", "int4", "int8", "numeric", "real4", "real8", "string", "uint1", "uint2", "uint4", "uint8", "wstring", "blob", "nclob", "clob", "boolean", "set", "list" "map", "tuple"

precision - 追加された列または置換データ型に精度がある場合は、精度を指定する整数値。

scale – 追加された列または置換データ型に位取り、整数の値、または日時の値がある場合、位取りを指定する整数値

length – 新しい列データの長さ (add-column と共に使用する場合)

次は、置換する既存のデータ型を指定する data-type パラメータの例です。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "table_t", "column-name": "col10" }, "rule-action": "change-data-type", "data-type": { "type": "string", "length": "4092", "scale": "" } } ] }

ここでは、table_t テーブルの col10 列が string データ型に変更されます。

expression SQLite 構文に続く英数字の値。

rule-actionrename-schema に設定して使用すると、expression パラメータは新しいスキーマを指定します。rule-actionrename-table に設定して使用すると、expression は新しいテーブルを指定します。rule-actionrename-column に設定して使用すると、expression は新しい列の値を指定します。

rule-actionadd-column に設定して使用すると、expression は新しい列を構成するデータを指定します。

このパラメータでは式のみがサポートされていることに注意する。演算子とコマンドはサポートされない。

変換ルールに式を使用する方法の詳細については、「変換ルール式を使用した列の内容の定義」をご参照ください。

SQLite 式の詳細については、「SQLite 関数を使用して式を構築する」を参照。

primary-key-def

以下のパラメータを使用するオブジェクト。

  • name - テーブルまたはビューの新しいプライマリ キーまたは一意のインデックスの名前。

  • (オプション) origin – 定義する一意のキーのタイプ: primary-key (デフォルト) または unique-index

  • columns - プライマリ キーあるいは一意のインデックスに表示される順番の列の名前をリストした文字列の配列。

このパラメータでは、変換されたテーブルまたはビューの一意のキーの名前、タイプ、内容を定義できます。rule-actiondefine-primary-key に設定され、rule-targettable に設定されている場合にこの処理を行います。デフォルトでは、一意のキーはプライマリキーとして定義されます。
before-image-def

以下のパラメータを使用するオブジェクト。

  • column-prefix - 列名の前に付加される値。デフォルト値は、BI_です。

  • column-suffix - 列名に付加される値。デフォルトは空です。

  • column-filterpk-only ( デフォルト)、non-lob (オプション)、all (オプション) のいずれかの値が必要です。

このパラメータは、前イメージ列を識別するための命名規則を定義し、ターゲット上に作成された前イメージ列を持つことができるソース列を識別するためのフィルターを指定します。rule-actionadd-before-image-columns に設定され、rule-targetcolumn に設定されている場合に、このパラメータを指定できます。

column-prefixcolumn-suffix の両方を空の文字列に設定しないでください。

[column-filter] では以下を選択します。

  • pk-only - テーブルのプライマリ キーの一部である列のみを追加します。

  • non-lob - LOB タイプではない列のみを追加します。

  • all - 前イメージの値を持つ任意の列を追加します。

AWS DMS ターゲットエンドポイントの前イメージのサポートの詳細については、以下をご参照ください:

例 スキーマの名前変更

以下の例では、スキーマの名前をソースでの Test からターゲットでの Test1 に変更します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "schema", "object-locator": { "schema-name": "Test" }, "value": "Test1" } ] }
例 テーブル名の変更

以下の例では、テーブルの名前をソースでの Actor からターゲットでの Actor1 に変更します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table", "object-locator": { "schema-name": "Test", "table-name": "Actor" }, "value": "Actor1" } ] }
例 列名の変更

以下の例では、テーブル Actor の列の名前をソースでの first_name からターゲットでの fname に変更します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "4", "rule-name": "4", "rule-action": "rename", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name" : "first_name" }, "value": "fname" } ] }
例 Oracle テーブルのテーブルスペースの名前変更

次の例では、Oracle ソースの Actor という名前のテーブルの SetSpace という名前のテーブルのテーブルスペースを、Oracle のターゲットエンドポイントで SceneTblSpace に名前変更します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Play", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "Play", "table-name": "Actor", "table-tablespace-name": "SetSpace" }, "value": "SceneTblSpace" } ] }
例 Oracle インデックスのテーブルスペースの名前変更

以下の例では、Oracle ソースの Actor という名前のテーブルの SetISpace という名前のインデックスのテーブルスペースを、Oracle のターゲットエンドポイントで SceneIdxSpace に名前変更します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Play", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "Play", "table-name": "Actor", "table-tablespace-name": "SetISpace" }, "value": "SceneIdxSpace" } ] }
例 列の追加

次の例では、スキーマ test のテーブル Actordatetime 列を追加します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "actor" }, "value": "last_updated", "data-type": { "type": "datetime", "precision": 6 } } ] }
例 列の削除

以下の例では、ソース内の Actor という名前のテーブルを変換し、先頭文字が col のすべての列をターゲットから削除します。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "remove-column", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name": "col%" } }] }
例 [Convert to lowercase] (小文字に変換)

以下の例では、テーブルの名前をソースでの ACTOR からターゲットでの actor に変換します。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "convert-lowercase", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "ACTOR" } }] }
例 大文字への変換

次の例では、すべてのテーブルおよびすべてのスキーマ内のすべての列を、ソースでの小文字からターゲットでの大文字に変換します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "convert-uppercase", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "%" } } ] }
例 プレフィックスの追加

以下の例では、ソース内のすべてのテーブルを変換し、ターゲットではそれらのテーブルにプレフィックス DMS_ を追加します。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-prefix", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "%" }, "value": "DMS_" }] }
例 プレフィックスの置き換え

以下の例では、ソースでプレフィックス Pre_ を含むすべての列を変換し、ターゲットではプレフィックスを NewPre_ に置き換えます。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "replace-prefix", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "%" }, "value": "NewPre_", "old-value": "Pre_" } ] }
例 サフィックスの削除

以下の例では、ソース内のすべてのテーブルを変換し、ターゲットではそれらのテーブルからサフィックス _DMS を削除します。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "remove-suffix", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "%" }, "value": "_DMS" }] }
例 プライマリキーの定義

次の例では、ターゲットエンドポイントに移行した ITEM テーブルの 3 つの列の ITEM-primary-key という名前のプライマリキーを定義します。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "inventory", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "define-primary-key", "rule-target": "table", "object-locator": { "schema-name": "inventory", "table-name": "ITEM" }, "primary-key-def": { "name": "ITEM-primary-key", "columns": [ "ITEM-NAME", "BOM-MODEL-NUM", "BOM-PART-NUM" ] } }] }
例 一意のインデックスの定義

次の例では、ターゲットエンドポイントに移行した ITEM テーブルの 3 つの列の ITEM-unique-idx という名前の一意のインデックスを定義します。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "inventory", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "define-primary-key", "rule-target": "table", "object-locator": { "schema-name": "inventory", "table-name": "ITEM" }, "primary-key-def": { "name": "ITEM-unique-idx", "origin": "unique-index", "columns": [ "ITEM-NAME", "BOM-MODEL-NUM", "BOM-PART-NUM" ] } }] }
例 ターゲット列のデータ型の変更

次の例では、SALE_AMOUNT という名前のターゲット列のデータ型を既存のデータ型から int8 に変更します。

{ "rule-type": "transformation", "rule-id": "1", "rule-name": "RuleName 1", "rule-action": "change-data-type", "rule-target": "column", "object-locator": { "schema-name": "dbo", "table-name": "dms", "column-name": "SALE_AMOUNT" }, "data-type": { "type": "int8" } }
例 前イメージ列の追加

emp_no という名前のソース列の場合、次の例の変換ルールによって、ターゲットに BI_emp_no という名前の新しい列が追加されます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "employees" }, "rule-action": "add-before-image-columns", "before-image-def": { "column-prefix": "BI_", "column-suffix": "", "column-filter": "pk-only" } } ] }

ここでは、次のステートメントは、対応する行の BI_emp_no 列に 1 を代入します。

UPDATE employees SET emp_no = 3 WHERE BI_emp_no = 1;

サポートされている AWS DMS ターゲットに CDC 更新を書き込む場合、 BI_emp_no列では、どの行の値が更新されたかをemp_no列で判断できます。