AWS Database Migration Service
ユーザーガイド (Version API Version 2016-01-01)

テーブルマッピングを使用して、タスクの設定を指定する

テーブルマッピングは、データソース、ソーススキーマ、データ、そしてタスク実行中に必要なすべての変換を指定するための複数のルールタイプを使用します。テーブルマッピングを使用して、データベースで移行する個々のテーブルや、移行に使用するスキーマを指定できます。また、フィルタを使用して、レプリケートする特定のテーブルの列からデータを指定できます。変換を使用して、ターゲットデータベースに書き込むデータを変更できます。

コンソールからのテーブルマッピングによりテーブル選択および変換を指定する

AWS マネジメントコンソール コンソールを使用して、テーブルの選択、変換の指定などのテーブルマッピングを実施できます。コンソールで、[Where (場所)] セクションを使用してスキーマ、テーブル、およびアクションを含めるか除外するかを指定できます。[フィルタ] セクションを使用して、レプリケーションタスクに適用する、テーブルの列の名前と条件を指定します。これら 2 つのアクションを合わせて、選択ルールを作成します。

選択ルールを 1 つ以上指定した後に、変換をテーブルマッピングに含めることができます。変換を使用して、スキーマまたはテーブルの名前を変更したり、スキーマまたはテーブルにプレフィックスやサフィックスを追加したり、テーブルの列を削除したりできます。

以下の例は、「EntertainmentAgencySample」というスキーマの「Customers」テーブルの選択ルールを設定する方法を示しています。選択ルールと変換は、[Guided (ガイド)] タブで作成します。このタブは、スキーマとテーブル情報があるソースエンドポイントを選択した場合のみ表示されます。

テーブルの選択を指定するには、AWS コンソールを使用して、条件と変換でフィルタリングします。

  1. AWS マネジメントコンソール にサインインして AWS DMS を選択します。AWS Identity and Access Management (IAM) ユーザーとしてサインインしている場合、AWS DMS にアクセスするには適切なアクセス許可が必要です。必要なアクセス権限の詳細については、「AWS DMS を使用するのに必要な IAM アクセス許可」を参照してください。

  2. [ダッシュボード] ページで、[タスク] を選択します。

  3. [タスクの作成] を選択します。

  4. [タスク名]、[レプリケーションインスタンス]、[ソースエンドポイント]、[ターゲットエンドポイント]、[移行タイプ] などのタスク情報を入力します。[テーブルマッピング] セクションから [Guided (ガイド)] を選択します。

    
                                スキーマとテーブルの選択
  5. [テーブルマッピング] セクションで、スキーマ名とテーブル名を選択します。テーブル名を指定するとき、「%」をワイルドカード値として使用できます。フィルタを使用して、定義されたデータを含める、除外するかなど、実行するアクションを指定します。

    
                                スキーマとテーブルの選択
  6. [Add column filter (列フィルタの追加)] および [条件の追加] リンクを使用して、フィルタ情報を指定します。

    1. まず、[Add column filter (列フィルタの追加)] を選択して列と条件を指定します。

    2. [追加] を選択してその他の条件を追加します。

    以下の例は、01 から 85 の間に AgencyIDs を含む Customers テーブルのフィルタを示しています。

    
                                スキーマとテーブルの選択
  7. 希望の選択を作成したら、[Add selection rule (選択ルールの追加)] を選択します。

  8. 選択ルールを 1 つ以上作成したら、タスクに変換を追加できます。[add transformation rule (変換ルールの追加)] を選択します。

    
                                変換ルール
  9. 変換を希望するターゲットを選択し、必要な追加情報を入力します。以下の例は、Customer テーブルから AgencyStatus 列を削除する変換を示しています。

    
                                変換ルール
  10. [Add transformation rule] を選択します。

  11. (オプション) [add selection rule (選択ルールの追加)] または [add transformation rule (変換ルールの追加)] を選択して、他の選択ルールや変換ルールを追加します。完了したら、[Create task] を選択します。

    
                                変換ルール

JSON を使用するテーブルマッピングによりテーブル選択および変換を指定する

JSON 形式でテーブルマッピングを作成できます。AWS DMS マネジメントコンソールを使用して移行タスクを作成する場合、JSON を直接テーブルマッピングボックスに入力できます。CLI または API を使用して移行を実行する場合、JSON ファイルを作成して移行中に適用するテーブルマッピングを指定できます。

使用するテーブルやスキーマを指定し、スキーマおよびテーブル変換を実行することができます。selection ルールタイプと transformation ルールタイプを使用してテーブルマッピングルールを作成します。

注記

また、Amazon S3 では、post-processing ルールタイプおよび add-tag ルールアクションを使用して、選択したテーブルとスキーマに S3 オブジェクトにマッピングされたタグ付けを行うことができます。詳細については、「Amazon S3 オブジェクトのタグ付け」を参照してください。

選択ルールと選択アクション

テーブルマッピングを使用すると、選択ルールと選択アクションを使用することで、使用するテーブルやスキーマを指定できます。選択ルールタイプを使用するテーブルマッピングルールの場合、以下の値を適用できます。

パラメータ 使用できる値 説明
rule-type selection テーブルマッピングを指定するときは、少なくとも 1 つの選択ルールを定義します。
rule-id 数値。 ルールを識別する一意の数値。
rule-name 英数字値。 ルールを特定する一意な名前。
rule-action includeexcludeexplicit ルールにより選択される 1 つ以上のオブジェクトを含めるか除外します。explicit を指定した場合、明示的に指定したテーブルおよびスキーマに該当する 1 つだけのオブジェクトを選択して含めることができます。
object-locator 以下のパラメータを使用するオブジェクト。
  • schema-name – スキーマの名前。

  • table-name – テーブルの名前。

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

  • 単一のスキーマの 1 つのテーブル

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

  • 単一のスキーマの一部あるいはすべてのテーブル

  • 一部あるいはすべてのスキーマの一部あるいはすべてのテーブル

rule-actionexplicit の場合、1 つのテーブルとスキーマ (ワイルドカードなし) の正確な生名前のみを指定できます。

load-order 正の整数。最大の値は 2147483647 です。 テーブルを読み込むための優先度を示します。値が大きいテーブルが最初に読み込まれます。
filters オブジェクトの配列。 ソースをフィルタリングする 1 つ以上のオブジェクト。ソースの単一の列でフィルタリングするオブジェクトパラメータを指定します。複数の列をフィルタリングする複数のオブジェクトを指定します。詳細については、「ソースフィルタの使用」を参照してください。

例 スキーマ内のすべてのテーブルの移行

以下の例では、ソース内の Test という名前のスキーマからすべてのテーブルをターゲットエンドポイントに移行します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" } ] }

例 スキーマの一部のテーブルの移行

以下の例では、ソース内の Test という名前のスキーマから、先頭が DMS のテーブルを除くすべてのテーブルをターゲットエンドポイントに移行します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "selection", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "Test", "table-name": "DMS%" }, "rule-action": "exclude" } ] }

例 単一のスキーマで指定した単一のテーブルの移行

以下の例では、ソース内の NewCust スキーマから Customer テーブルをターゲットエンドポイントに移行します。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "NewCust", "table-name": "Customer" }, "rule-action": "explicit" } ] }

注記

複数の選択ルールを指定することで、複数のテーブルとスキーマを明示的に選択できます。

例 設定順でテーブルを移行

以下の例は、2 つのテーブルを移行します。テーブル loadfirst (優先度 2) はテーブル loadsecond より前に移行されます。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "loadfirst" }, "rule-action": "include", "load-order": "2" }, { "rule-type": "selection", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "Test", "table-name": "loadsecond" }, "rule-action": "include", "load-order": "1" } ] }

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

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

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

パラメータ 使用できる値 説明
rule-type transformation 選択ルールにより指定された各オブジェクトにルールを適用する値。特に明記されていない限り、transformation を使用します。
rule-id 数値。 ルールを識別する一意の数値。
rule-name 英数字値。 ルールを特定する一意な名前。
object-locator 以下のパラメータを使用するオブジェクト。
  • schema-name – スキーマの名前。

  • table-name – テーブルの名前。

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

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

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

  • 単一のスキーマの 1 つのテーブル

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

  • 単一のスキーマの一部あるいはすべてのテーブル

  • 一部あるいはすべてのスキーマの一部あるいはすべてのテーブル

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

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

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

rule-action

rename

remove-column

convert-lowercaseconvert-uppercase

add-prefixremove-prefixreplace-prefix

add-suffixremove-suffixreplace-suffix

define-primary-key

オブジェクトに適用する変換。すべて変換ルールアクションでは、大文字と小文字が区別されます。
rule-target schematablecolumntable-tablespaceindex-tablespace 変換するオブジェクトのタイプ。

table-tablespace あるいは index-tablespace 値は、Oracle のターゲットエンドポイントでのみ使用できます。また、object-locator の一部として指定した該当するパラメータと一致する値を指定できます (table-tablespace-name あるいは index-tablespace-name)。

value ターゲットタイプの名前付けルールに従った英数字値。 入力が必要なアクションの新しい値 (rename など)。
old-value ターゲットタイプの名前付けルールに従った英数字値。 置き換えが必要なアクションの古い値 (replace-prefix など)。
primary-key-def 以下のパラメータを使用するオブジェクト。
  • name – テーブルの新しいプライマリキーまたは一意のインデックスの名前。

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

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

ルールアクションを define-primary-key、ルールターゲットを table に設定して、このパラメータは変換されたテーブルの名前、タイプ、および一意のキーの内容を定義します。デフォルトでは、一意のキーはプライマリキーとして定義されます。

例 スキーマの名前変更

以下の例では、スキーマの名前をソースでの 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" } ] }

例 列の削除

以下の例では、ソース内の 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%" } }] }

例 小文字への変換

以下の例では、テーブルの名前をソースでの 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" ] } }] }

テーブル設定のルールとオペレーション

テーブル設定を使用して、指定されたオペレーションで選択されたテーブルに適用する設定を指定します。テーブル設定ルールはオプションです。

テーブル設定ルールタイプを使用するテーブルマッピングルールの場合、以下のパラメーターを適用することができます。

パラメータ 使用できる値 説明
rule-type table-settings 選択ルールにより指定されたテーブルにルールを適用する値。
rule-id 数値。 ルールを識別する一意の数値。
rule-name 英数字値。 ルールを特定する一意な名前。
object-locator 以下のパラメータを使用するオブジェクト。
  • schema-name – スキーマの名前。

  • table-name – テーブルの名前。

特定のスキーマとテーブルの名前 (ワイルドカードなし)。

parallel-load 以下のパラメータを使用するオブジェクト。
  • type – 並列のロードを有効にするかどうかを指定します。そうでない場合、このパラメータは、テーブルのパーティション、サブパーティションや並列でロードする他のセグメントを識別するメカニズムもしています。パーティションは、ソーステーブルですでに定義され、名前で識別されるセグメントです。Oracle エンドポイントのみでは、サブパーティションはソーステーブルですでに定義されて名前によって識別できるセグメントの追加レベルとなります。1 つ以上のテーブル列に値範囲の境界を指定することで、table-settings ルール内の他のセグメントを識別できます。

  • partitionstypepartitions-list の場合、この値はすべてのパーティションが並列ロードされるように指定します。

  • subpartitions – Oracle エンドポイントのみでは、typepartitions-list の場合、この値はすべてのパーティションが並列ロードされるように指定します。

  • columnstyperanges の場合、この値は並列でロードする範囲ベースのセグメントを識別するために使用する列の名前を指定します。

  • boundariestyperanges の場合、この値は並列でロードされる範囲ベースのセグメントを識別するために使用する columns の値を指定します。

object-locator オプションで識別されたテーブルでの並列ロード (マルチスレッド) オペレーションを指定する値。この場合、次の任意の方法で並行してロードすることができます。

  • 使用可能なすべてのパーティションまたはサブパーティションで指定されるセグメントによって。

  • パーティションおよびサブパーティションで選択することによって。

  • 指定したセグメントに基づいた範囲によって。

並列ロードの詳細については、「選択したテーブルで並列ロードを使用する」を参照してください。

type parallel-load の次のいずれか。
  • partitions-auto – テーブルのすべてのパーティションが並列でロードされます。各パーティションは個別のスレッドに割り当てられます。

  • subpartitions-auto – (Oracle エンドポイントのみ) テーブルのすべてのサブパーティションが並列でロードされます。すべてのサブパーティションは個別のスレッドに割り当てられます。

  • partitions-list – テーブルで指定されたすべてのパーティションが並列でロードされます。Oracle エンドポイントのみでは、テーブルのすべてのサブパーティションが並列でロードされます。指定する各パーティションおよびサブパーティションは、独自のスレッドに割り当てられます。並列ロードするパーティションおよびサブパーティションをパーティション名 (partitions) とサブパーティション名 (subpartitions) で指定します。

  • ranges – テーブルの指定されたすべてのセグメントが並列でロードされます。識別した各テーブルセグメントは個別のスレッドに割り当てられます。このセグメントを列名 (columns) および 列の値 (boundaries) で指定します。

  • none – テーブルは、パーティションやサブパーティションに関係なく、シングルスレッドタスクでロードされます (デフォルト)。詳細については、「タスクの作成」を参照してください。

並列でロードするテーブルパーティション、サブパーティション、またはセグメントを識別するメカニズム。
partitions typepartitions-list の場合、これは並列でロードするパーティションの名前を指定する文字列の配列です。 並列ロードするパーティションの名前。
subpartitions (Oracle エンドポイントのみ) typepartitions-list の場合、これは並列してロードするサブパーティションの名前を指定する文字列の配列です。 並列ロードするサブパーティションの名前。
columns typeranges の場合、並列でロードする範囲ベースのテーブルセグメントを識別する列の名前に設定された文字列の配列です。 並列でロードする範囲ベースのテーブルセグメントを識別する列の名前。
boundaries typeranges の場合、列の値の配列の配列。各列の値の配列には、数量の列値と columns で指定された順序が含まれています。列の値の配列はテーブルセグメントの上限の境界を指定します。各追加列値の配列は、1 つの追加テーブルセグメントの上限の境界を追加します。このような範囲ベースのテーブルセグメントはすべて並列ロードです。 並列ロードする範囲ベースのテーブルパーティションを識別する列の値。
lob-settings 以下のパラメータを使用するオブジェクト。
  • mode – LOB の移行処理モードを指定します。

  • bulk-max-sizemode 設定に応じて、LOB の最大サイズを指定します。

object-locator オプションによって識別されるテーブルの LOB 処理を指定する値。指定された LOB 処理は、このテーブルのみのすべてのタスク LOB 設定を上書きします。LOB 設定パラメータの使用に関する詳細については、「選択したテーブルの LOB 設定を指定」を参照してください。
mode 以下の値を使用して、指定されたテーブルの LOB の移行処理を指定します。
  • limited – (デフォルト) この値は、テーブル内のすべての列データタイプとともにすべての LOB 移行インラインを使用して、制限された LOB モードに移行を設定します。主に小さな LOB (100 MB 以下) をレプリケートするときに、この値を使用します。また、bulk-max-size 値を指定します (ゼロは無効)。bulk-max-size より大きなサイズの移行された LOB はすべて、設定したサイズに切り捨てられます。

  • unlimited – この値は、移行を完全 LOB モードに設定します。レプリケートするほとんどあるいはすべての LOB が 1 GB より大きい場合には、この値を使用します。bulk-max-size 値をゼロに指定する場合、すべての LOB は標準の完全 LOB モードで移行されます。この形式の unlimited モードでは、ソーステーブルからのルックアップを使用して、すべての LOB が他の列データタイプとは別に移行されます。bulk-max-size 値をゼロより大きく設定する場合、すべての LOB は組み合わせ完全 LOB モードで移行されます。この形式の unlimited モードでは、bulk-max-size よりも大きな LOB は、ソーステーブルルックアップを使用して移行されます。これは、標準完全 LOB モードに類似しています。それ以外の場合は、このサイズ以下の LOB はインラインで移行されます。これは制限付き LOB モードに似ています。使用する形式に関係なく、unlimited モードでは LOB が切り捨てられることはありません。

  • none – すべてのテーブルの LOB はタスクの LOB 設定に従って移行されます。

    タスクの LOB 設定の詳細については、「ターゲットメタデータのタスク設定」を参照してください。

    LOB を移行する方法およびこれらのタスクの LOB 設定を指定する方法については、「AWS DMS タスクのソースデータベースの LOB サポートの設定」を参照してください。

LOB を移行するために使用されるメカニズム。
bulk-max-size この値の効果は mode によって異なります。 LOB の最大サイズ (キロバイト単位)。このオプションは、小さな LOB をレプリケートする必要がある場合、またはターゲットエンドポイントが無制限の LOB サイズをサポートしていない場合にのみ指定します。

選択したテーブルで並列ロードを使用する

移行を高速化してより効率的にするには、選択したテーブルを並列ロードできます。つまり、複数のスレッドを並列で使用して単一にセグメント化されたテーブルを移行できます。これを行うため、AWS DMS は完全ロードタスクをスレッドに分割し、各テーブルセグメントを各自のスレッドに割り当てます。

この並列ロードプロセスを使用すると、まず複数のスレッドが複数のテーブルを並列してソースのエンドポイントからアップロードするようにできます。次に、複数のスレッドを移行し、同じテーブルを並列してターゲットエンドポイントにロードさせることができます。一部のデータベースエンジンでは、既存のパーティションあるいはサブパーティションを使用してテーブルをセグメント化することができます。それ以外の場合は、列の値の範囲を指定することで任意のテーブルをセグメント化できます。

並列ロードは以下のソースエンドポイントでサポートされています。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • IBM Db2

  • SAP Adaptive Server Enterprise (ASE)

並列ロードは以下のターゲットエンドポイントでサポートされています。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • Amazon Redshift

  • SAP Adaptive Server Enterprise (ASE)

ParallelLoadThreads タスク設定を使用して、並列ロードタスクのスレッド数を指定します。ParallelLoadBufferSize タスク設定を使用して、並列ロードタスクのバッファサイズを指定します。これらの設定は、エンドポイントによって異なる場合があります。これらの設定の詳細については、「ターゲットメタデータのタスク設定」を参照してください。

並列ロードを使用するには、parallel-load オプションを指定した table-settings タイプのテーブルマッピングルールを作成します。table-settings ルールでは、並列でロードする単一テーブルのセグメント化の条件を指定できます。これを行うには、parallel-load オプションの type パラメータに、並列ロード用にテーブルをセグメント化する方法に応じて、複数のオプションのいずれかを設定します。

  • パーティションを使用 – partitions-auto タイプを使用して、すべての既存のテーブルパーティションをロードします。または、partitions-list タイプを指定した partitions 配列で使用して、選択したパーティションのみをロードします。

  • (Oracle エンドポイントのみ) サブパーティションを使用 – subpartitions-auto タイプを使用してすべての既存のテーブルサブパーティションをロードします。または、partitions-list タイプを指定した subpartitions 配列で使用して、選択したサブパーティションのみをロードします。

  • 定義するセグメントを使用 – 列値の境界を使用して定義したテーブルセグメントをロードします。これを行うには、ranges タイプを指定した columns 配列および boundaries 配列で使用します。

並列でロードする追加のテーブルを識別するには、追加の table-settings オブジェクトを parallel-load オプションで指定します。

次の手順では、各並列ロードタイプの JSON を記述する方法を、単純なものからきわめて複雑なものまで説明します。

すべてのテーブルのパーティションまたはテーブルのサブパーティションを指定するには

  • partitions-auto タイプまたは subpartitions-auto タイプのいずれか (両方は使用できません) を指定して parallel-load を指定します。

    各テーブルのパーティションまたはサブパーティションは、個別のスレッドに自動的に割り当てられます。

    注記

    並列ロードには、テーブルですでに定義されている場合に、パーティションあるいはサブパーティションが含まれます。

選択したテーブルパーティション、サブパーティション、またはその両方を指定するには

  1. partitions-list タイプで parallel-load を指定します。

  2. (オプション) パーティション名の配列を partitions の値として指定したパーティションが含まれます。

    指定されたパーティションがそれぞれ独自のスレッドに割り当てられます。

  3. (オプション、Oracle エンドポイントのみ) サブパーティション名を subpartitions の値として指定したサブパーティションが含まれます。

    指定されたサブパーティションがそれぞれ独自のスレッドに割り当てられます。

    注記

    並列ロードには、テーブルですでに定義されている場合に、パーティションあるいはサブパーティションが含まれます。

テーブルセグメントを列値の範囲として指定することができます。その場合、次の列の特性について注意してください。

  • インデックス化された列を指定するとパフォーマンスが大幅に向上します。

  • 最大 10 個の列を指定できます。

  • 次の AWS DMS データタイプでは、セグメントの境界を定義するために列を使用できません。DOUBLE、FLOAT、BLOB、CLOB、NCLOB

  • Null 値のレコードはレプリケートされません。

テーブルセグメントを列値の範囲として指定するには

  1. ranges タイプで parallel-load を指定します。

  2. テーブル列名を columns の値として指定して、テーブルセグメント間の境界を定義します。テーブルセグメント間で境界を定義するすべての列でこれを行います。

    列の順序は重要です。次に説明するように、各境界を定義するうえで最初の列がもっとも重要であり最後の列は最も重要度が低くなります。

  3. boundaries の値として境界配列を指定して、すべてのテーブルセグメントでデータ範囲を定義します。境界配列は列値の配列の配列です。これを行うには、次のステップを実行します。

    1. 列と値の配列の各要素を各列に対応する値として指定します。列と値の配列は、定義する各テーブルセグメントの上限の境界を表します。columns 配列の列で指定したものと同じ順序で各列を指定します。

      注記

      DATE 列の値を、ソースでサポートされる形式で入力します。

    2. 列と値の配列をそれぞれ上限の境界として指定します。テーブルの一番下のセグメントから、上から 2 番目のセグメントまで、順番に各セグメントを指定します。指定した上限の上にテーブルの行が存在する場合、これらの行はテーブルの一番上のセグメントを形成します。そのため、範囲ベースのセグメントの数は、境界配列のセグメント境界の数より 1 つ多くなることがあります。このような範囲ベースのセグメントはそれぞれ個別のスレッドに割り当てられます。

      注記

      データテーブル内のすべての列のデータ範囲を定義しない場合でも、null 以外のすべてのテーブルデータがレプリケートされます。

    たとえば、次のように COL1、COL2 COL 3 に 3 つの列と値の配列を定義したとします。

    COL1 COL2 COL3
    10 30 105
    20 20 120
    100 12 99

    3 つのセグメントの境界を定義したことで、合計で 4 つのセグメントができることがあります。

    各セグメントでレプリケートする行の範囲を識別するため、次に示すようにレプリケーションインスタンスは 4 つのセグメントごとにこれらの 3 つの列で検索を適用します。

    セグメント 1

    最初の 2 つの列の値が対応するセグメント 1 の上限値以下であり、3 つめの列の値がセグメント 1 の上限値未満であるすべての行をレプリケートします。

    セグメント 2

    最初の 2 つの列の値が対応するセグメント 2 の上限値以下であり、3 つめの列の値がセグメント 2 の上限値未満であるすべての行 (セグメント 1 の行を除く) をレプリケートします。

    セグメント 3

    最初の 2 つの列の値が対応するセグメント 3 の上限値以下であり、3 つめの列の値がセグメント 3 の上限値未満であるすべての行 (セグメント 2 の行を除く) をレプリケートします。

    セグメント 4

    残りのすべての行 (セグメント 1、2、3 の行を除く) をレプリケートします。

    この場合、レプリケーションインスタンスが次のように WHERE 句を作成して各セグメントをロードします。

    セグメント 1

    ((COL1 < 10) OR ((COL1 = 10) AND (COL2 < 30)) OR ((COL1 = 10) AND (COL2 = 30) AND (COL3 < 105)))

    セグメント 2

    NOT ((COL1 < 10) OR ((COL1 = 10) AND (COL2 < 30)) OR ((COL1 = 10) AND (COL2 = 30) AND (COL3 < 105))) AND ((COL1 < 20) OR ((COL1 = 20) AND (COL2 < 20)) OR ((COL1 = 20) AND (COL2 = 20) AND (COL3 < 120)))

    セグメント 3

    NOT ((COL1 < 20) OR ((COL1 = 20) AND (COL2 < 20)) OR ((COL1 = 20) AND (COL2 = 20) AND (COL3 < 120))) AND ((COL1 < 100) OR ((COL1 = 100) AND (COL2 < 12)) OR ((COL1 = 100) AND (COL2 = 12) AND (COL3 < 99)))

    セグメント 4

    NOT ((COL1 < 100) OR ((COL1 = 100) AND (COL2 < 12)) OR ((COL1 = 100) AND (COL2 = 12) AND (COL3 < 99)))

選択したテーブルの LOB 設定を指定

1 つ以上の table-settings オブジェクトで lob-settings オプションを使用してタイプ table-settings のテーブルマッピングルールを作成すると、1 つ以上のテーブルに LOB 設定のタスクを設定できます。

選択したテーブルへの LOB 設定の指定は、次のソースエンドポイントでサポートされています。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • IBM Db2 (以下で説明するように、mode および bulk-max-size 設定に応じます)

  • SAP Adaptive Server Enterprise (ASE) (以下で説明するように、mode および bulk-max-size 設定に応じます)

選択したテーブルへの LOB 設定の指定は、次のターゲットエンドポイントでサポートされています。

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • SAP ASE (以下で説明するように、mode および bulk-max-size 設定に応じます)

注記

LOB データタイプはプライマリキーが含まれるテーブルのみで使用できます。

選択したテーブルの LOB 設定を使用するには、lob-settings オプションを指定して table-settings タイプのテーブルマッピングルールを作成します。これにより、object-locator オプションで識別されたテーブルの LOB 処理が指定されます。table-settings ルール内で、以下のパラメーターを使用して lob-settings オブジェクトを指定できます。

  • mode – 選択したテーブルの LOB 移行処理のメカニズムを次のように指定します。

    • limited – デフォルトの制限付き LOB モードは最も速くて効率的なモードです。すべての LOB が小さいか、またはターゲットのエンドポイントで未制限の LOB サイズがサポートされていない場合のみ、このモードを使用します。さらに、limited を使用する場合、すべての LOB は bulk-max-size で設定したサイズ内にする必要があります。

      完全ロードタスクにおけるこのモードでは、レプリケーションインスタンスはすべての LOB を他の列のデータ型と一緒にメインテーブルストレージの一部としてインラインで移行します。ただし、bulk-max-size 値より大きい LOB はすべて、インスタンスによって指定のサイズに切り捨てられます。変更データキャプチャ (CDC) のロードの場合、インスタンスはすべての LOB をソーステーブルの参照を使用して移行します。これは標準の完全 LOB モードと同様です (以下を参照)。これは、LOB に関係なく行われます。

    • unlimited – 完全 LOB モードの移行メカニズムは、次のように bulk-max-size に設定した値によって異なります。

      • 標準の完全 LOB モードbulk-max-size を 0 に設定すると、レプリケーションインスタンスは標準の完全 LOB モードを使用してすべての LOB を移行します。このモードでは、サイズにかかわらずすべての LOB を移行でソーステーブルを参照する必要があります。このアプローチでは通常、制限付き LOB モードよりもはるかに低速で移行されます。すべてまたはほとんどの LOB が大きい (1 GB 以上) の場合にのみ、このモードを使用します。

      • 組み合わせ完全 LOB モードbulk-max-size をゼロ以外の値に設定すると、この完全 LOB モードは制限付き LOB モードと標準の完全 LOB モードを組み合わせて使用します。これは完全ロードタスク向けであり、LOB サイズが bulk-max-size 値以内の場合、インスタンスは制限付き LOB モードのようにインラインで LOB を移行します。LOB のサイズがこの値より大きい場合は、インスタンスは標準の完全 LOB モードのようにソーステーブルの三章を使用して LOB を移行します。変更データキャプチャ (CDC) のロードの場合、インスタンスはすべての LOB をソーステーブルの参照を使用して移行します。これは標準の完全 LOB モードと同様です (以下を参照)。これは、LOB に関係なく行われます。

        このモードにより、移行速度はより高速な制限付き LOB モードと低速な標準の完全 LOB モードの中間になります。このモードは、小さい LOB と大きい LOB が混在しており、ほとんどの LOB が小さい場合にのみ使用します。

        この組み合わせ完全 LOB モードは、つぎのエンドポイントのみで使用できます。

        • IBM Db2 (ソースとして)

        • SAP ASE (ソースあるいはターゲットとして)

      unlimited モードに指定するメカニズムに関わらず、インスタンスはすべての LOB を完全に移行し、切り捨ては行われません。

    • none – レプリケーションインスタンスはタスク LOB 設定を使用して、選択されたテーブルの LOB を移行します。このオプションを使用すると、選択されたテーブルで LOB 設定を使用した場合と使用しない場合の移行結果を比較できます。

    指定したテーブルにレプリケーションに含まれる LOB があるときには、limited LOB モードを使用する場合のみ BatchApplyEnabled タスクを true に設定できます。

    場合によっては、BatchApplyEnabledtrue に、また、BatchApplyPreserveTransactionfalse に設定できます。このようなケースでは、テーブルに LOB があり、ソースおよびターゲットのエンドポイントが Oracle である場合に、インスタンスは BatchApplyPreserveTransactiontrue に設定します。

  • bulk-max-size – 前の項目で説明した mode に応じて、この値を 0 または 0 以外の値 (キロバイト) に設定します。limited モードでは、このパラメータにゼロ以外の値を設定する必要があります。

    インスタンスは LOB をバイナリ形式に変換します。したがって、レプリケートする必要がある最大の LOB を指定するには、サイズを 3 倍します。たとえば、最大の LOB が 2 MB の場合、bulk-max-size を 6000 (6 MB) に設定します。

テーブル設定の例

テーブル設定を使用する説明の例を次に示します。

例 パーティションでセグメント化されたテーブルのロード

次の例では、すべてのパーティションに基づいて並列でロードすることで、ソース内の SALES テーブルを効率的にロードします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-auto" } } ] }

例 サブパーティションでセグメント化されたテーブルのロード

次の例では、すべてのサブパーティションに基づいて並列でロードすることで、Oracle ソース内の SALES テーブルを効率的にロードします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "subpartitions-auto" } } ] }

例 パーティションのリストでセグメント化されたテーブルのロード

次の例では、特定のパーティションのリストに基づいて並列でロードすることで、ソース内の SALES テーブルをロードします。ここで、指定されたパーティションはアルファベットの一部で始まる値を取って命名されます。たとえば、ABCDEFGH などです。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-list", "partitions": [ "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWXYZ" ] } } ] }

例 選択されたパーティションおよびサブパーティションのリストでセグメント化された Oracle テーブルのロード

次の例では、選択されたパーティションおよびサブパーティションのリストを使用して並列でロードすることで、Oracle ソースの SALES テーブルをロードします。ここで、指定されたパーティションはアルファベットの一部で始まる値を取って命名されます。たとえば、ABCDEFGH などです。指定されたサブパーティションは、数字で始まる値を取って命名されます。たとえば、0123456789 などです。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-list", "partitions": [ "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWXYZ" ], "subpartitions": [ "01234", "56789" ] } } ] }

例 列の値の範囲でセグメント化されたテーブルのロード

次の例では、SALES_NO および REGION 列の値の範囲で指定されたセグメントを使用して並列でロードすることで、ソース内の SALES テーブルをロードします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "ranges", "columns": [ "SALES_NO", "REGION" ], "boundaries": [ [ "1000", "NORTH" ], [ "3000", "WEST" ] ] } } ] }

ここで、2 つの列は、SALES_NO および REGION という名前でセグメント範囲に指定されます。2 つの境界は 2 セットの列の値 (["1000","NORTH"] および ["3000","WEST"]) で指定されます。

したがって、これら 2 つの境界によって、並列でロードされる次の 3 つのテーブルセグメントが識別されます。

セグメント 1

SALES_NO が 1000 以下であり REGION が "NORTH" 未満である行。つまり、EAST リージョンで販売数が最大 1000 まで。

セグメント 2

セグメント 1 以外で SALES_NO が 3000 以下であり REGION が "WEST" 未満である行。つまり、NORTH および SOUTH リージョンで販売数が 1,000 を超え 3,000 まで。

セグメント 3

セグメント 1 および セグメント 2 以外の残りすべての行。つまり、WEST リージョンで販売数が 3000 超。

例 1 つは範囲でセグメント化され、もう 1 つはパーティションでセグメント化された 2 つのテーブルのロード

次の例では、SALES テーブルを識別したセグメント境界で並列にロードします。また、前の例と同様に、ORDERS テーブルをすべてのパーティションで並列にロードします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "ranges", "columns": [ "SALES_NO", "REGION" ], "boundaries": [ [ "1000", "NORTH" ], [ "3000", "WEST" ] ] } }, { "rule-type": "table-settings", "rule-id": "3", "rule-name": "3", "object-locator": { "schema-name": "HR", "table-name": "ORDERS" }, "parallel-load": { "type": "partitions-auto" } } ] }

例 制限付き LOB モードを使用した LOB を含むテーブルのロード

次の例では、ソース内の LOB を含む ITEMS テーブルを、切り捨てられない最大サイズが 100 MB の制限付き LOB モード (デフォルト) を使用してロードします。このサイズよりも大きい LOB はすべて 100 MB に切り捨てられます。すべての LOB は、他のすべての列のデータ型と一緒にインラインでロードされます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "bulk-max-size": "100000" } } ] }

例 標準の完全 LOB モードを使用したテーブルのロード

次の例では、標準の完全 LOB モードを使用して、すべての LOB を切り捨てずに、ソースの ITEMS テーブルをロードします。サイズを問わずすべての LOB は、ソーステーブルの各 LOB ごとに参照を使用して、他のデータ型とは別にロードされます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "unlimited" "bulk-max-size": "0" } } ] }

例 組み合わせ完全 LOB モードを使用した LOB を含むテーブルのロード

次の例では、組み合わせ完全 LOB モードを使用して、すべての LOB を切り捨てずに、ソースの ITEMS テーブルをロードします。サイズが 100 MB 以内のすべての LOB は他のデータ型とともにインラインでロードされます。制限付き LOB モードと同様です。サイズが 100 MB を超えるすべての LOB は、他のデータ型とは別に、ソーステーブルの各 LOB の参照を使用してロードされます。標準の完全 LOB モードと同様です。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "unlimited" "bulk-max-size": "100000" } } ] }

例 タスク LOB 設定を使用した LOB を含むテーブルのロード

次の例では、タスク LOB 設定を使用して、すべての LOB を含め、ソースの ITEMS テーブルをロードします。100 MB の bulk-max-size 設定は無視され、limited または unlimited モードにクイックリセットするためにのみ残されます。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "none" "bulk-max-size": "100000" } } ] }

ソースフィルタの使用

ソースフィルタを使用すると、ソースからターゲットに転送されるレコードの数とタイプを制限できます。たとえば、本社を拠点とする従業員だけがターゲットデータベースに移行されるように指定できます。フィルタは、選択ルールの一部です。データの列にフィルタを適用します。

ソースフィルタは、以下の制約に従う必要があります。

  • 選択ルールには、フィルタを設定しないことも、1 つ以上のフィルタを選択することもできます。

  • すべてのフィルタには 1 つ以上のフィルタ条件を設定できます。

  • 複数のフィルタを使用する場合、フィルタのリストはフィルタ間で AND 演算子を使用しているものとして結合されます。

  • 1 つのフィルタ内で複数のフィルタ条件を使用する場合、フィルタ条件のリストはフィルタ条件間で OR 演算子を使用しているものとして結合されます。

  • フィルタは rule-action = 'include' の場合のみ適用されます。

  • フィルタには、列名とフィルタ条件のリストが必要です。フィルタ条件には、フィルタ演算子と値が必要です。

  • 列名、テーブル名、およびスキーマ名では大文字と小文字が区別されます。

JSON 形式のソースフィルタルールの作成

選択ルールで JSON filters パラメータを使用してソースフィルタを作成できます。filters パラメータは、1 つ以上の JSON オブジェクトの配列を指定します。各オブジェクトには、ソースフィルタのタイプ、列の名前、フィルタ条件を指定するパラメータがあります。これらのフィルタ条件には、1 つ以上のフィルタ演算子およびフィルタ値が含まれています。

次の表は、filters オブジェクトでソースフィルタリングを指定するパラメーターを示しています。

パラメータ

filter-type

source

column-name

フィルタを適用するソース列の名前。名前は、大文字と小文字が区別されます。

filter-conditions

filter-operator 値に応じて、1 つ以上のオブジェクトには filter-operator パラメータおよび適切な値パラメータが含まれています。

filter-operator

このパラメータには以下の値のいずれかがあります。

  • ste – 以下

  • gte – 以上

  • eq – 等しい

  • between – 2 つの値に等しい、またはその間

value または

start-value

end-value

filter-operator パラメータの値。filter-operatorbetween 以外の値がある場合には、value を使用します。filter-operatorbetween に設定されている場合は、1 つが start-value 用、もう 1 つが end-value 用の 2 つの値を指定します。

以下の例では、ソースフィルタを使用する一般的な方法をいくつか示します。

例 1 つのフィルタ

以下のフィルタは、empid >= 100 のすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "gte", "value": "100" }] }] }] }

例 複数のフィルタ演算子

以下のフィルタは、複数のフィルタ演算子を 1 つのデータ列に適用します。このフィルタは、(empid <=10) または (empid is between 50 and 75) または (empid >= 100) のすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "ste", "value": "10" }, { "filter-operator": "between", "start-value": "50", "end-value": "75" }, { "filter-operator": "gte", "value": "100" }] }] }] }

例 複数のフィルタ

以下のフィルタは、テーブル内の 2 つの列に複数のフィルタを適用します。このフィルタは、(empid <= 100) および (dept= tech) のすべての従業員をターゲットデータベースにレプリケートします。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "ste", "value": "100" }] }, { "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "eq", "value": "tech" }] }] }] }

時刻と日付でフィルタリング

インポートするデータを選択すると、フィルタ条件の一部として日付または期間を指定できます。AWS DMS は、フィルタリングに日付形式 YYYY-MM-DD と時刻形式 YYYY-MM-DD HH:MM:SS を使用します。AWS DMS 比較関数は SQLite のルールに従います。SQLite のデータ型と日付変換については、SQLite ドキュメントの「SQLite バージョン 3 のデータ型」を参照してください。

以下の例は、日付をフィルタリングする方法を示しています。これは、empstartdate >= January 1, 2002 のすべての従業員をターゲットデータベースにレプリケートします。

例 1 つの日付フィルタ

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empstartdate", "filter-conditions": [{ "filter-operator": "gte", "value": "2002-01-01" }] }] }] }