

# クローラーによる既存のスキーマの変更を防止する
<a name="crawler-schema-changes-prevent"></a>

 実行時に、AWS Glue クローラー が Data Catalog に対してスキーマの変更を行わないようにすることができます。デフォルトでは、クローラーは Data Catalog 内のスキーマを更新して、クロールするデータソースと一致させます。ただし、特にデータを変換またはクリーンアップし、元のスキーマに変更を上書きしない場合は、クローラーが既存のスキーマを変更できないようにする必要があります。

 テーブル定義の既存のスキーマを上書きしないようにクローラーを設定するには、次の手順に従います。

------
#### [  AWS マネジメントコンソール  ]

1. AWS マネジメントコンソールにサインインし、AWS Glue コンソール ([https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)) を開きます。

1. **[Data Catalog]** で **[クローラー]** を選択します。

1. リストからクローラーを選択したら、**[編集]** を選択します。

1. **[ステップ 4: 出力とスケジュールを設定する]** を選択します。

1. **[詳細オプション]** で、**[新しい列のみを追加]** または **[変更を無視し、Data Catalog のテーブルを更新しない]** を選択します。

1.  **すべての新規パーティションと既存パーティションをテーブルのメタデータで更新**するように設定オプションを設定できます。この設定により、パーティションスキーマがテーブルから継承されます。

1. **[更新]** を選択します。

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

次の例は、既存のスキーマを変更せず、新しい列のみを追加するようにクローラーを設定する方法を示しています。

```
aws glue update-crawler \
  --name myCrawler \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Tables": {"AddOrUpdateBehavior": "MergeNewColumns"}}}'
```

次の例は、既存のスキーマを変更せず、新しい列を追加しないようにクローラーを設定する方法を示しています。

```
aws glue update-crawler \
  --name myCrawler \
  --schema-change-policy UpdateBehavior=LOG \
  --configuration '{"Version": 1.0, "CrawlerOutput": {"Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }}}'
```

------
#### [ API ]

クローラーの実行時にテーブルスキーマを一切変更しない場合は、スキーマ変更ポリシーを `LOG` に設定します。

API を使用してクローラーを設定する場合は、以下のパラメータを設定します。
+ `SchemaChangePolicy` 構造の `UpdateBehavior` フィールドを `LOG` に設定します。
+  クローラー API で次の JSON オブジェクトの文字列表現を使用して `Configuration` フィールドを設定します。

  ```
  {
     "Version": 1.0,
     "CrawlerOutput": {
        "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }
     }
  }
  ```

------