

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

# DMS Schema Conversion のメタデータモデル
<a name="sc-metadata-model"></a>

DMS Schema Conversion を使用する場合、サービスはデータベーススキーマを階層ツリーとして表します。このツリーは*メタデータツリー*と呼ばれ、ソーススキーマとターゲットスキーマの両方に適用されます。ルート要素 (「サーバー」) を含むツリー内の各要素はメタデータモデルです。

メタデータツリーには 2 種類の要素が含まれています。
+ **オブジェクト** — テーブル、関数、ビュー、シーケンス、インデックスなどの実際のデータベースオブジェクトを表します。[DescribeMetadataModel](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModel.html) リクエストを使用して、オブジェクトの SQL 定義を取得できます。
+ **カテゴリ** — 「スキーマ」、「テーブル」、「機能」、「インデックス」などの仮想グループ化コンテナ。カテゴリは、ナビゲーションのためにツリー内のオブジェクトを整理しますが、SQL 定義自体はありません。

メタデータツリーは、リクエストした場合にのみデータをロードします。このアプローチはオンデマンドロード (遅延ロードとも呼ばれます) と呼ばれます。つまり、DMS Schema Conversion は必要に応じてデータベースからデータを取得します。インポートオペレーションを使用してメタデータをロードします。特定のメタデータモデルを更新するか、サブツリー全体を一度にインポートします。評価や変換などのオペレーションでも、メタデータツリーが自動的にロードされます。

## メタデータモデルの仕組み
<a name="sc-metadata-model-how-it-works"></a>

DMS Schema Conversion のメタデータモデルは、オペレーションのライフサイクルに従います。メタデータツリーを変更するオペレーション (インポートや変換など) は非同期です。これらのオペレーションのリクエストを開始し、バックグラウンドで実行されます。対応する describe API を呼び出して、リクエストのステータスを確認します。ツリーを読み取るオペレーション (子や定義の記述など) は同期されます。

**注記**  
DMS Schema Conversion では、*オペレーション*と*リクエスト*という用語は同じ意味で使用されます。

一般的なワークフローには、以下のステップが含まれます。

1. **インポート** — ソースデータベースまたはターゲットデータベースからメタデータツリーにメタデータをロードします。初期メタデータモデルをロードするか、データベースから既存のモデルを再ロードできます。詳細については、「[ツリーを移動する](#sc-metadata-model-navigating)」を参照してください。API リファレンスについては、[StartMetadataModelImport](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelImport.html)」を参照してください。

1. **評価** — 選択したソースメタデータモデルを分析して、変換の複雑さと潜在的な問題を特定します。詳細については、「[DMS Schema Conversion でのデータベース移行評価レポートの作成](assessment-reports.md)」を参照してください。

1. **変換** — 選択したソースメタデータモデルをターゲット互換形式に変換します。変換された定義は、ターゲットメタデータツリーの一部として保存されます。詳細については、「[DMS Schema Conversion でのデータベーススキーマの変換: step-by-stepガイド](schema-conversion-convert.md)」を参照してください。

1. **エクスポート** — メタデータ定義を保存します。ソースメタデータとターゲットメタデータの両方を SQL スクリプトとして Amazon S3 バケットにエクスポートできます。非仮想ターゲットの場合、変換されたオブジェクトをターゲットデータベースに直接適用することもできます。仮想ターゲットの詳細については、「」を参照してください[仮想データプロバイダー](virtual-data-provider.md)。変換されたオブジェクトの適用の詳細については、「」を参照してください[変換したコードの適用](schema-conversion-save-apply.md#schema-conversion-apply)。

ソースメタデータモデルを評価または変換したら、評価レポートを生成して結果を確認できます。詳細については、「[DMS Schema Conversion でのデータベース移行評価レポートの作成](assessment-reports.md)」を参照してください。

サポートされている移行ペアについては、[StartMetadataModelCreation](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelCreation.html) を使用して SQL 定義からカスタムステートメントメタデータモデルを作成することもできます。詳細については、「[ステートメントモデルを作成する](#sc-metadata-model-creation)」を参照してください。

## メタデータモデルツリーを操作する
<a name="sc-metadata-model-navigating"></a>

メタデータツリーは、次の API リクエストを使用してナビゲートできます。
+ [DescribeMetadataModelChildren](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModelChildren.html) — 特定のメタデータモデルの子を返します。各子には、次の呼び出しに渡すことができる選択ルール (特定のメタデータモデルを識別するフィルター) が含まれており、より深く掘り下げることができます。
+ [DescribeMetadataModel](https://docs.aws.amazon.com/dms/latest/APIReference/API_DescribeMetadataModel.html) — 特定のメタデータモデルの名前、タイプ、SQL 定義を返します。

どちらのリクエストにも `Origin`パラメータ (`SOURCE` または `TARGET`) が必要で、選択ルールを使用してメタデータモデルを識別します。ナビゲーションパターンは、ソースツリーとターゲットツリーの両方で同じです。選択ルールの形式の詳細については、「」を参照してください[DMS Schema Conversion の選択ルール](sc-selection-rules.md)。

任意のインターフェイスを選択して、ナビゲーション手順を表示します。

------
#### [ AWS Management Console ]

スキーマ変換プロジェクトを開くと、ソースメタデータツリーとターゲットメタデータツリーの両方を参照できます。プロジェクトを開く方法の詳細については、「」を参照してください[DMS Schema Conversion でのデータベーススキーマの変換: step-by-stepガイド](schema-conversion-convert.md)。

コンソールには、左側にソースツリー、右側にターゲットツリーの 2 つのツリーパネルが表示されます。各パネルは、データベースエンジン、アクションメニュー、メタデータツリー自体を示すヘッダーで構成されます。

Actions メニューはコンテキストに依存します。すべてのメタデータモデルがすべてのアクションを利用できるわけではありません。ソースツリーとターゲットツリーには、異なるアクションリストがあります。

メタデータモデルの SQL 定義とプロパティを表示するには、ツリーで選択します。中央パネルには、ソース SQL タブとターゲット SQL タブに 定義が表示され、プロパティタブにメタデータ属性が表示されます。メタデータモデルタイプによっては、テーブルとビューの列やルーチンのパラメータなど、追加のタブが表示される場合があります。

メタデータモデルの子を展開するには、その横の展開アイコン (黒い三角形) を選択します。展開アイコンまたはメタデータモデル名のいずれかを選択して、子を自動的にロードします。

変換されたソースメタデータモデルを選択すると、対応するターゲットメタデータモデルがターゲットツリーパネルで自動的に選択されます。

次のチュートリアルでは、メタデータツリーを参照してメタデータモデル定義を表示する方法を示します。

1. ツリーパネルで、サーバーの横にある展開アイコンを選択すると、**データベース**エンジンに応じてデータベースや**スキーマ**などの最上位カテゴリが表示されます。

1. カテゴリを展開して、探索するメタデータモデルに移動します。たとえば、**データベース**、特定のデータベース、**スキーマ**、スキーマ名、**テーブル**、**ビュー**、**プロシージャ**などのカテゴリを展開します。一部のデータベースエンジンには**データベース**レベルがありません。その場合、**スキーマを直接展開します**。

1. メタデータモデルを選択して、中央パネルにその SQL 定義を表示します。**ソース SQL** タブにはソース定義が表示され、メタデータモデルが変換されている場合は**ターゲット SQL** タブには変換された定義が表示されます。

------
#### [ AWS CLI ]

メタデータツリーを参照するには、繰り返しパターンに従います。レベルでメタデータをインポートし、そのレベルで子を記述します。このプロセスを繰り返して、ツリーを深く掘り下げます。

まず、最上位メタデータモデルを識別する選択ルールを使用して [start-metadata-model-import](https://docs.aws.amazon.com/cli/latest/reference/dms/start-metadata-model-import.html) を呼び出します。`server-name` と最上位 `category-name` (データベースエンジンに応じて `Schemas``Databases`または ) を に含めます`object-locator`。選択ルール構造の詳細については、「」を参照してください[DMS Schema Conversion の選択ルール](sc-selection-rules.md)。

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --refresh \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}","category-name":"{{top-level-category}}"},"rule-action":"explicit"}]}'
```

インポートリクエストは非同期です。[describe-metadata-model-imports](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model-imports.html) を使用して、ブラウジング前にステータスを確認します。特定のインポートを見つける`start-metadata-model-import`には、 によって返された`RequestIdentifier`値で `request-id` フィルターを使用します。

```
aws dms describe-metadata-model-imports \
    --migration-project-identifier "{{my-migration-project}}" \
    --filters Name=request-id,Values={{request-identifier}}
```

インポートが完了したら、[describe-metadata-model-children](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model-children.html) を呼び出して、そのレベルで子を取得します。

```
aws dms describe-metadata-model-children \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}"},
      "rule-action":"explicit"}]}'
```

レスポンスの各子には `SelectionRules`フィールドが含まれます。これらの選択ルールを次のインポートに渡し、より深く掘り下げるための呼び出しを記述します。

```
{
    "MetadataModelChildren": [
        {
            "MetadataModelName": "Schemas",
            "SelectionRules": "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"server-name\":\"src-database-server\",\"category-name\":\"Schemas\"},\"rule-action\":\"explicit\"}]}"
        }
    ]
}
```

次のレベルにドリルダウンするには、前の`describe-metadata-model-children`呼び出しから返された選択ルールを使用してそのレベルで をインポートし、その子を記述します。

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --refresh \
    --selection-rules '{{selection-rules-from-previous-response}}'
```

子を記述する前に、 でステータスを確認してインポートが完了していることを確認します`describe-metadata-model-imports`。次に、 を呼び出します`describe-metadata-model-children`。

```
aws dms describe-metadata-model-children \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{{selection-rules-from-previous-response}}'
```

レスポンスは、それぞれ独自の選択ルールを持つ、そのレベルの子を返します。これらの選択ルールを次のインポートに渡し、呼び出しを記述して、ツリーをより深く掘り下げます。

```
{
    "MetadataModelChildren": [
        {
            "MetadataModelName": "{{child-name}}",
            "SelectionRules": "{{selection-rules-JSON-string}}"
        }
    ]
}
```

**フルインポートと比較した --refresh の使用**

を使用して`--refresh`、データベースから特定のメタデータモデルを再ロードします。これにより、直接の子の名前もロードされます。これらの子は を使用して一覧表示できますが`describe-metadata-model-children`、さらに記述または参照するには、子レベルで別のインポートを実行する必要があります。

サブツリー全体 (スキーマ、データベース、テーブルやプロシージャなどの特定のカテゴリ内のすべてのオブジェクトなど) をロードするには、 `--refresh`フラグを省略し、選択ルール`include`で `rule-action` に変更します。

```
aws dms start-metadata-model-import \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{{{...}}},
      "rule-action":"include"}]}'
```

完全なサブツリーをロードするには、大きなスキーマに数分または数時間かかり、データベースに負荷がかかることがあります。インタラクティブな探索では、必要に応じて特定のブランチを使用`--refresh`およびドリルダウンします。

メタデータモデルの SQL 定義を取得するには、[describe-metadata-model](https://docs.aws.amazon.com/cli/latest/reference/dms/describe-metadata-model.html) を使用します。前の`describe-metadata-model-children`レスポンスから特定のメタデータモデルを識別する選択ルールを渡します。

```
aws dms describe-metadata-model \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin {{SOURCE}} \
    --selection-rules '{{selection-rules-for-target-object}}'
```

レスポンスには、メタデータモデル名、タイプ、SQL 定義が含まれます。

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "Definition": "CREATE TABLE hr.employees(\n    id integer NOT NULL,\n    name varchar(100),\n    department_id integer\n);"
}
```

**注記**  
スキーマやカテゴリなど、一部のメタデータモデルでは、 `Definition` フィールドが入力されない場合があります。

ソースメタデータモデルを変換すると、変換された定義がターゲットツリーで使用できます。これらを取得するには 3 つの方法があります。

**ソースレスポンスからのターゲット選択ルールの使用**

変換後にソースメタデータモデルを記述する場合、レスポンスにはターゲット選択ルールを含む`TargetMetadataModels`フィールドが含まれます。

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "TargetMetadataModels": [
        {
            "MetadataModelName": "employees",
            "SelectionRules": "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"1\",\"rule-name\":\"1\",\"object-locator\":{\"server-name\":\"tgt-database-server\",\"schema-name\":\"hr\",\"table-name\":\"employees\",\"table-type\":\"table\"},\"rule-action\":\"explicit\"}]}"
        }
    ],
    "Definition": "CREATE TABLE hr.employees(\n    id integer NOT NULL,\n    name varchar(100),\n    department_id integer\n);"
}
```

を使用して、選択ルールを から `TargetMetadataModels`に渡`describe-metadata-model`します`--origin TARGET`。

```
aws dms describe-metadata-model \
    --migration-project-identifier "{{my-migration-project}}" \
    --origin TARGET \
    --selection-rules '{{selection-rules-from-TargetMetadataModels}}'
```

レスポンスには、変換された SQL 定義がターゲットエンジン構文に含まれます。

```
{
    "MetadataModelName": "employees",
    "MetadataModelType": "table",
    "Definition": "CREATE TABLE hr.employees (\nid INT NOT NULL,\nname VARCHAR(100) DEFAULT NULL,\ndepartment_id INT DEFAULT NULL,\nPRIMARY KEY (id)\n);"
}
```

**get-target-selection-rules の使用**

[get-target-selection-rules](https://docs.aws.amazon.com/cli/latest/reference/dms/get-target-selection-rules.html) を使用すると、ソース`describe-metadata-model`で最初に を呼び出すことなく、ソース選択ルールをターゲットの対応するルールに直接変換できます。

```
aws dms get-target-selection-rules \
    --migration-project-identifier "{{my-migration-project}}" \
    --selection-rules '{{source-selection-rules}}'
```

**ターゲットツリーを直接ナビゲートする**

を使用して、ソースツリーと同じ方法でターゲットツリーを参照することもできます`--origin TARGET`。これは、ソースから開始せずに変換されたすべてのオブジェクトを探索する場合に便利です。

------

## ステートメントメタデータモデルを作成する
<a name="sc-metadata-model-creation"></a>

**注記**  
ステートメントの作成は現在、SQL Server から Aurora PostgreSQL へ、または SQL Server から Amazon RDS for PostgreSQL への指示のみをサポートしています。

[StartMetadataModelCreation](https://docs.aws.amazon.com/dms/latest/APIReference/API_StartMetadataModelCreation.html) を使用して、SQL 定義からステートメントメタデータモデルを作成できます。これは、アプリケーションクエリやアドホック SQL コードなど、ソースデータベースにオブジェクトとして存在しない SQL ステートメントを変換する場合に便利です。

------
#### [ AWS Management Console ]

ステートメントメタデータモデルの作成は、 マネジメントコンソールで AWS は使用できません。代わりに AWS CLI または AWS SDK を使用します。

------
#### [ AWS CLI ]

ステートメントメタデータモデルを作成するには、[start-metadata-model-creation](https://docs.aws.amazon.com/cli/latest/reference/dms/start-metadata-model-creation.html) を使用します。選択ルールは、ソースデータベースに存在するスキーマを指定する必要があります。作成されたメタデータモデルは、そのスキーマ内の `Statements`カテゴリの下に表示されます。

```
aws dms start-metadata-model-creation \
    --migration-project-identifier "{{my-migration-project}}" \
    --metadata-model-name "{{GetAllEmployees}}" \
    --selection-rules '{"rules":[{"rule-type":"selection","rule-id":"1",
      "rule-name":"1","object-locator":{"server-name":"{{my-server}}",
      "database-name":"{{my_database}}","schema-name":"{{dbo}}"},
      "rule-action":"explicit"}]}' \
    --properties '{"StatementProperties":{"Definition":"SELECT * FROM dbo.Employees;"}}'
```

作成後、`Statements`カテゴリの下のツリーにメタデータモデルを見つけて説明できます。

```
{
    "MetadataModelName": "GetAllEmployees",
    "MetadataModelType": "statement",
    "Definition": "SELECT * FROM dbo.Employees;"
}
```

作成後、評価、変換、エクスポートなど、ステートメントメタデータモデルでサポートされている任意のオペレーションを実行できます。

------