

# Amazon RDS ゼロ ETL 統合
<a name="zero-etl"></a>

Amazon Redshift および Amazon SageMaker AI との Amazon RDS ゼロ ETL 統合では、RDS からのデータを使用して、ほぼリアルタイムの分析と機械学習 (ML) が可能です。これは、トランザクションデータを RDS データベースに書き込んだ後に分析送信先で利用できるようにするためのフルマネージドソリューションです。抽出、変換、ロード (ETL) は、複数のソースからのデータを大規模な中央のデータウェアハウスにまとめるプロセスです。****

ゼロ ETL 統合では、RDS データベースのデータが Amazon Redshift または Amazon SageMaker AI Lakehouse でほぼリアルタイムで利用できます。データがターゲットデータウェアハウスまたはデータレイクに格納されると、機械学習、マテリアライズドビュー、データ共有、複数のデータストアやデータレイクへのフェデレーションアクセス、および Amazon SageMaker AI、Quick、その他の AWS のサービスとの統合といった組み込み機能を使用して、分析、ML、AI のワークロードを強化できます。

ゼロ ETL 統合を作成するには、RDS データベースを*ソース*として指定し、サポートされたデータウェアハウスやレイクハウスを*ターゲット*として指定します。統合では、ソースデータベースからターゲットデータウェアハウスやレイクハウスにデータがレプリケートされます。

次の図は、Amazon Redshift とのゼロ ETL 統合のこの機能を示しています。

![\[ゼロ ETL 統合\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/zero-etl-integrations.png)


次の図は、Amazon SageMaker AI Lakehouse とのゼロ ETL 統合のこの機能を示しています。

![\[Amazon SageMaker AI Lakehouse とのゼロ ETL 統合\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/zero-etl-rds-lakehouse.png)


統合では、データパイプラインの状態をモニタリングし、可能な場合は問題から回復します。複数の RDS データベースから単一のターゲットデータウェアハウスまたはレイクハウスに統合を作成できるため、複数のアプリケーションにわたってインサイトを引き出すことができます。

**Topics**
+ [利点](#zero-etl.benefits)
+ [主要なコンセプト](#zero-etl.concepts)
+ [制限事項](#zero-etl.reqs-lims)
+ [クォータ](#zero-etl.quotas)
+ [サポート対象のリージョン](#zero-etl.regions)
+ [Amazon RDS ゼロ ETL 統合の開始方法](zero-etl.setting-up.md)
+ [Amazon Redshift との Amazon RDS ゼロ ETL 統合の作成](zero-etl.creating.md)
+ [Amazon SageMaker Lakehouse との Amazon RDS ゼロ ETL 統合の作成](zero-etl.creating-smlh.md)
+ [Amazon RDS ゼロ ETL 統合でのデータフィルタリング](zero-etl.filtering.md)
+ [ソース RDS データベースへのデータの追加とクエリ](zero-etl.querying.md)
+ [Amazon RDS ゼロ ETL 統合の表示と監視](zero-etl.describingmonitoring.md)
+ [Amazon RDS ゼロ ETL 統合の変更](zero-etl.modifying.md)
+ [AmazonRDS ゼロ ETL 統合の削除](zero-etl.deleting.md)
+ [Amazon RDS ゼロ ETL 統合のトラブルシューティング](zero-etl.troubleshooting.md)

## 利点
<a name="zero-etl.benefits"></a>

RDS ゼロ ETL 統合には、主に次のような利点があります。
+ 複数のデータソースから総合的なインサイトを引き出すのに役立ちます。
+ 抽出、変換、ロード (ETL) 操作を実行する複雑なデータパイプラインを構築して管理する必要がなくなります。ゼロ ETL 統合は、パイプラインのプロビジョニングと管理を顧客に代わって行うことで、パイプラインの構築と管理に伴う課題を排除します。
+ 運用上の負担とコストを削減し、アプリケーションの改善に集中できます。
+ ターゲット送信先の分析機能と ML 機能を活用して、トランザクションデータやその他のデータからインサイトを引き出し、重要で時間的制約のあるイベントに効果的に対応できます。

## 主要なコンセプト
<a name="zero-etl.concepts"></a>

ゼロ ETL 統合を始める際には、以下の概念を検討してください。

**統合**  
RDS データベースからデータウェアハウスまたはカタログにトランザクションデータとスキーマを自動的に複製する、フルマネージドデータパイプライン。

**ソースデータベース**  
データがレプリケートされる RDS データベース。シングル AZ またはマルチ AZ DB インスタンス、あるいはマルチ AZ DB クラスター (RDS for MySQL のみ) を指定できます。

**Target**  
データがレプリケートされるデータウェアハウスまたはレイクハウス。データウェアハウスには、[プロビジョニングされたクラスター](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)データウェアハウスと[サーバーレス](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-namespace.html)データウェアハウスの 2 種類があります。プロビジョニングされたクラスターデータウェアハウスは、ノードと呼ばれるコンピューティングリソースのコレクションであり、*クラスター*と呼ばれるグループに編成されています。サーバーレスデータウェアハウスは、コンピューティングリソースを格納するワークグループと、データベースオブジェクトとユーザーを収容する名前空間で構成されています。どちらのデータウェアハウスも分析エンジンを実行し、1 つ以上のデータベースを含んでいます。  
ターゲットレイクハウスは、カタログ、データベース、テーブル、ビューで構成されます。レイクハウスアーキテクチャの詳細については、「*Amazon SageMaker AI Unified Studio ユーザーガイド*」の「[https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse-components.html](https://docs.aws.amazon.com/sagemaker-unified-studio/latest/userguide/lakehouse-components.html)」を参照してください。  
複数のソースデータベースの を同じターゲットに書き込むことができます。  
詳細については、「*Amazon Redshift デベロッパーガイド*」の「[データウェアハウスのシステムアーキテクチャ](https://docs.aws.amazon.com/redshift/latest/dg/c_high_level_system_architecture.html)」を参照してください。

## 制限事項
<a name="zero-etl.reqs-lims"></a>

RDS ゼロ ETL 統合には、以下の制限が適用されます。

**Topics**
+ [一般的な制限事項](#zero-etl.reqs-lims-general)
+ [RDS for MySQL の制限事項](#zero-etl.reqs-lims-mysql)
+ [RDS for PostgreSQL の制限事項](#zero-etl.reqs-lims-rds-postgres)
+ [RDS for Oracle の制限事項](#zero-etl.reqs-lims-oracle)
+ [Amazon Redshift の制限事項](#zero-etl.reqs-lims-redshift)
+ [Amazon SageMaker AI Lakehouse の制限事項](#zero-etl.reqs-lims-sagemaker-)

### 一般的な制限事項
<a name="zero-etl.reqs-lims-general"></a>
+ ソースデータベースは、ターゲットと同じリージョンにある必要があります。
+ クラスターに既存の統合がある場合、データベースやそのインスタンスの名前を変更することはできません。
+ 同じソースデータベースとターゲットデータベースの間に複数の統合を作成することはできません。
+ 既存の統合があるデータベースは削除できません。まず、関連する統合をすべて削除する必要があります。
+ ソースデータベースを停止すると、データベースを再開するまで、最後のいくつかのトランザクションがターゲットにレプリケートされない場合があります。
+ ソースデータベースが停止している場合、統合を削除することはできません。
+ データベースがブルー/グリーンデプロイのソースである場合、ブルー環境とグリーン環境の切り替え中に既存のゼロ ETL 統合を置くことはできません。最初に統合を削除してから切り替えて、再作成する必要があります。
+ 統合を作成中のソースデータベースで別の統合を作成することはできません。
+ 初めて統合を作成するとき、またはテーブルを再同期するとき、ソースデータベースのサイズによっては、ソースからターゲットへのデータシードに 20 ～ 25 分以上かかる場合があります。この遅延により、レプリカラグが長くなる可能性があります。
+ 一部のデータ型はサポートされていません。詳細については、「[RDS データベースと Amazon Redshift データベース間のデータタイプの相違点](zero-etl.querying.md#zero-etl.data-type-mapping)」を参照してください。
+ システムテーブル、一時テーブル、ビューはターゲットウェアハウスにレプリケートされません。
+ ソーステーブルで DDL コマンド (`ALTER TABLE` など) を実行すると、テーブルの再同期がトリガーされ、再同期中はテーブルをクエリできなくなる場合があります。詳細については、「[1 つ以上の Amazon Redshift テーブルを再同期する必要がある](zero-etl.troubleshooting.md#zero-etl.troubleshooting.resync)」を参照してください。

### RDS for MySQL の制限事項
<a name="zero-etl.reqs-lims-mysql"></a>
+ ソースデータベースは、サポートされているバージョンの RDS for MySQL を実行している必要があります。サポートされているバージョンのリストについては、「」を参照してください[Amazon RDS ゼロ ETL 統合でサポートされているリージョンと DB エンジン](Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.md)
+ ゼロ ETL 統合は、同じ AWS リージョンのプライマリインスタンスとリードレプリカインスタンスの両方ではサポートされません。
+ ゼロ ETL 統合では、MySQL バイナリロギング (binlog) を利用して継続的なデータ変更をキャプチャします。バイナリログベースのデータフィルタリングは使用しないでください。ソースとターゲットのデータベース間でデータの不整合が生じる可能性があります。
+ ゼロ ETL 統合は、InnoDB ストレージエンジンを使用するように設定されたデータベースでのみサポートされています。
+ 定義済みのテーブル更新を伴う外部キー参照はサポートされていません。具体的には、`ON DELETE` および `ON UPDATE` ルールは、`CASCADE`、`SET NULL`、および `SET DEFAULT` アクションではサポートされていません。別のテーブルへの参照を含むテーブルを作成または更新しようとすると、テーブルは失敗状態になります。
+ マグネティックストレージを使用するソースデータベースの統合を作成することはできません。

### RDS for PostgreSQL の制限事項
<a name="zero-etl.reqs-lims-rds-postgres"></a>
+ ソースデータベースは、バージョン 15.7 以降、16.3 以降、または 17.1 以降を実行している RDS for PostgreSQL インスタンスである必要があります。以前のバージョンはサポートされていません。
+ RDS for PostgreSQL ゼロ ETL 統合は、ソースデータベースとしてマルチ AZ DB クラスターをサポートしていません。
+ RDS for PostgreSQL リードレプリカインスタンスからゼロ ETL 統合を作成することはできません。
+ PostgreSQL のログに記録されていないテーブルとマテリアライズドビューは Amazon Redshift にレプリケートされません。
+ Amazon Redshift の制限により、[ジオメトリデータタイプ](https://www.postgresql.org/docs/current/datatype-geometric.html)や 64KB を超えるデータなど、特定の PostgreSQL データタイプのレプリケーションはサポートされていません。RDS for PostgreSQL と Amazon Redshift のデータタイプの違いの詳細については、「**データタイプの相違点**」セクションの「[RDS for PostgreSQL](zero-etl.querying.md#zero-etl.data-type-mapping-postgres)」を参照してください。
+ アクティブなゼロ ETL 統合があるソース RDS for PostgreSQL インスタンスでは、[メジャーバージョンアップグレード](USER_UpgradeDBInstance.PostgreSQL.md)を実行できません。ソースインスタンスをアップグレードするには、まず既存のゼロ ETL 統合をすべて削除する必要があります。メジャーバージョンアップグレードが完了したら、ゼロ ETL 統合を再作成できます。
+ ソース DB インスタンスで[宣言的パーティショニング](https://www.postgresql.org/docs/current/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE)トランザクションを実行すると、影響を受けるすべてのテーブルが失敗状態になり、アクセスできなくなります。

### RDS for Oracle の制限事項
<a name="zero-etl.reqs-lims-oracle"></a>
+ ソースデータベースは、バージョン 19c の Enterprise Edition または Standard Edition 2 (2019 年 7 月リリースアップデート以降) を実行している RDS for Oracle インスタンスである必要があります。以前のバージョンはサポートされていません。
+ RDS for Oracle リードレプリカインスタンスからゼロ ETL 統合を作成することはできません。
+ [テナントデータベース](Oracle.Concepts.CDBs.md)にゼロ ETL 統合がある場合、このテナントデータベースの名前を変更することはできません。
+ テナントデータベースは 1 つのゼロ ETL 統合のみを持つことができます。
+ RDS for Oracle と Amazon Redshift のデータタイプ間には、いくつかの違いがあります。詳細については、「**データタイプの相違点**」セクションの「[RDS for Oracle](zero-etl.querying.md#zero-etl.data-type-mapping-oracle)」を参照してください。

### Amazon Redshift の制限事項
<a name="zero-etl.reqs-lims-redshift"></a>

ゼロ ETL 統合に関連する Amazon Redshift の制限の一覧については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift とのゼロ ETL 統合を使用する際の考慮事項](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl.reqs-lims.html)」を参照してください。

### Amazon SageMaker AI Lakehouse の制限事項
<a name="zero-etl.reqs-lims-sagemaker-"></a>

以下は、Amazon SageMaker AI Lakehouse のゼロ ETL 統合の制限です。
+ カタログ名の長さは 19 文字に制限されています。

## クォータ
<a name="zero-etl.quotas"></a>

お客様のアカウントには、RDS ゼロ ETL 統合に関連する以下のクォータが設定されています。特に指定がない限り、各クォータはリージョンあたりです。


| 名前 | デフォルト  | 説明  | 
| --- | --- | --- | 
| 統合 | 100 | AWS アカウント 内の統合の総数。 | 
| ターゲットあたりの統合 | 50 | 1 つのターゲットデータウェアハウスまたはレイクハウスにデータを送信する統合の数。 | 
| ソースインスタンスごとの統合 | 5 | 単一のソース DB インスタンスからデータを送信する統合の数。 | 

さらに、ターゲットウェアハウスは、各 DB インスタンスまたはクラスターノードで使用できるテーブルの数に一定の制限を設けています。Amazon Redshift のクォータと制限の詳細については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift のクォータと制限](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)」を参照してください。

## サポート対象のリージョン
<a name="zero-etl.regions"></a>

RDS ゼロ ETL 統合は、AWS リージョンのサブセットで利用できます。サポートされているリージョンのリストについては「[Amazon RDS ゼロ ETL 統合でサポートされているリージョンと DB エンジン](Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.md)」を参照してください。

# Amazon RDS ゼロ ETL 統合の開始方法
<a name="zero-etl.setting-up"></a>

ゼロ ETL 統合を作成する前に、必要なパラメータとアクセス許可で RDS データベースとデータウェアハウスを設定します。セットアップ時には、以下の手順を完了します。

1. [カスタム DBのパラメータグループを作成します。](#zero-etl.parameters)

1. [ソースデータベースを作成](#zero-etl.create-cluster)します。

1. [Amazon Redshift のターゲットのデータウェアハウスを作成](#zero-etl-setting-up.data-warehouse)するか、[ターゲット Amazon SageMaker Lakehouse を作成](#zero-etl-setting-up.sagemaker)します。

これらのタスクが完了したら、「[Amazon Redshift との Amazon RDS ゼロ ETL 統合の作成](zero-etl.creating.md)」または「[Amazon SageMaker Lakehouse との Amazon RDS ゼロ ETL 統合の作成](zero-etl.creating-smlh.md)」に進みます。

**ヒント**  
RDS では、統合の作成中にこれらのセットアップ手順を手動で行わずに、自動的に完了させることができます。統合の作成をすぐに開始するには、「[Amazon Redshift との Amazon RDS ゼロ ETL 統合の作成](zero-etl.creating.md)」を参照してください。

ステップ 3 では、必要に応じて、ターゲットデータウェアハウス (ステップ 3a) またはターゲットレイクハウス (ステップ 3b) のいずれかを作成できます。
+ SQL ベースの分析で従来のデータウェアハウス機能が必要な場合は、データウェアハウスを選択します。
+ 機械学習機能が必要であるとともに、データサイエンスと ML ワークフローに Lakehouse 機能を使用する場合は、Amazon SageMaker Lakehouse を選択します。

## ステップ 1: カスタム DB のパラメータグループを作成する
<a name="zero-etl.parameters"></a>

Amazon RDS ゼロ ETL 統合では、データのレプリケーションを制御する特定の値が DB パラメータに必要です。特定のパラメータは、ソース DB エンジンによって異なります。これらのパラメータを設定するには、まずカスタム DB パラメータグループを作成して、これをソースデータベースに関連付ける必要があります。ソース DB エンジンに応じて、以下のパラメータ値を設定します。カスタムパラメータグループを作成するには、「[Amazon RDS DB インスタンスの DB パラメータグループ](USER_WorkingWithDBInstanceParamGroups.md)」を参照してください。依存関係の問題を避けるため、すべてのパラメータ値を同じリクエスト内で設定することをお勧めします。

**RDS for MySQL**:
+ `binlog_format=ROW`
+ `binlog_row_image=full`

また、`binlog_row_value_options` パラメータが `PARTIAL_JSON` に*設定されていない*ことも確認してください。ソースデータベースがマルチ AZ DB クラスターの場合は、`binlog_transaction_compression` パラメータが `ON` に設定されて*いない*ことを確認します。

これらのパラメータの一部 (`binlog_format` など) は動的です。つまり、再起動をトリガーせずにパラメータに変更を適用できます。これは、一部の既存のセッションがパラメータの古い値を使用し続ける可能性があることを意味します。これに伴ってゼロ ETL 統合の作成時に問題が起きないようにするには、[パフォーマンススキーマ](USER_PerfInsights.EnableMySQL.md)を有効にします。パフォーマンススキーマにより、ゼロ ETL 事前チェックが実行されるため、プロセスの早い段階で欠落しているパラメータを検出できます。

**RDS for PostgreSQL**:
+ `rds.logical_replication = 1`
+ `rds.replica_identity_full = 1`
+ `session_replication_role = origin`
+ `wal_sender_timeout ≥ 20000 or = 0`
+ `max_wal_senders ≥ 20`
+ `max_replication_slots ≥ 20`

複数の PostgreSQL 統合の場合、統合ごとに 1 つの論理レプリケーションスロットが使用されます。使用状況に基づいて `max_replication_slots` パラメータと `max_wal_senders` パラメータを確認します。

ゼロ ETL 統合で効率的なデータ同期を行うには、ソース DB インスタンスで `rds.replica_identity_full` を設定します。これにより、`UPDATE` および `DELETE` オペレーション中に、先行書き込みログ (WAL) にプライマリキー情報だけでなく、[行全体のデータを記録する](https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY)ようデータベースに指示します。ゼロ ETL では、レプリケートされたすべてのテーブルに必要なプライマリキーがある場合でも、行全体のデータが必要です。クエリ時にどのデータを表示するかを決定するために、Amazon Redshift は特殊なアンチ結合戦略を使用して、データを内部の削除追跡テーブルと比較します。Amazon Redshift は、行全体のイメージをログに記録することで、これらのアンチ結合を効率的に実行できます。行全体のデータがない場合、Amazon Redshift は追加のルックアップを実行する必要があるため、Amazon Redshift が使用する列指向エンジンの高スループットオペレーション中にパフォーマンスが低下する可能性があります。

**重要**  
行全体をログに記録するようにレプリカ ID を設定すると、[WAL ボリュームが増加](https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-WAL-LEVEL)します。これに伴って、特に幅の広いテーブルや頻繁な更新において、書き込み増幅と I/O 使用量が高くなる可能性があります。このような影響に備えるには、ストレージ容量と I/O 要件を計画し、WAL の増加をモニタリングして、書き込みが多いワークロードのレプリケーション遅延を追跡します。

**RDS for Oracle**:

RDS for Oracle ではパラメータの変更は不要です。

## ステップ 2: ソースデータベースを選択または作成する
<a name="zero-etl.create-cluster"></a>

カスタム DB のパラメータグループを作成したら、RDS DB インスタンスを選択または作成します。このデータベースは、ターゲットデータウェアハウスへのデータレプリケーションのソースになります。シングル AZ DB インスタンスまたはマルチ AZ DB インスタンスの作成手順については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。マルチ AZ DB クラスター (RDS for MySQL のみ) を作成する手順については、「[Amazon RDS 用のマルチ AZ DB クラスターの作成](create-multi-az-db-cluster.md)」を参照してください。

データベースは、サポートされている DB エンジンバージョンを実行している必要があります。サポートされているバージョンのリストについては、「[Amazon RDS ゼロ ETL 統合でサポートされているリージョンと DB エンジン](Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.md)」を参照してください。

データベースを作成するには、**[追加設定]** で、デフォルトの** DB パラメータグループ**を、前のステップで作成したカスタムパラメータグループに変更します。

**注記**  
データベースの作成*後*にパラメータグループをデータベースに関連付ける場合は、ゼロ ETL 統合を作成する前にデータベースを再起動して変更を適用する必要があります。手順については、「[ DB インスタンスの再起動](USER_RebootInstance.md)」または「[Amazon RDS のマルチ AZ DB クラスターとリーダー DB インスタンスの再起動](multi-az-db-clusters-concepts-rebooting.md)」を参照してください。

さらに、データベースで自動バックアップが有効になっていることを確認してください。詳細については、「[自動バックアップの有効化](USER_WorkingWithAutomatedBackups.Enabling.md)」を参照してください。

## ステップ 3a: ターゲットデータウェアハウスを作成する
<a name="zero-etl-setting-up.data-warehouse"></a>

ソースデータベースを作成した後、ターゲットのデータウェアハウスを作成して設定する必要があります。データウェアハウスは、以下の要件を満たしている必要があります。
+ 少なくとも 2 つのノードがある RA3 ノードタイプまたは Redshift Serverless を使用している。
+ 暗号化されている (プロビジョニングされたクラスターを使用している場合) 詳細については、「[Amazon Redshift データベースの暗号化](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html)」を参照してください。

データウェアハウスを作成する手順については、プロビジョニングされたクラスター用の「[クラスターの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster)」またはRedshift Serverless 用の「[名前空間を使用したワークグループの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-workgroups-create-workgroup-wizard.html)」を参照してください。

### データウェアハウスで大文字と小文字の区別を有効にします。
<a name="zero-etl-setting-up.case-sensitivity"></a>

統合を正常に行うには、データウェアハウスで大文字と小文字を区別するパラメータ ([https://docs.aws.amazon.com/redshift/latest/dg/r_enable_case_sensitive_identifier.html](https://docs.aws.amazon.com/redshift/latest/dg/r_enable_case_sensitive_identifier.html)) を有効にする必要があります。デフォルトでは、プロビジョニング済みクラスターと Redshift Serverless ワークグループの大文字と小文字の区別は無効になっています。

大文字と小文字の区別を有効にするには、データウェアハウスのタイプに応じて以下の手順を実行します。
+ **プロビジョニングされたクラスター** — プロビジョニングされたクラスターで大文字と小文字の区別を有効にするには、`enable_case_sensitive_identifier` パラメータを有効にしたカスタムパラメータグループを作成します。次に、そのパラメータグループとクラスターを関連付けます。手順については、「[コンソールを使用したパラメータグループの管理](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-parameter-groups-console.html)」または「[AWS CLI を使用したパラメータ値の設定](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html#configure-parameters-using-the-clil)」を参照してください。
**注記**  
クラスターにパラメータグループを関連付けたら、クラスターを再起動することを忘れないでください。
+ **Serverless ワークグループ** — Redshift Serverless ワークグループで大文字と小文字の区別を有効にするには、AWS CLI を使用する必要があります。Amazon Redshift コンソールは現在、Redshift Serverless パラメータ値の変更をサポートしていません。次の [update-workgroup](https://docs.aws.amazon.com/cli/latest/reference/redshift-serverless/update-workgroup.html) リクエストを送信します。

  ```
  aws redshift-serverless update-workgroup \
    --workgroup-name target-workgroup \
    --config-parameters parameterKey=enable_case_sensitive_identifier,parameterValue=true
  ```

  パラメータ値を変更した後、ワークグループを再起動する必要はありません。

### データウェアハウスの認可を設定します。
<a name="zero-etl.setup-auth"></a>

データウェアハウスを作成したら、ソース RDS データベースを承認済みの統合ソースとして設定する必要があります。手順については、「[Amazon Redshift データウェアハウスの認可を設定する](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html#zero-etl-using.redshift-iam)」を参照してください。

## AWS を使用して統合をセットアップする
<a name="zero-etl.setup-sdk"></a>

各リソースを手動でセットアップするのではなく、次の Python スクリプトを実行して、必要なリソースを自動的にセットアップできます。このコード例では [AWS SDK for Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) を使用してソース RDS for MySQL DB インスタンスとターゲットデータウェアハウスを作成し、それぞれに必要なパラメータ値を指定します。次に、データベースが使用可能になるまで待ってから、データベース間にゼロ ETL 統合を作成します。設定する必要があるリソースに応じて、さまざまな関数をコメントアウトできます。

必要な従属関係をインストールには、次のコマンドを実行します。

```
pip install boto3
pip install time
```

スクリプト内で、オプションでソース、ターゲット、パラメータグループの名前を変更します。最後の関数は、リソースのセットアップ後に `my-integration` という名前の統合を作成します。

### Python コード例
<a name="zero-etl.setup-sdk-python"></a>

```
import boto3
import time

# Build the client using the default credential configuration.
# You can use the CLI and run 'aws configure' to set access key, secret
# key, and default Region.

rds = boto3.client('rds')
redshift = boto3.client('redshift')
sts = boto3.client('sts')

source_db_name = 'my-source-db' # A name for the source database
source_param_group_name = 'my-source-param-group' # A name for the source parameter group
target_cluster_name = 'my-target-cluster' # A name for the target cluster
target_param_group_name = 'my-target-param-group' # A name for the target parameter group

def create_source_db(*args):
    """Creates a source RDS for MySQL DB instance"""

    response = rds.create_db_parameter_group(
        DBParameterGroupName=source_param_group_name,
        DBParameterGroupFamily='mysql8.0',
        Description='RDS for MySQL zero-ETL integrations'
    )
    print('Created source parameter group: ' + response['DBParameterGroup']['DBParameterGroupName'])

    response = rds.modify_db_parameter_group(
        DBParameterGroupName=source_param_group_name,
        Parameters=[
            {
                'ParameterName': 'binlog_format',
                'ParameterValue': 'ROW',
                'ApplyMethod': 'pending-reboot'
            },
            {
                'ParameterName': 'binlog_row_image',
                'ParameterValue': 'full',
                'ApplyMethod': 'pending-reboot'
            }
        ]
    )
    print('Modified source parameter group: ' + response['DBParameterGroupName'])

    response = rds.create_db_instance(
        DBInstanceIdentifier=source_db_name,
        DBParameterGroupName=source_param_group_name,
        Engine='mysql',
        EngineVersion='8.0.32',
        DBName='mydb',
        DBInstanceClass='db.m5.large',
        AllocatedStorage=15,
        MasterUsername='username',
        MasterUserPassword='Password01**'
    )
    print('Creating source database: ' + response['DBInstance']['DBInstanceIdentifier'])
    source_arn = (response['DBInstance']['DBInstanceArn'])
    create_target_cluster(target_cluster_name, source_arn, target_param_group_name)
    return(response)

def create_target_cluster(target_cluster_name, source_arn, target_param_group_name):
    """Creates a target Redshift cluster"""

    response = redshift.create_cluster_parameter_group(
        ParameterGroupName=target_param_group_name,
        ParameterGroupFamily='redshift-1.0',
        Description='RDS for MySQL zero-ETL integrations'
    )
    print('Created target parameter group: ' + response['ClusterParameterGroup']['ParameterGroupName'])

    response = redshift.modify_cluster_parameter_group(
        ParameterGroupName=target_param_group_name,
        Parameters=[
            {
                'ParameterName': 'enable_case_sensitive_identifier',
                'ParameterValue': 'true'
            }
        ]
    )
    print('Modified target parameter group: ' + response['ParameterGroupName'])

    response = redshift.create_cluster(
        ClusterIdentifier=target_cluster_name,
        NodeType='ra3.4xlarge',
        NumberOfNodes=2,
        Encrypted=True,
        MasterUsername='username',
        MasterUserPassword='Password01**',
        ClusterParameterGroupName=target_param_group_name
    )
    print('Creating target cluster: ' + response['Cluster']['ClusterIdentifier'])
    
    # Retrieve the target cluster ARN
    response = redshift.describe_clusters(
        ClusterIdentifier=target_cluster_name
    )
    target_arn = response['Clusters'][0]['ClusterNamespaceArn']

    # Retrieve the current user's account ID
    response = sts.get_caller_identity()
    account_id = response['Account']

    # Create a resource policy granting access to source database and account ID
    response = redshift.put_resource_policy(
        ResourceArn=target_arn,
        Policy='''
        {
            \"Version\":\"2012-10-17\",		 	 	 
            \"Statement\":[
                {\"Effect\":\"Allow\",
                \"Principal\":{
                    \"Service\":\"redshift.amazonaws.com\"
                },
                \"Action\":[\"redshift:AuthorizeInboundIntegration\"],
                \"Condition\":{
                    \"StringEquals\":{
                        \"aws:SourceArn\":\"%s\"}
                    }
                },
                {\"Effect\":\"Allow\",
                \"Principal\":{
                    \"AWS\":\"arn:aws:iam::%s:root\"},
                \"Action\":\"redshift:CreateInboundIntegration\"}
            ]
        }
        ''' % (source_arn, account_id)
    )
    return(response)

def wait_for_db_availability(*args):
    """Waits for both databases to be available"""

    print('Waiting for source and target to be available...')

    response = rds.describe_db_instances(
        DBInstanceIdentifier=source_db_name
    )
    source_status = response['DBInstances'][0]['DBInstanceStatus']
    source_arn = response['DBInstances'][0]['DBInstanceArn']

    response = redshift.describe_clusters(
        ClusterIdentifier=target_cluster_name
    )
    target_status = response['Clusters'][0]['ClusterStatus']
    target_arn = response['Clusters'][0]['ClusterNamespaceArn']

    # Every 60 seconds, check whether the databases are available
    if source_status != 'available' or target_status != 'available':
        time.sleep(60)
        response = wait_for_db_availability(
            source_db_name, target_cluster_name)
    else:
        print('Databases available. Ready to create zero-ETL integration.')
        create_integration(source_arn, target_arn)
        return

def create_integration(source_arn, target_arn):
    """Creates a zero-ETL integration using the source and target databases"""

    response = rds.create_integration(
        SourceArn=source_arn,
        TargetArn=target_arn,
        IntegrationName='my-integration'
    )
    print('Creating integration: ' + response['IntegrationName'])
    
def main():
    """main function"""
    create_source_db(source_db_name, source_param_group_name)
    wait_for_db_availability(source_db_name, target_cluster_name)

if __name__ == "__main__":
    main()
```

## ステップ 3b: Amazon SageMaker Lakehouse ゼロ ETL 統合用の AWS Glue カタログを作成する
<a name="zero-etl-setting-up.sagemaker"></a>

Amazon SageMaker Lakehouse とのゼロ ETL 統合を作成する場合は、AWS Lake Formation で AWS Glue マネージドカタログを作成する必要があります。ターゲットカタログは Amazon Redshift マネージドカタログである必要があります。Amazon Redshift マネージドカタログを作成するには、まず `AWSServiceRoleForRedshift` サービスにリンクされたロールを作成します。Lake Formation コンソールで、読み取り専用管理者として `AWSServiceRoleForRedshift` を追加します。

その前のタスクの詳細については、次のトピックを参照してください。
+ Amazon Redshift マネージドカタログの作成の詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Creating an Amazon Redshift managed catalog in the AWS Glue Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/create-rms-catalog.html)」を参照してください。
+ Amazon Redshift でのサービスにリンクされたロールの詳細については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift でのサービスにリンクされたロールの使用](https://docs.aws.amazon.com/redshift/latest/mgmt/using-service-linked-roles.html)」を参照してください。
+ Lake Formation の読み取り専用での管理者アクセス許可の詳細については、「*AWS Lake Formation デベロッパーガイド*」の「[Lake Formation personas and IAM permissions reference](https://docs.aws.amazon.com/lake-formation/latest/dg/permissions-reference.html)」を参照してください。

### ターゲット AWS Glue カタログのアクセス許可を設定する
<a name="zero-etl-setting-up.sagemaker-permissions"></a>

ゼロ ETL 統合のターゲットカタログを作成する前に、Lake Formation ターゲット作成ロールと AWS Glue データ転送ロールを作成する必要があります。Lake Formation ターゲット作成ロールを使用して、ターゲットカタログを作成します。ターゲットカタログを作成するときは、**[エンジンからのアクセス]** セクションの **[IAM ロール]** フィールドに Glue データ転送ロールを入力します。

#### Lake Formation ターゲット作成ロール
<a name="zero-etl-setting-up.target-creation-role"></a>

ターゲット作成ロールは Lake Formation 管理者であり、次のアクセス許可が必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "lakeformation:RegisterResource",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutEncryptionConfiguration",
                "iam:PassRole",
                "glue:CreateCatalog",
                "glue:GetCatalog",
                "s3:PutBucketTagging",
                "s3:PutLifecycleConfiguration",
                "s3:PutBucketPolicy",
                "s3:CreateBucket",
                "redshift-serverless:CreateNamespace",
                "s3:DeleteBucket",
                "s3:PutBucketVersioning",
                "redshift-serverless:CreateWorkgroup"
            ],
            "Resource": [
                "arn:aws:glue:*:111122223333:catalog",
                "arn:aws:glue:*:111122223333:catalog/*",
                "arn:aws:s3:::*",
                "arn:aws:redshift-serverless:*:111122223333:workgroup/*",
                "arn:aws:redshift-serverless:*:111122223333:namespace/*",
                "arn:aws:iam::111122223333:role/GlueDataCatalogDataTransferRole"
            ]
        }
    ]
}
```

------

ターゲット作成ロールには、以下の信頼関係が必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "glue.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::111122223333:user/Username"
          },
          "Action": "sts:AssumeRole"
        }
    ]
}
```

------

#### Glue データ転送ロール
<a name="zero-etl-setting-up.glue-data-transfer-role"></a>

Glue データ転送ロールは MySQL カタログオペレーションに必要であり、次のアクセス許可が必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DataTransferRolePolicy",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt",
                "glue:GetCatalog",
                "glue:GetDatabase"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

Glue データ転送ロールには、以下の信頼関係が必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "glue.amazonaws.com",
                    "redshift.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

## 次のステップ
<a name="zero-etl.setup-next"></a>

ソースの RDS データベースと、Amazon Redshift ターゲットデータウェアハウスまたは Amazon SageMaker Lakehouse により、ゼロ ETL 統合を作成してデータをレプリケートできます。手順については、「[Amazon Redshift との Amazon RDS ゼロ ETL 統合の作成](zero-etl.creating.md)」を参照してください。

# Amazon Redshift との Amazon RDS ゼロ ETL 統合の作成
<a name="zero-etl.creating"></a>

Amazon RDS ゼロ ETL 統合を作成するには、ソース RDS データベースとターゲットの Amazon Redshift データウェアハウスを指定します。暗号化設定をカスタマイズし、タグを追加することもできます。Amazon RDS はソースデータベースとそのターゲットの間の統合を作成します。統合がアクティブになると、ソースデータベースに挿入したデータはすべて、設定された Amazon Redshift ターゲットにレプリケートされます。

## 前提条件
<a name="zero-etl.create-prereqs"></a>

ゼロ ETL 統合を作成する前に、ソースのデータベースとターゲットの Amazon Redshift データウェアハウスを作成する必要があります。また、データベースを承認済みの統合ソースとして追加することによって、データウェアハウスへのレプリケーションを許可する必要があります。

これらの各手順の実行方法については、「[Amazon RDS ゼロ ETL 統合の開始方法](zero-etl.setting-up.md)」を参照してください。

## 必要なアクセス許可
<a name="zero-etl.create-permissions"></a>

ゼロ ETL 統合を作成するには、特定の IAM アクセス権限が必要です。少なくとも、次のアクションを実行するためのアクセス権限が必要です。
+ ソースの RDS データベースのゼロ ETL 統合を作成します。
+ すべてのゼロ ETL 統合を表示および削除します。
+ ターゲットデータウェアハウスへのインバウンド統合を作成します。

以下のサンプルポリシーは、統合の作成と管理に必要な[最小特権](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)を示しています。ユーザーまたはロールが `AdministratorAccess` マネージドポリシーなど、より広範なアクセス許可を持つ場合、これらの正確なアクセス許可を必要としない場合があります。

**注記**  
Redshift Amazon リソースネーム (ARN) の形式は次のとおりです。サーバーレス名前空間 UUID の前にコロン (`:`) ではなくフォワードスラッシュ (`(/`) を使用していることに注意してください。  
プロビジョニング済みクラスタ — `arn:aws:redshift:{region}:{account-id}:namespace:namespace-uuid`
サーバーレス - `arn:aws:redshift-serverless:{region}:{account-id}:namespace/namespace-uuid`

### Redshift ターゲットのサンプルポリシー
<a name="zero-etl.create-sample-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateIntegration",
      "Effect": "Allow",
      "Action": [
        "rds:CreateIntegration"
      ],
      "Resource": [
        "arn:aws:rds:us-east-1:123456789012:db:source-db",
        "arn:aws:rds:us-east-1:123456789012:integration:*"
      ]
    },
    {
      "Sid": "DescribeIntegrationDetails",
      "Effect": "Allow",
      "Action": [
        "rds:DescribeIntegrations"
      ],
      "Resource": [
      "arn:aws:rds:us-east-1:123456789012:integration:*"
  ]
    },
    {
      "Sid": "ChangeIntegrationDetails",
      "Effect": "Allow",
      "Action": [
        "rds:DeleteIntegration",
        "rds:ModifyIntegration"
      ],
      "Resource": [
        "arn:aws:rds:us-east-1:123456789012:integration:*"
      ]
    },
    {
      "Sid": "AllowRedShiftIntegration",
      "Effect": "Allow",
      "Action": [
        "redshift:CreateInboundIntegration"
      ],
      "Resource": [
        "arn:aws:redshift:us-east-1:123456789012:namespace:namespace-uuid"
      ]
    }
  ]
}
```

------

### 別のアカウントでターゲットデータウェアハウスを選択する
<a name="zero-etl.create-permissions-cross-account"></a>

別の AWS アカウント にあるターゲット Amazon Redshift データウェアハウスを指定する場合は、現在のアカウントのユーザーがターゲットアカウントのリソースにアクセスするのを許可するロールを作成する必要があります。詳細については、「[所有している別の AWS アカウント の IAM ユーザーにアクセス権を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)」を参照してください。

ロールには以下のアクセス許可が必要です。これにより、ユーザーは使用可能な Amazon Redshift のプロビジョニング済みクラスターとターゲットアカウントの Redshift Serverless 名前空間を表示できます。

#### 必要なアクセス許可ポリシー
<a name="zero-etl.cross-account-sample-policy"></a>

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "redshift:DescribeClusters",
            "redshift-serverless:ListNamespaces"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

------

ロールには、ターゲットアカウント ID を指定する次の信頼ポリシーが必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

ロールを作成する手順については、「[カスタム信頼ポリシーを使用したロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)」を参照してください。

## ゼロ ETL 統合の作成
<a name="zero-etl.create"></a>

AWS マネジメントコンソール、AWS CLI、または RDS API を使用してゼロ ETL 統合を作成できます。

**重要**  
ゼロ ETL 統合は、更新または再同期オペレーションをサポートしていません。作成後に統合で問題が発生した場合は、統合を削除して新しい統合を作成する必要があります。

デフォルトで、RDS for MySQL はバイナリログファイルをすぐに消去します。ゼロ ETL 統合では、ソースからターゲットへのデータレプリケーションをバイナリログに依存しているため、ソースデータベースインスタンスの保持期間は 1 時間以上である必要があります。統合を作成したら、直ちに Amazon RDS は選択したソースデータベースのバイナリログファイルの保持期間を確認します。現在の値が 0 時間の場合、Amazon RDS は自動的に 1 時間に変更します。それ以外の場合、値は変わりません。

### RDS コンソール
<a name="zero-etl.create-console"></a>

**ゼロ ETL 統合を作成するには**

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

1. 左側のナビゲーションペインから、**[ゼロ ETL 統合]** を選択します。

1. **[ゼロ ETL 統合の作成]** を選択します。

1. **[統合 ID]** に、統合の名前を入力します。名前には最大 63 文字の英数字を使用でき、ハイフンを含めることができます。
**重要**  
カタログ名の長さは 19 文字に制限されています。カタログ名として使用する場合は、統合識別子がこの要件を満たしていることを確認します。

1. [**次へ**] を選択します。

1. **[ソース]** で、データの送信元となる RDS データベースを選択します。
**注記**  
DBパラメータが正しく設定されていないと、RDS から通知されます。このメッセージを受け取った場合は、**[Fix it for me]** を選択するか、手動で設定することができます。手動で修正する手順については、「[ステップ 1: カスタム DB のパラメータグループを作成する](zero-etl.setting-up.md#zero-etl.parameters)」を参照してください。  
DB パラメータを変更するには再起動が必要です。統合を作成する前に、再起動が完了し、新しいパラメータ値のデータベースのへの適用が正常に完了している必要があります。

1. ソースデータベースが正常に設定されたら、**[次へ]** を選択します。

1. **[ターゲット]** で、以下を実行します。

   1. (オプション) Amazon Redshift  ターゲットとして別の AWS アカウント を使用するには、**[別のアカウントを指定]** を選択します。次に、データウェアハウスを表示するアクセス許可を持つ IAM ロールの ARN を入力します。IAM ロールの作成手順については、「[別のアカウントでターゲットデータウェアハウスを選択する](#zero-etl.create-permissions-cross-account)」を参照してください。

   1. **[Amazon Redshift データウェアハウス]** で、ソースデータベースからのレプリケートデータのターゲットを選択します。ターゲットとして、プロビジョニングされた Amazon Redshift *クラスター*または Redshift Serverless *名前空間*を選択できます。
**注記**  
指定したデータウェアハウスのリソースポリシーまたは大文字と小文字の区別の設定が正しく構成されていないと、RDS から通知されます。このメッセージを受け取った場合は、**[Fix it for me]** を選択するか、手動で設定することができます。手動で修正する手順については、「*Amazon Redshift 管理ガイド*」の「[データウェアハウスの大文字と小文字の区別を有効にする](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html#zero-etl-setting-up.case-sensitivity)」と「[データウェアハウスの認可を設定する](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html#zero-etl-using.redshift-iam)」を参照してください。  
*プロビジョニングされた* Redshift クラスターの大文字と小文字の区別を変更するには、再起動が必要です。インテグレーションを作成する前に、再起動を完了し、新しいパラメータ値をクラスターに正常に適用する必要があります。  
選択したソースとターゲットの AWS アカウント が異なる場合、Amazon RDS はこれらの設定を自動的に修正できません。他のアカウントに移動し、Amazon Redshift で手動で修正する必要があります。

1. ターゲットデータウェアハウスを正しく設定したら、**[次へ]** を選択します。

1. (オプション) **[タグ]** で、1 つ以上のタグを統合に追加します。詳細については、「[ Amazon RDS リソースのタグ付け](USER_Tagging.md)」を参照してください。

1. **[暗号化]** として、統合の暗号化方法を指定します。デフォルトでは、RDS はすべての統合を AWS 所有のキー で暗号化します。代わりにカスタマーマネージドキーを選択するには、**[暗号化設定のカスタマイズ]** を有効にして、暗号化に使用する KMS キーを選択します。詳細については、「[Amazon RDS リソースの暗号化](Overview.Encryption.md)」を参照してください。

   オプションで、暗号化コンテキストを追加します。詳しくは、*AWS Key Management Service デベロッパーガイド*の [Encryption context](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) を参照してください。
**注記**  
Amazon RDS は、追加する以下に加えて、次の暗号化コンテキストペアを追加します。  
`aws:redshift:integration:arn` - `IntegrationArn`
`aws:servicename:id` - `Redshift`
これにより、追加できるペアの総数が 8 から 6 に減り、許可の制約の全体的な文字数制限に影響します。詳細については、「AWS Key Management Service デベロッパーガイド**」の「[Using grant constraints](https://docs.aws.amazon.com/kms/latest/developerguide/create-grant-overview.html#grant-constraints)」を参照してください。

1. [**次へ**] を選択します。

1. 統合設定を確認し、**[ゼロ ETL 統合を作成]** を選択します。

   作成に失敗した場合は、トラブルシューティングの手順について「[ゼロ ETL 統合を作成できない](zero-etl.troubleshooting.md#zero-etl.troubleshooting.creation)」を参照してください。

統合のステータスは、作成中は `Creating` であり、ターゲットの Amazon Redshift データウェアハウスのステータスは `Modifying` です。この間、データウェアハウスをクエリしたり、設定を変更したりすることはできません。

統合が正常に作成されると、統合とターゲットの Amazon Redshift データウェアハウスの両方のステータスが `Active` に変わります。

### AWS CLI
<a name="zero-etl.create-cli"></a>

AWS CLI を使用してゼロ ETL 統合を作成するには、[create-integration](https://docs.aws.amazon.com/cli/latest/reference/rds/create-integration.html) コマンドに以下のオプションを指定して使用します。

**注記**  
カタログ名は 19 文字に制限されていることにご注意ください。カタログ名として使用する場合は、それに応じて統合名を選択します。
+ `--integration-name` — 統合の名前を指定します。
+ `--source-arn` — 統合のソースとなる RDS データベースの ARN を指定します。
+ `--target-arn` — 統合のターゲットとなる Amazon Redshift データウェアハウスの ARN を指定します。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds create-integration \
    --integration-name my-integration \
    --source-arn arn:aws:rds:{region}:{account-id}:my-db \
    --target-arn arn:aws:redshift:{region}:{account-id}:namespace:namespace-uuid
```
Windows の場合:  

```
aws rds create-integration ^
    --integration-name my-integration ^
    --source-arn arn:aws:rds:{region}:{account-id}:my-db ^
    --target-arn arn:aws:redshift:{region}:{account-id}:namespace:namespace-uuid
```

### RDS API
<a name="zero-etl.create-api"></a>

Amazon RDS API を使用してゼロ ETL 統合を作成するには、以下のパラメータを指定して [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateIntegration.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateIntegration.html) オペレーションを使用します。

**注記**  
カタログ名は 19 文字に制限されています。カタログ名として使用する場合は、IntegrationName パラメータがこの要件を満たしていることを確認します。
+ `IntegrationName` — 統合の名前を指定します。
+ `SourceArn` — 統合のソースとなる RDS データベースの ARN を指定します。
+ `TargetArn` — 統合のターゲットとなる Amazon Redshift データウェアハウスの ARN を指定します。

## カスタマーマネージドキーでの統合の暗号化
<a name="zero-etl.create-encrypt"></a>

統合の作成時に AWS 所有のキー ではなくカスタム KMS キーを指定する場合、キーポリシーは Amazon Redshift サービスプリンシパルに `CreateGrant` アクションへのアクセスを提供する必要があります。さらに、現在のユーザーに `DescribeKey` アクションと `CreateGrant` アクションの実行を許可する必要があります。

次のポリシー例は、キーポリシーに必要なアクセス許可を指定する方法を示しています。アクセス許可の範囲をさらに狭めるためのコンテキストキーが含まれています。

### キーポリシーの例
<a name="zero-etl.kms-sample-policy"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Key policy",
    "Statement": [
        {
            "Sid": "Enables IAM user permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allows the Redshift service principal to add a grant to a KMS key",
            "Effect": "Allow",
            "Principal": {
                "Service": "redshift.amazonaws.com"
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:{context-key}": "{context-value}"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": [
                        "Decrypt",
                        "GenerateDataKey",
                        "CreateGrant"
                    ]
                }
            }
        },
        {
            "Sid": "Allows the current user or role to add a grant to a KMS key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/{role-name}"
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:{context-key}": "{context-value}",
                    "kms:ViaService": "rds.us-east-1.amazonaws.com"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": [
                        "Decrypt",
                        "GenerateDataKey",
                        "CreateGrant"
                    ]
                }
            }
        },
        {
            "Sid": "Allows the current uer or role to retrieve information about a KMS key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/{role-name}"
            },
            "Action": "kms:DescribeKey",
            "Resource": "*"
        }
    ]
}
```

------

詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[キーポリシーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html)」を参照してください。

## 次のステップ
<a name="zero-etl.create-next"></a>

ゼロ ETL 統合を正常に作成した後、ターゲット Amazon Redshift クラスターまたはワークグループ内にデスティネーションデータベースを作成する必要があります。これで、ソースの RDS データベースにデータを追加し、Amazon Redshift でクエリを実行できるようになります。手順については、「[Amazon Redshift でのデスティネーションデータベースの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html)」を参照してください。

# Amazon SageMaker Lakehouse との Amazon RDS ゼロ ETL 統合の作成
<a name="zero-etl.creating-smlh"></a>

Amazon SageMaker Lakehouse と Amazon RDS ゼロ ETL 統合を作成するときは、ソース RDS データベースとターゲット AWS Glue マネージドカタログを指定します。暗号化設定をカスタマイズし、タグを追加することもできます。Amazon RDS はソースデータベースとそのターゲットの間の統合を作成します。統合がアクティブになると、ソースデータベースに挿入したデータはすべて、設定されたターゲットにレプリケートされます。

## 前提条件
<a name="zero-etl.create-prereqs-smlh"></a>

Amazon SageMaker Lakehouse とゼロ ETL 統合を作成する前に、ソースデータベースとターゲット AWS Glue マネージドカタログを作成する必要があります。また、データベースを承認済みの統合ソースとして追加することによって、カタログへのレプリケーションを許可する必要があります。

これらの各手順の実行方法については、「[Amazon RDS ゼロ ETL 統合の開始方法](zero-etl.setting-up.md)」を参照してください。

## 必要なアクセス許可
<a name="zero-etl.create-permissions-smlh"></a>

Amazon SageMaker Lakehouse とのゼロ ETL 統合を作成するには、特定の IAM アクセス許可が必要です。少なくとも、次のアクションを実行するためのアクセス権限が必要です。
+ ソースの RDS データベースのゼロ ETL 統合を作成します。
+ すべてのゼロ ETL 統合を表示および削除します。
+ ターゲット AWS Glue マネージドカタログへのインバウンド統合を作成します。
+ AWS Glue マネージドカタログで使用される Amazon S3 バケットにアクセスします。
+ カスタム暗号化が設定されている場合は、暗号化に AWS KMS キーを使用します。
+ Lake Formation にリソースを登録します。
+ AWS Glue マネージドカタログにリソースポリシーを配置して、インバウンド統合を承認します。

以下のサンプルポリシーは、Amazon SageMaker Lakehouse との統合の作成と管理に必要な[最小特権](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)を示しています。ユーザーまたはロールが `AdministratorAccess` マネージドポリシーなど、より広範なアクセス許可を持つ場合、これらの正確なアクセス許可を必要としない場合があります。

さらに、ターゲット AWS Glue マネージドカタログでリソースポリシーを設定して、インバウンド統合を承認する必要があります。次に、以下の AWS CLI コマンドを実行してリソースポリシーを適用します。

### ターゲットカタログのインバウンド統合を承認するサンプル AWS CLI コマンド
<a name="zero-etl.create-sample-policy-smlh"></a>

```
aws glue put-resource-policy \
      --policy-in-json  '{
    "Version": "2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Principal": {
            "Service": "glue.amazonaws.com"
        },
        "Action": [
            "glue:AuthorizeInboundIntegration"
        ],
        "Resource": ["arn:aws:glue:region:account_id:catalog/catalog_name"],
        "Condition": {
            "StringEquals": {
                "aws:SourceArn": "arn:aws:rds:region:account_id:db:source_name"
            }
        }
    },
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "account_id"
        },
        "Action": ["glue:CreateInboundIntegration"],
        "Resource": ["arn:aws:glue:region:account_id:catalog/catalog_name"]
    }
    ]
}' \
      --region region
```

**注記**  
Glue カタログの Amazon リソースネーム (ARN) 形式は次のようになります。  
Glue カタログ – `arn:aws:glue:{region}:{account-id}:catalog/catalog-name`

### 別のアカウントでターゲット AWS Glue マネージドカタログを選択する
<a name="zero-etl.create-permissions-cross-account-smlh"></a>

別の AWS アカウント にあるターゲット AWS Glue マネージドカタログを指定する場合は、現在のアカウントのユーザーがターゲットアカウントのリソースにアクセスするのを許可するロールを作成する必要があります。詳細については、「[所有している別の AWS アカウント の IAM ユーザーにアクセス権を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)」を参照してください。

ロールには次のアクセス許可が必要です。これにより、ユーザーはターゲットアカウントで使用可能な AWS Glue カタログを表示できます。

#### 必要なアクセス許可ポリシー
<a name="zero-etl.cross-account-sample-policy-smlh"></a>

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "glue:GetCatalog"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

------

ロールには、ターゲットアカウント ID を指定する次の信頼ポリシーが必要です。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "AWS": "arn:aws:iam::111122223333:root"
         },
         "Action":"sts:AssumeRole"
      }
   ]
}
```

------

ロールを作成する手順については、「[カスタム信頼ポリシーを使用したロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)」を参照してください。

## Amazon SageMaker Lakehouse とのゼロ ETL 統合の作成
<a name="zero-etl.create-smlh"></a>

AWS マネジメントコンソール、AWS CLI、または RDS API を使用して Amazon SageMaker Lakehouse とのゼロ ETL 統合を作成できます。

**重要**  
Amazon SageMaker Lakehouse とのゼロ ETL 統合は、更新または再同期オペレーションをサポートしていません。作成後に統合で問題が発生した場合は、統合を削除して新しい統合を作成する必要があります。

デフォルトで、RDS for MySQL はバイナリログファイルをすぐに消去します。ゼロ ETL 統合では、ソースからターゲットへのデータレプリケーションをバイナリログに依存しているため、ソースデータベースインスタンスの保持期間は 1 時間以上である必要があります。統合を作成したら、直ちに Amazon RDS は選択したソースデータベースのバイナリログファイルの保持期間を確認します。現在の値が 0 時間の場合、Amazon RDS は自動的に 1 時間に変更します。それ以外の場合、値は変わりません。

### RDS コンソール
<a name="zero-etl.create-console-smlh"></a>

**Amazon SageMaker Lakehouse とゼロ ETL 統合を作成するには**

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

1. 左側のナビゲーションペインから、**[ゼロ ETL 統合]** を選択します。

1. **[ゼロ ETL 統合の作成]** を選択します。

1. **[統合 ID]** に、統合の名前を入力します。名前には最大 63 文字の英数字を使用でき、ハイフンを含めることができます。

1. **[次へ]** を選択します。

1. **[ソース]** で、データの送信元となる RDS データベースを選択します。
**注記**  
DBパラメータが正しく設定されていないと、RDS から通知されます。このメッセージを受け取った場合は、**[Fix it for me]** を選択するか、手動で設定することができます。手動で修正する手順については、「[ステップ 1: カスタム DB のパラメータグループを作成する](zero-etl.setting-up.md#zero-etl.parameters)」を参照してください。  
DB パラメータを変更するには再起動が必要です。統合を作成する前に、再起動が完了し、新しいパラメータ値のデータベースのへの適用が正常に完了している必要があります。

1. ソースデータベースが正常に設定されたら、**[次へ]** を選択します。

1. **[ターゲット]** で、以下を実行します。

   1. (オプション) Amazon SageMaker Lakehouse ターゲットとして別の AWS アカウントを使用するには、**[別のアカウントを指定]** を選択します。次に、AWS Glue カタログを表示するアクセス許可を持つ IAM ロールの ARN を入力します。IAM ロールの作成手順については、「[別のアカウントでターゲット AWS Glue マネージドカタログを選択する](#zero-etl.create-permissions-cross-account-smlh)」を参照してください。

   1. **AWS Glue カタログ**で、ソースデータベースからのレプリケートデータのターゲットを選択します。既存の AWS Glue マネージドカタログをターゲットとして選択できます。

   1. ターゲット IAM ロールは、ターゲットカタログに対する記述アクセス許可を必要とし、次のアクセス許可が必要です。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": "glue:GetCatalog",
                  "Resource": [
                      "arn:aws:glue:us-east-1:111122223333:catalog/*",
                      "arn:aws:glue:us-east-1:111122223333:catalog"
                  ]
              }
          ]
      }
      ```

------

      ターゲット IAM ロールには、次の信頼関係が必要です。

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "glue.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. [ステップ 3b: Amazon SageMaker Lakehouse ゼロ ETL 統合用の AWS Glue カタログを作成する](zero-etl.setting-up.md#zero-etl-setting-up.sagemaker) で作成された Lake Formation 管理者ロールを使用して、ターゲット AWS Glue マネージドカタログの記述アクセス許可をターゲット IAM ロールに付与する必要があります。
**注記**  
指定された AWS Glue マネージドカタログのリソースポリシーまたは設定が正しく設定されていない場合、RDS から通知されます。このメッセージを受け取った場合は、**[修正をお願いする]** を選択するか、手動で設定することができます。  
選択したソースとターゲットの AWS アカウント が異なる場合、Amazon RDS はこれらの設定を自動的に修正できません。他のアカウントに移動し、SageMaker Unified Studio で手動で修正する必要があります。

1. ターゲット AWS Glue マネージドカタログが正しく設定されたら、**[次へ]** を選択します。

1. (オプション) **[タグ]** で、1 つ以上のタグを統合に追加します。詳細については、「[ Amazon RDS リソースのタグ付け](USER_Tagging.md)」を参照してください。

1. **[暗号化]** として、統合の暗号化方法を指定します。デフォルトでは、RDS はすべての統合を AWS 所有のキー で暗号化します。代わりにカスタマーマネージドキーを選択するには、**[暗号化設定のカスタマイズ]** を有効にして、暗号化に使用する KMS キーを選択します。詳細については、「[Amazon RDS リソースの暗号化](Overview.Encryption.md)」を参照してください。

   オプションで、暗号化コンテキストを追加します。詳しくは、*AWS Key Management Service デベロッパーガイド*の [Encryption context](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) を参照してください。
**注記**  
Amazon RDS は、追加する以下に加えて、次の暗号化コンテキストペアを追加します。  
`aws:glue:integration:arn` - `IntegrationArn`
`aws:servicename:id` - `glue`
これにより、追加できるペアの総数が 8 から 6 に減り、許可の制約の全体的な文字数制限に影響します。詳細については、「AWS Key Management Service デベロッパーガイド**」の「[Using grant constraints](https://docs.aws.amazon.com/kms/latest/developerguide/create-grant-overview.html#grant-constraints)」を参照してください。

1. [**次へ**] を選択します。

1. 統合設定を確認し、**[ゼロ ETL 統合を作成]** を選択します。

   作成に失敗した場合は、トラブルシューティングの手順について「[Amazon RDS ゼロ ETL 統合のトラブルシューティング](zero-etl.troubleshooting.md)」を参照してください。

統合のステータスは、作成中は `Creating` であり、ターゲット Amazon SageMaker Lakehouse のステータスは `Modifying` です。この間、カタログをクエリしたり、設定を変更したりすることはできません。

統合が正常に作成されると、統合とターゲット Amazon SageMaker Lakehouse の両方のステータスが `Active` に変わります。

### AWS CLI
<a name="zero-etl.create-cli-smlh"></a>

AWS CLI を使用してゼロ ETL 統合用のターゲット AWS Glue マネージドカタログを準備するには、まず [create-integration-resource-property](https://docs.aws.amazon.com/cli/latest/reference/rds/create-integration.html) コマンドを次のオプションとともに使用する必要があります。
+ `--resource-arn` – 統合のターゲットとなる AWS Glue マネージドカタログの ARN を指定します。
+ `--target-processing-properties` – ターゲット AWS Glue マネージドカタログにアクセスするための IAM ロールの ARN を指定します。

```
aws glue create-integration-resource-property --region us-east-1
 --resource-arn arn:aws:glue:region:account_id:catalog/catalog_name \
 --target-processing-properties '{"RoleArn" : "arn:aws:iam::account_id:role/TargetIamRole"}'
```

AWS CLI を使用して Amazon SageMaker Lakehouse とのゼロ ETL 統合を作成するには、[create-integration](https://docs.aws.amazon.com/cli/latest/reference/rds/create-integration.html) コマンドに以下のオプションを指定して使用します。
+ `--integration-name` — 統合の名前を指定します。
+ `--source-arn` — 統合のソースとなる RDS データベースの ARN を指定します。
+ `--target-arn` – 統合のターゲットとなる AWS Glue マネージドカタログの ARN を指定します。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds create-integration \
    --integration-name my-sagemaker-integration \
    --source-arn arn:aws:rds:{region}:{account-id}:cluster:my-db \
    --target-arn arn:aws:glue:{region}:{account-id}:catalog/catalog-name
```
Windows の場合:  

```
aws rds create-integration ^
    --integration-name my-sagemaker-integration ^
    --source-arn arn:aws:rds:{region}:{account-id}:cluster:my-db ^
    --target-arn arn:aws:glue:{region}:{account-id}:catalog/catalog-name
```

### RDS API
<a name="zero-etl.create-api-smlh"></a>

Amazon RDS API を使用して Amazon SageMaker とのゼロ ETL 統合を作成するには、以下のパラメータを指定して [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateIntegration.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateIntegration.html) オペレーションを使用します。

**注記**  
カタログ名は 19 文字に制限されています。カタログ名として使用する場合は、IntegrationName パラメータがこの要件を満たしていることを確認します。
+ `IntegrationName` — 統合の名前を指定します。
+ `SourceArn` — 統合のソースとなる RDS データベースの ARN を指定します。
+ `TargetArn` – 統合のターゲットとなる AWS Glue マネージドカタログの ARN を指定します。

## カスタマーマネージドキーでの統合の暗号化
<a name="zero-etl.create-encrypt-smlh"></a>

Amazon SageMaker との統合の作成時に AWS 所有のキー ではなくカスタム KMS キーを指定する場合、キーポリシーは SageMaker Unified Studio サービスプリンシパルに `CreateGrant` アクションへのアクセスを提供する必要があります。さらに、現在のユーザーに `DescribeKey` アクションと `CreateGrant` アクションの実行を許可する必要があります。

次のポリシー例は、キーポリシーに必要なアクセス許可を指定する方法を示しています。アクセス許可の範囲をさらに狭めるためのコンテキストキーが含まれています。

### キーポリシーの例
<a name="zero-etl.kms-sample-policy"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Key policy",
    "Statement": [
        {
            "Sid": "EnablesIAMUserPermissions",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "GlueServicePrincipalAddGrant",
            "Effect": "Allow",
            "Principal": {
                "Service": "glue.amazonaws.com"
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:{context-key}":"{context-value}"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": [
                        "Decrypt",
                        "GenerateDataKey",
                        "CreateGrant"
                    ]
                }
            }
        },
        {
            "Sid": "AllowsCurrentUserRoleAddGrantKMSKey",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::111122223333:role/{role-name}"
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:{context-key}":"{context-value}",
                    "kms:ViaService": "rds.us-east-1.amazonaws.com"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": [
                        "Decrypt",
                        "GenerateDataKey",
                        "CreateGrant"
                    ]
                }
            }
        },
        {
            "Sid": "AllowsCurrentUserRoleRetrieveKMSKeyInformation",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::111122223333:role/{role-name}"
            },
            "Action": "kms:DescribeKey",
            "Resource": "*"
        }
    ]
}
```

------

詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[キーポリシーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html)」を参照してください。

## 次のステップ
<a name="zero-etl.create-next-smlh"></a>

Amazon SageMaker とのゼロ ETL 統合を正常に作成したら、ソース RDS データベースへのデータの追加と、Amazon SageMaker Lakehouse でのクエリを開始できます。データは自動的にレプリケートされ、分析や機械学習のワークロードで利用できるようになります。

# Amazon RDS ゼロ ETL 統合でのデータフィルタリング
<a name="zero-etl.filtering"></a>

Amazon RDS ゼロ ETL 統合はデータフィルタリングをサポートしているため、ソース Amazon RDS データベースからターゲットデータウェアハウスにレプリケートされるデータを制御できます。データベース全体をレプリケートする代わりに、1 つ以上のフィルターを適用して、特定のテーブルを選択的に含めたり除外したりできます。これにより、関連するデータのみが転送されるようにすることで、ストレージとクエリのパフォーマンスを最適化できます。現在、フィルタリングはデータベースレベルとテーブルレベルに制限されています。列レベルと行レベルのフィルタリングはサポートされていません。

データフィルタリングは、次のような場合に便利です。
+ 2 つ以上の異なるソースデータベースの特定のテーブルを結合し、いずれのデータベースのデータ全体は必要ない場合。
+ データベース全体ではなく、テーブルのサブセットのみを使用して分析を行うことで、コストを節約する場合。
+ 電話番号、住所、クレジットカード情報などの機密情報を特定のテーブルから除外する場合。

ゼロ ETL 統合には、AWS マネジメントコンソール、AWS Command Line Interface (AWS CLI)、または RDS API を使用して、データフィルターを追加できます。

統合でプロビジョンしたクラスターをターゲットとして使用している場合、データフィルタリングを使用するには、クラスターが[パッチ 180](https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html#cluster-version-180) 以降である必要があります。

**Topics**
+ [データフィルターの形式](#zero-etl.filtering-format)
+ [フィルター論理](#zero-etl.filtering-evaluate)
+ [フィルターの優先順位](#zero-etl.filtering-precedence)
+ [RDS for MySQL の例](#zero-etl.filtering-examples-mysql)
+ [RDS for PostgreSQL の例](#zero-etl.filtering-examples-postgres)
+ [RDS for Oracle の例](#zero-etl.filtering-examples-oracle)
+ [統合へのデータフィルターの追加](#zero-etl.add-filter)
+ [統合からのデータフィルターの削除](#zero-etl.remove-filter)

## データフィルターの形式
<a name="zero-etl.filtering-format"></a>

1 つの統合に対して複数のフィルターを定義できます。各フィルターは、フィルター式のパターンのいずれかに一致する既存および今後利用するデータベーステーブルを含めるまたは除外します。Amazon RDS ゼロ ETL 統合では、データフィルタリングに [Maxwell フィルター構文](https://maxwells-daemon.io/filtering/)を使用します。

各フィルターには以下の要素が含まれます。


| Element | 説明 | 
| --- | --- | 
| フィルタータイプ |  `Include` フィルタータイプは、**フィルター式のパターンのいずれかに一致するすべてのテーブルを含めます。`Exclude` フィルタータイプは、**いずれかのパターンに一致するすべてのテーブルを除外します。  | 
| フィルター式 |  コンマ区切りのパターンのリスト。式では [Maxwell フィルター構文](https://maxwells-daemon.io/filtering/)を使用する必要があります。  | 
| パターン |  フィルターパターンの形式は `database.table` (RDS for MySQL の場合) または `database.schema.table` (RDS for PostgreSQL の場合)。リテラル名を指定するか、正規表現を定義できます。  RDS for MySQL の場合、正規表現はデータベース名とテーブル名の両方でサポートされています。RDS for PostgreSQL の場合、正規表現はスキーマ名とテーブル名でのみサポートされ、データベース名ではサポートされていません。  列レベルのフィルターや拒否リストを含めることはできません。 1 つの統合に含めることができるパターンの合計数は、最大 99 個です。コンソールでは、パターンを 1 つのフィルター式に含めることも、複数の式に分散することもできます。1 つのパターンの長さは 256 文字を超えることはできません。  | 

**重要**  
RDS for PostgreSQL ソースデータベースを選択する場合は、少なくとも 1 つのデータフィルターパターンを指定する必要があります。このパターンには、ターゲットデータウェアハウスへのレプリケーション用のデータベース (`database-name.*.*`) が少なくとも 1 つ含まれている必要があります。

次の図は、コンソールでの RDS for MySQL データフィルターの構造を示しています。

![\[ゼロ ETL 統合のデータフィルター\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/zero-etl-filter.png)


**重要**  
フィルターパターンには、個人を特定する情報、または機密情報を含めないでください。

### AWS CLI のデータフィルター
<a name="zero-etl.filtering-cli"></a>

AWS CLI を使用してデータフィルターを追加する場合、構文はコンソールと少し異なります。1 つのフィルタータイプで複数のパターンをグループ化できないように、各パターンにフィルタータイプ (`Include` または `Exclude`) を個別に割り当てる必要があります。

例えば、コンソールでは、以下のカンマで区切られたパターンを 1 つの `Include` ステートメントにまとめることができます。

**RDS for MySQL**

```
mydb.mytable, mydb./table_\d+/
```

**RDS for PostgreSQL**

```
mydb.myschema.mytable, mydb.myschema./table_\d+/
```

ただし AWS CLI を使用する際は、データフィルターを次のように記述する必要があります。

**RDS for MySQL**

```
'include: mydb.mytable, include: mydb./table_\d+/'
```

**RDS for PostgreSQL**

```
'include: mydb.myschema.mytable, include: mydb.myschema./table_\d+/'
```

## フィルター論理
<a name="zero-etl.filtering-evaluate"></a>

統合でデータフィルターを指定しない場合、Amazon RDS は `include:*.*` をデフォルトのフィルターと見なし、すべてのテーブルをターゲットデータウェアハウスに複製します。ただし、少なくとも 1 つのフィルターを追加すると、デフォルトのロジックは `exclude:*.*` に切り替わり、デフォルトですべてのテーブルが除外されます。これにより、レプリケーションに含めるデータベースとテーブルを明示的に定義できます。

例えば、次のフィルターを定義する場合、

```
'include: db.table1, include: db.table2'
```

Amazon RDS は、フィルターを次のように解釈します。

```
'exclude:*.*, include: db.table1, include: db.table2'
```

結果として、Amazon RDS は `db` という名前のデータベースから `table1` および `table2` のみをターゲットデータウェアハウスにレプリケートします。

## フィルターの優先順位
<a name="zero-etl.filtering-precedence"></a>

Amazon RDS は、指定された順番にデータフィルターを適用します。AWS マネジメントコンソール では、フィルタ式を左から右、上から下へと処理します。2 番目のフィルターまたは最初のフィルターに続く個々のパターンは、それを上書きできます。

例えば、最初のフィルターが `Include books.stephenking` の場合、`books` データベースの `stephenking` テーブルのみが含まれます。ただし、2 つ目のフィルター、`Exclude books.*` を追加すると、最初のフィルターが上書きされます。これにより、`books` インデックスのテーブルがターゲットデータウェアハウスにレプリケートされるのを防ぐことができます。

1 つまたは複数のフィルターを指定すると、ロジックはデフォルトで `exclude:*.*` を前提として開始されます。そのため、すべてのテーブルが自動的にレプリケーションから*除外*されます。ベストプラクティスとして、最も広範なフィルターから最も具体的なフィルターを定義します。1 つ以上の `Include` ステートメントから始めてレプリケートするデータを指定し、`Exclude` フィルターを追加して特定のテーブルを選択的に削除します。

AWS CLI を使用して定義するフィルターにも同じ原則が適用されます。Amazon RDS は、これらのフィルターパターンを指定された順番で適用するため、あるパターンによってその前に指定されたフィルターパターンが上書きされる場合があります。

## RDS for MySQL の例
<a name="zero-etl.filtering-examples-mysql"></a>

以下の例は、RDS for MySQL の例におけるゼロ ETL 統合でのデータフィルタリングの仕組みを示しています。
+  すべてのデータベースとすべてのテーブルを含める。

  ```
  'include: *.*'
  ```
+  `books` データベース内のすべてのテーブルを含める。

  ```
  'include: books.*'
  ```
+ `mystery` という名前のすべてのテーブルを除外します。

  ```
  'include: *.*, exclude: *.mystery'
  ```
+ `books` データベース内の 2 つの特定のテーブルを含める。

  ```
  'include: books.stephen_king, include: books.carolyn_keene'
  ```
+ サブストリング `mystery` を含んでいるものを除き、`books` データベース内のすべてのテーブルを含めます。

  ```
  'include: books.*, exclude: books./.*mystery.*/'
  ```
+ `mystery` で始まるものを除き、`books` データベース内のすべてのテーブルを含めます。

  ```
  'include: books.*, exclude: books./mystery.*/'
  ```
+ `mystery` で終わるものを除き、`books` データベース内のすべてのテーブルを含めます。

  ```
  'include: books.*, exclude: books./.*mystery/'
  ```
+ `table_stephen_king` という名前のテーブルを除き、`table_` で始まる `books` データベース内の すべてのテーブルを含めます。例えば、`table_movies` や `table_books` はレプリケートされますが、`table_stephen_king` はレプリケートされません。

  ```
  'include: books./table_.*/, exclude: books.table_stephen_king'
  ```

## RDS for PostgreSQL の例
<a name="zero-etl.filtering-examples-postgres"></a>

以下の例は、RDS for PostgreSQL ゼロ ETL 統合でのデータフィルタリングの仕組みを示しています。
+ `books` データベース内のすべてのテーブルを含めます。

  ```
  'include: books.*.*'
  ```
+ `books` データベース内の `mystery` という名前のテーブルをすべて除外します。

  ```
  'include: books.*.*, exclude: books.*.mystery'
  ```
+ `books` データベース内の `mystery` スキーマの 1 つのテーブルを含め、`employee` データベース内の `finance` スキーマの 1 つのテーブルを含めます。

  ```
  'include: books.mystery.stephen_king, include: employee.finance.benefits'
  ```
+ サブストリング `king` を含むテーブルを除き、`books` データベースおよび `science_fiction` スキーマ内のすべてのテーブルを含めます。

  ```
  'include: books.science_fiction.*, exclude: books.*./.*king.*/
  ```
+ `sci` で始まるスキーマ名を持つテーブルを除き、`books` データベース内のすべてのテーブルを含めます。

  ```
  'include: books.*.*, exclude: books./sci.*/.*'
  ```
+ `mystery` スキーマ内の `king` で終わるテーブルを除き、`books` データベース内のすべてのテーブルを含めます。

  ```
  'include: books.*.*, exclude: books.mystery./.*king/'
  ```
+ `table_stephen_king` という名前のテーブルを除き、`table_` で始まる `books` データベース内のすべてのテーブルを含めます。例えば、`fiction` スキーマの `table_movies` と `mystery` スキーマの `table_books` はレプリケートされますが、どちらのスキーマでも `table_stephen_king` はレプリケートされません。

  ```
  'include: books.*./table_.*/, exclude: books.*.table_stephen_king'
  ```

## RDS for Oracle の例
<a name="zero-etl.filtering-examples-oracle"></a>

以下の例は、RDS for Oracle ゼロ ETL 統合でのデータフィルタリングの仕組みを示しています。
+ books データベース内のすべてのテーブルを含めます。

  ```
  'include: books.*.*'
  ```
+ books データベース内の mystery という名前のテーブルをすべて除外します。

  ```
  'include: books.*.*, exclude: books.*.mystery'
  ```
+ books データベース内の mystery スキーマのテーブルを 1 つ含め、employee データベース内の finance スキーマのテーブルを 1 つ含めます。

  ```
  'include: books.mystery.stephen_king, include: employee.finance.benefits'
  ```
+ books データベース内の mystery スキーマのすべてのテーブルを含めます。

  ```
  'include: books.mystery.*'
  ```

### 大文字と小文字の区別に関する考慮事項
<a name="zero-etl.filtering-examples-oracle-case-sensitivity"></a>

Oracle Database と Amazon Redshift では、オブジェクト名の大文字と小文字の処理方法が異なり、これはデータフィルター設定とターゲットクエリの両方に影響します。次の点に注意してください。
+ Oracle Database は、`CREATE` ステートメントで明示的に引用符で囲まれていない限り、データベース、スキーマ、およびオブジェクト名を大文字で保存します。例えば、`mytable` (引用符なし) を作成する場合、Oracle データディクショナリはテーブル名を `MYTABLE` として保存します。オブジェクト名を引用すると、データディクショナリは大文字と小文字を保持します。
+ ゼロ ETL データフィルターでは大文字と小文字が区別され、Oracle データディクショナリに表示されるオブジェクト名の大文字と小文字が正確に一致する必要があります。
+ Amazon Redshift クエリは、明示的に引用符で囲まれていない限り、デフォルトで小文字のオブジェクト名になります。例えば、`MYTABLE` (引用符なし) のクエリは `mytable` を検索します。

Amazon Redshift フィルターを作成してデータをクエリするときは、大文字と小文字の違いに注意してください。

#### 大文字の統合の作成
<a name="zero-etl.filtering-examples-oracle-uppercase"></a>

二重引用符で名前を指定せずにテーブルを作成すると、Oracle データベースは名前をデータディクショナリに大文字で保存します。例えば、次のいずれかの SQL ステートメントを使用して `MYTABLE` を作成できます。

```
CREATE TABLE REINVENT.MYTABLE (id NUMBER PRIMARY KEY, description VARCHAR2(100));
CREATE TABLE reinvent.mytable (id NUMBER PRIMARY KEY, description VARCHAR2(100));
CREATE TABLE REinvent.MyTable (id NUMBER PRIMARY KEY, description VARCHAR2(100));
CREATE TABLE reINVENT.MYtabLE (id NUMBER PRIMARY KEY, description VARCHAR2(100));
```

上記のステートメントでテーブル名を引用しなかったため、Oracle データベースはオブジェクト名を大文字で `MYTABLE` として保存します。

このテーブルを Amazon Redshift にレプリケートするには、`create-integration` コマンドのデータフィルターで大文字の名前を指定する必要があります。ゼロ ETL フィルター名と Oracle データディクショナリ名は一致する必要があります。

```
aws rds create-integration \
  --integration-name upperIntegration \
  --data-filter "include: ORCL.REINVENT.MYTABLE" \
...
```

デフォルトでは、Amazon Redshift はデータを小文字で保存します。Amazon Redshift のレプリケートされたデータベースで `MYTABLE` をクエリするには、Oracle データディクショナリのケースと一致するように大文字名 `MYTABLE` を引用符で囲む必要があります。

```
SELECT * FROM targetdb1."REINVENT"."MYTABLE";
```

次のクエリでは、引用符メカニズムを使用しません。これらは、デフォルトの小文字名を使用する `mytable` という名前の Amazon Redshift テーブルを検索するためエラーを返しますが、Oracle データディクショナリではそのテーブルの名前は `MYTABLE` です。

```
SELECT * FROM targetdb1."REINVENT".MYTABLE;
SELECT * FROM targetdb1."REINVENT".MyTable;
SELECT * FROM targetdb1."REINVENT".mytable;
```

次のクエリでは、引用符メカニズムを使用して大文字と小文字が混在する名前を指定します。クエリはすべて、`MYTABLE` という名前ではない Amazon Redshift テーブルを検索するため、エラーを返します。

```
SELECT * FROM targetdb1."REINVENT"."MYtablE";
SELECT * FROM targetdb1."REINVENT"."MyTable";
SELECT * FROM targetdb1."REINVENT"."mytable";
```

#### 小文字の統合の作成
<a name="zero-etl.filtering-examples-oracle-lowercase"></a>

次の代替例では、二重引用符を使用して、Oracle データディクショナリにテーブル名を小文字で保存します。次のように `mytable` を作成します。

```
CREATE TABLE REINVENT."mytable" (id NUMBER PRIMARY KEY, description VARCHAR2(100));
```

Oracle データベースは、テーブル名 `mytable` を小文字として保存します。このテーブルを Amazon Redshift にレプリケートするには、ゼロ ETL データフィルターで小文字の名前 `mytable` を指定する必要があります。

```
aws rds create-integration \
  --integration-name lowerIntegration \
  --data-filter "include: ORCL.REINVENT.mytable" \
...
```

Amazon Redshift のレプリケートされたデータベースでこのテーブルをクエリするときは、小文字の名前 `mytable` を指定できます。クエリは、Oracle データディクショナリのテーブル名である `mytable` という名前のテーブルを検索するため、成功します。

```
SELECT * FROM targetdb1."REINVENT".mytable;
```

Amazon Redshift のデフォルトは小文字のオブジェクト名であるため、次のクエリも `mytable` の検索に成功します。

```
SELECT * FROM targetdb1."REINVENT".MYtablE;
SELECT * FROM targetdb1."REINVENT".MYTABLE;
SELECT * FROM targetdb1."REINVENT".MyTable;
```

次のクエリでは、オブジェクト名の引用符メカニズムを使用します。名前が `mytable` と異なる Amazon Redshift テーブルを検索するため、すべてエラーが返されます。

```
SELECT * FROM targetdb1."REINVENT"."MYTABLE";
SELECT * FROM targetdb1."REINVENT"."MyTable";
SELECT * FROM targetdb1."REINVENT"."MYtablE";
```

#### 大文字と小文字が混在する統合でテーブルを作成する
<a name="zero-etl.filtering-examples-oracle-mixed-case"></a>

次の例では、二重引用符を使用して、Oracle データディクショナリにテーブル名を小文字で保存します。次のように `MyTable` を作成します。

```
CREATE TABLE REINVENT."MyTable" (id NUMBER PRIMARY KEY, description VARCHAR2(100));
```

Oracle データベースでは、このテーブル名が大文字と小文字が混在した `MyTable` として保存されます。このテーブルを Amazon Redshift にレプリケートするには、データフィルターで大文字と小文字が混在した名前を指定する必要があります。

```
aws rds create-integration \
  --integration-name mixedIntegration \
  --data-filter "include: ORCL.REINVENT.MyTable" \
...
```

Amazon Redshift のレプリケートされたデータベースでこのテーブルをクエリする場合は、オブジェクト名を引用符で囲んで大文字と小文字が混在した名前 `MyTable` を指定する必要があります。

```
SELECT * FROM targetdb1."REINVENT"."MyTable";
```

Amazon Redshift のデフォルトは小文字のオブジェクト名であるため、次のクエリは小文字の名前 `mytable` を検索しているため、オブジェクトを見つけられません。

```
SELECT * FROM targetdb1."REINVENT".MYtablE;
SELECT * FROM targetdb1."REINVENT".MYTABLE;
SELECT * FROM targetdb1."REINVENT".mytable;
```

**注記**  
RDS for Oracle 統合では、データベース名、スキーマ、またはテーブル名のフィルター値に正規表現を使用することはできません。

## 統合へのデータフィルターの追加
<a name="zero-etl.add-filter"></a>

AWS マネジメントコンソール、AWS CLI、または Amazon RDS API を使用してデータフィルタリングを設定できます。

**重要**  
統合の作成後にフィルターを追加すると、Amazon RDS はフィルターがもともと存在していたものであるかのようにフィルターを扱います。新しいフィルタリング条件に一致しないターゲットデータウェアハウスのデータを削除し、影響を受けるすべてのテーブルを再同期します。

### RDS コンソール
<a name="add-filter-console"></a>

**ゼロ ETL 統合にデータフィルターを追加するには**

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

1. ナビゲーションペインから、**[ゼロ ETL 統合]** を選択します。データフィルターを追加する統合を選択して **[変更]** を選択します。

1. **[ソース]** で、1 つまたは複数の `Include` ステートメントと `Exclude` ステートメントを追加します。

   次の図は、MySQL 統合のデータフィルターの例を示しています。  
![\[RDS コンソールでのゼロ ETL 統合のデータフィルター\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/zero-etl-filter-data.png)

1. 変更が適切であることを確認したら、**[続行]** および **[変更を保存]** を選択します。

### AWS CLI
<a name="add-filter-cli"></a>

AWS CLI を使用してゼロ ETL 統合にデータフィルターを追加するには、[modify-integration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/modify-integration.html) コマンドを呼び出します。統合 ID に加えて、`Include` および `Exclude` の Maxwell フィルターのカンマ区切りリストで `--data-filter` パラメーターを指定します。

**Example**  
次の例は、`my-integration` にフィルターパターンを追加します。  
Linux、macOS、Unix の場合:  

```
aws rds modify-integration \
    --integration-identifier my-integration \
    --data-filter 'include: foodb.*, exclude: foodb.tbl, exclude: foodb./table_\d+/'
```
Windows の場合:  

```
aws rds modify-integration ^
    --integration-identifier my-integration ^
    --data-filter 'include: foodb.*, exclude: foodb.tbl, exclude: foodb./table_\d+/'
```

### RDS API
<a name="add-filter-api"></a>

RDS API を使用してゼロ ETL 統合を変更するには、[ModifyIntegration](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyIntegration.html) オペレーションを呼び出します。統合 ID を指定し、フィルターパターンのカンマ区切りリストを指定します。

## 統合からのデータフィルターの削除
<a name="zero-etl.remove-filter"></a>

統合からデータフィルターを削除すると、Amazon RDS は削除したフィルターが存在しなかったかのようにそれ以外のフィルターを適用し始めます。次に、基準を満たした以前に除外されたデータをターゲットデータウェアハウスにレプリケートします。これにより、影響を受けるすべてのテーブルの再同期がトリガーされます。

# ソース RDS データベースへのデータの追加とクエリ
<a name="zero-etl.querying"></a>

Amazon RDS から Amazon Redshift にデータをレプリケートするゼロ ETL 統合の作成を終了するには、ターゲット送信先にデータベースを作成する必要があります。

Amazon Redshift と接続するため、Amazon Redshift クラスターまたはワークグループに接続し、統合識別子を参照してデータベースを作成します。これで、ソースの RDS データベースにデータを追加でき、Amazon Redshift または Amazon SageMaker で複製されることが確認できます。

**Topics**
+ [ターゲットデータベースの作成](#zero-etl.create-db)
+ [ソースデータベースへのデータの追加](#zero-etl.add-data-rds)
+ [Amazon Redshift での Amazon RDS データのクエリ](#zero-etl.query-data-redshift)
+ [RDS データベースと Amazon Redshift データベース間のデータタイプの相違点](#zero-etl.data-type-mapping)
+ [RDS for PostgreSQL の DDL オペレーション](#zero-etl.ddl-postgres)

## ターゲットデータベースの作成
<a name="zero-etl.create-db"></a>

Amazon Redshift へのデータの複製を開始する前に、統合を作成後、データベースをターゲットのデータウェアハウスに作成する必要があります。このデータベースには、統合識別子への参照が含まれている必要があります。Amazon Redshift コンソールまたはクエリエディタ v2 を使用して、データベースを作成することができます。

デスティネーションデータベースを作成する手順については、「[Amazon Redshift にデスティネーションデータベースを作成する](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html#zero-etl-using.create-db)」を参照してください。

## ソースデータベースへのデータの追加
<a name="zero-etl.add-data-rds"></a>

統合を設定した後で、データウェアハウスにレプリケートするデータを、ソースの RDS データベースに入力できます。

**注記**  
Amazon RDS のデータ型とターゲット分析ウェアハウスには違いがあります。データ型マッピングの表については、「[RDS データベースと Amazon Redshift データベース間のデータタイプの相違点](#zero-etl.data-type-mapping)」を参照してください。

まず、任意の MySQL クライアントを使用して、ソースデータベースに接続します。手順については、「[MySQL DB インスタンスへの接続](USER_ConnectToInstance.md)」を参照してください。

次に、テーブルを作成し、1 行のサンプルデータを挿入します。

**重要**  
テーブルにプライマリキーがあることを確認してください。そうしないと、ターゲットのデータウェアハウスに複製できません。

**RDS for MySQL**

次の例では、[MySQL Workbench ユーティリティ](https://dev.mysql.com/downloads/workbench/)を使用しています。

```
CREATE DATABASE my_db;

USE my_db;

CREATE TABLE books_table (ID int NOT NULL, Title VARCHAR(50) NOT NULL, Author VARCHAR(50) NOT NULL,
Copyright INT NOT NULL, Genre VARCHAR(50) NOT NULL, PRIMARY KEY (ID));

INSERT INTO books_table VALUES (1, 'The Shining', 'Stephen King', 1977, 'Supernatural fiction');
```



**RDS for PostgreSQL**

次の例では、`[psql](https://www.postgresql.org/docs/current/app-psql.html)` PostgreSQL インタラクティブターミナルを使用しています。データベースに接続するときは、レプリケートするデータベース名を含めます。

```
psql -h mydatabase.123456789012.us-east-2.rds.amazonaws.com -p 5432 -U username -d named_db;

named_db=> CREATE TABLE books_table (ID int NOT NULL, Title VARCHAR(50) NOT NULL, Author VARCHAR(50) NOT NULL,
Copyright INT NOT NULL, Genre VARCHAR(50) NOT NULL, PRIMARY KEY (ID));

named_db=> INSERT INTO books_table VALUES (1, 'The Shining', 'Stephen King', 1977, 'Supernatural fiction');
```

**RDS for Oracle**:

次の例では、SQL\$1Plus を使用して RDS for Oracle データベースに接続します。

```
sqlplus 'user_name@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dns_name)(PORT=port))(CONNECT_DATA=(SID=database_name)))'

SQL> CREATE TABLE books_table (ID int NOT NULL, Title VARCHAR(50) NOT NULL, Author VARCHAR(50) NOT NULL,
Copyright INT NOT NULL, Genre VARCHAR(50) NOT NULL, PRIMARY KEY (ID));

SQL> INSERT INTO books_table VALUES (1, 'The Shining', 'Stephen King', 1977, 'Supernatural fiction');
```

## Amazon Redshift での Amazon RDS データのクエリ
<a name="zero-etl.query-data-redshift"></a>

RDS データベースにデータを追加すると、送信先データベースにレプリケートされ、クエリを実行できるようになります。

**複製されたデータをクエリするには**

1. Amazon Redshift コンソールに移動し、左側のナビゲーションペインから **[クエリエディタ v2]** を選択します。

1. クラスターまたはワークグループに接続し、ドロップダウンメニュー (この例では **destination\$1database**) から送信先データベース (統合から作成したもの) を選択します。デスティネーションデータベースを作成する手順については、「[Amazon Redshift にデスティネーションデータベースを作成する](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html#zero-etl-using.create-db)」を参照してください。

1. SELECT ステートメントを使用してデータをクエリします。この例では、次のコマンドを実行して、ソースの RDS データベースで作成したテーブルからすべてのデータを選択します。

   ```
   SELECT * from my_db."books_table";
   ```  
![\[クエリエディタ内で SELECT ステートメントを実行します。結果は、Amazon RDS データベースに追加されたサンプルデータの 1 行です。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/zero-etl-redshift-editor.png)
   + `my_db`  は RDS データベーススキーマ名です。
   + `books_table`  は RDS テーブル名です。

コマンドラインクライアントを使用してデータをクエリすることもできます。例えば、次のようになります。

```
destination_database=# select * from my_db."books_table";

 ID |       Title |        Author |   Copyright |                  Genre |  txn_seq |  txn_id
----+–------------+---------------+-------------+------------------------+----------+--------+
  1 | The Shining |  Stephen King |        1977 |   Supernatural fiction |        2 |   12192
```

**注記**  
大文字と小文字を区別するには、スキーマ、テーブル、および列の名前を二重引用符 (" ") で囲みます。詳細については、「[enable\$1case\$1sensitive\$1identifier](https://docs.aws.amazon.com/redshift/latest/dg/r_enable_case_sensitive_identifier.html)」を参照してください。

## RDS データベースと Amazon Redshift データベース間のデータタイプの相違点
<a name="zero-etl.data-type-mapping"></a>

以下の表は、RDS for MySQL、RDS for PostgreSQL、RDS for Oracle のデータタイプおよび対応する送信先のデータタイプのマッピングを示しています。*Amazon RDS は現在、ゼロ ETL 統合ではこれらのデータ型のみをサポートしています。*

ソースデータベースのテーブルにサポートされていないデータ型が含まれている場合、そのテーブルは同期されず、送信先ターゲットで使用できなくなります。ソースからターゲットへのストリーミングは継続されますが、サポートされていないデータ型のテーブルは使用できません。テーブルを修正してターゲット送信先で使用できるようにするには、変更内容を手動で元に戻し、`[ALTER DATABASE...INTEGRATION REFRESH](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)` を実行して統合を更新する必要があります。

**注記**  
Amazon SageMaker Lakehouse とのゼロ ETL 統合を更新することはできません。代わりに、統合を削除して再度作成してみてください。

**Topics**
+ [RDS for MySQL](#zero-etl.data-type-mapping-mysql)
+ [RDS for PostgreSQL](#zero-etl.data-type-mapping-postgres)
+ [RDS for Oracle](#zero-etl.data-type-mapping-oracle)

### RDS for MySQL
<a name="zero-etl.data-type-mapping-mysql"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

### RDS for PostgreSQL
<a name="zero-etl.data-type-mapping-postgres"></a>

RDS for PostgreSQL のゼロ ETL 統合は、カスタムデータタイプ、または拡張機能で作成したデータタイプをサポートしていません。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

### RDS for Oracle
<a name="zero-etl.data-type-mapping-oracle"></a>

**サポートされていないデータタイプ**

以下の RDS for Oracle データタイプは、Amazon Redshift ではサポートされていません。
+ `ANYDATA`
+ `BFILE`
+ `REF`
+ `ROWID`
+ `UROWID`
+ `VARRAY`
+ `SDO_GEOMETRY`
+ ユーザー定義のデータタイプ

**データタイプの相違点**

次の表は、RDS for Oracle がソースで Amazon Redshift がターゲットである場合に、ゼロ ETL 統合に影響するデータタイプの相違点を示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

## RDS for PostgreSQL の DDL オペレーション
<a name="zero-etl.ddl-postgres"></a>

Amazon Redshift は PostgreSQL から派生しているため、共通の PostgreSQL アーキテクチャに基づくいくつかの機能を RDS for PostgreSQL と共有しています。ゼロ ETL 統合は、これらの類似点を活用して、RDS for PostgreSQL から Amazon Redshift へのデータレプリケーションを合理化し、データベースを名前でマッピングして、共有のデータベース、スキーマ、テーブル構造を利用します。

RDS for PostgreSQL ゼロ ETL 統合を管理するときは、以下の点を考慮してください。
+ 分離はデータベースレベルで管理されます。
+ レプリケーションはデータベースレベルで行われます。
+ RDS for PostgreSQL データベースは Amazon Redshift データベースに名前でマッピングされるため、元の名前を変更すると、名前を変更した後の Redshift データベースにデータが流れます。

Amazon Redshift と RDS for PostgreSQL は類似していますが、重要な違いがあります。以下のセクションでは、一般的な DDL オペレーションに対する Amazon Redshift のシステムレスポンスについて概説します。

**Topics**
+ [データベースのオペレーション](#zero-etl.ddl-postgres-database)
+ [スキーマオペレーション](#zero-etl.ddl-postgres-schema)
+ [テーブルの操作](#zero-etl.ddl-postgres-table)

### データベースのオペレーション
<a name="zero-etl.ddl-postgres-database"></a>

次の表は、データベース DDL オペレーションのシステムレスポンスを示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

### スキーマオペレーション
<a name="zero-etl.ddl-postgres-schema"></a>

次の表は、スキーマ DDL オペレーションのシステムレスポンスを示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

### テーブルの操作
<a name="zero-etl.ddl-postgres-table"></a>

次の表は、テーブル DDL オペレーションのシステムレスポンスを示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

# Amazon RDS ゼロ ETL 統合の表示と監視
<a name="zero-etl.describingmonitoring"></a>

Amazon RDS ゼロ ETL 統合の詳細を表示して、その設定情報と現在のステータスを確認できます。Amazon Redshift の特定のシステムビューをクエリすることで、ゼロ ETL 統合をモニタリングすることもできます。さらに、Amazon Redshift は統合関連の特定のメトリクスを Amazon CloudWatch に公開します。これらは Amazon Redshift コンソールで確認できます。

**Topics**
+ [統合の表示](#zero-etl.describing)
+ [Amazon Redshift のシステムテーブルを使用して統合をモニタリングします。](#zero-etl.monitoring)
+ [Amazon Redshift の Amazon EventBridge で統合をモニタリング](#zero-etl.eventbridge)

## 統合の表示
<a name="zero-etl.describing"></a>

AWS マネジメントコンソール、AWS CLI、または RDS API を使用して、Amazon RDS ゼロ ETL 統合を表示できます。

### コンソール
<a name="zero-etl.describing-console"></a>

**ゼロ ETL 統合の詳細を表示するには**

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

1. 左側のナビゲーションペインから、**[ゼロ ETL 統合]** を選択します。

1. そのソースデータベースやターゲットのデータウェアハウスなどの詳細を表示するには、統合を選択します。  
![\[ゼロ ETL 統合に関する詳細\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/zero-etl-integration-view.png)

統合は、以下のようなステータスを持ちます。
+ `Creating` — 統合は作成中です。
+ `Active` — 統合はトランザクションデータをターゲットデータウェアハウスに送信中です。
+ `Syncing` — 統合で回復可能なエラーが発生したため、データを再シードしています。影響を受けるテーブルは、再同期が完了するまでクエリを実行できません。
+ `Needs attention` — 統合でイベントまたはエラーが発生したため、解決するには手動介入が必要です。問題を解決するには、統合詳細ページでエラーメッセージの指示に従ってください。
+ `Failed` — 統合で、修正できない回復不能なイベントまたはエラーが発生しました。統合を手動で削除して再作成する必要があります。
+ `Deleting` — 統合を削除中です。

### AWS CLI
<a name="zero-etl.describing-cli"></a>

AWS CLIを使用して現在のアカウントの Zero-ETL 統合をすべて表示するには、[describe-integrations](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-integrations.html) コマンドを使用して `--integration-identifier` オプションを指定します。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds describe-integrations \
    --integration-identifier ee605691-6c47-48e8-8622-83f99b1af374
```
Windows の場合:  

```
aws rds describe-integrations ^
    --integration-identifier ee605691-6c47-48e8-8622-83f99b1af374
```

### RDS API
<a name="zero-etl.describing-api"></a>

Amazon RDS API を使用してゼロ ETL 統合を表示するには、`IntegrationIdentifier` パラメータを指定して [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeIntegrations.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeIntegrations.html) オペレーションを使用します。

## Amazon Redshift のシステムテーブルを使用して統合をモニタリングします。
<a name="zero-etl.monitoring"></a>

Amazon Redshift には、システムの動作に関する情報を含むシステムテーブルとビューがあります。これらのシステムテーブルとビューには、その他のデータベーステーブルと同じ方法でクエリを実行できます。Amazon Redshift のシステムテーブルとビューの詳細については、「*Amazon Redshift データベースデベロッパーガイド*」の「[システムテーブルとビューのリファレンス](https://docs.aws.amazon.com//redshift/latest/dg/cm_chap_system-tables.html)」を参照してください。

以下のシステムビューとテーブルにクエリして、 ゼロ ETL 統合に関する情報を取得できます。
+  [SVV\$1INTEGRATION](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_INTEGRATION.html) — 統合の設定の詳細を提供します。
+ [SVV\$1INTEGRATION\$1TABLE\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_INTEGRATION_TABLE_STATE.html) — 統合内の各テーブルの状態を記述します。
+ [SYS\$1INTEGRATION\$1TABLE\$1STATE\$1CHANGE](https://docs.aws.amazon.com/redshift/latest/dg/r_SYS_INTEGRATION_TABLE_STATE_CHANGE.html) — 統合のテーブルステート変更ログを表示します。
+ [SYS\$1INTEGRATION\$1ACTIVITY](https://docs.aws.amazon.com/redshift/latest/dg/r_SYS_INTEGRATION_ACTIVITY.html) — 完了した統合実行に関する情報を提供します。

統合関連の CloudWatch メトリクスはすべて Amazon Redshift から生成されます。詳細については、「*Amazon Redshift 管理ガイド*」の「[ゼロ ETL 統合のメトリクス](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.monitoring.html)」を参照してください。現在、Amazon RDS は統合関連のメトリクスを CloudWatch に公開していません。

## Amazon Redshift の Amazon EventBridge で統合をモニタリング
<a name="zero-etl.eventbridge"></a>

Amazon Redshift は統合関連のイベントを Amazon EventBridge に送信します。イベントとそれに対応するイベント ID のリストについては、*Amazon Redshift 管理ガイド*の「[Amazon EventBridge によるゼロ ETL 統合イベント通知](https://docs.aws.amazon.com/redshift/latest/mgmt/integration-event-notifications)」を参照してください。

# Amazon RDS ゼロ ETL 統合の変更
<a name="zero-etl.modifying"></a>

サポートされるデータウェアハウスとのゼロ ETL 統合では、名前、説明、データフィルタリングオプションのみを変更できます。統合の暗号化に使用される AWS KMS キー、ソースデータベースまたはターゲットデータベースは変更できません。

既存の統合にデータフィルターを追加すると、Amazon RDS は、そのフィルターが本来存在していたものであるかのように再評価します。ターゲットのデータウェアハウスに現在あるデータのうち、新しいフィルタリング条件に一致しないものは削除されます。統合からデータフィルターを削除すると、以前はフィルター条件に一致していなかった (が現在は一致する) データがターゲットデータウェアハウスにレプリケートされます。**詳細については、「[Amazon RDS ゼロ ETL 統合でのデータフィルタリング](zero-etl.filtering.md)」を参照してください。

AWS マネジメントコンソール、AWS CLI、または Amazon RDS API を使用して、ゼロ ETL 統合を変更できます。

## RDS コンソール
<a name="modify-integration-console"></a>

**ゼロ ETL 統合を変更するには**

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

1. ナビゲーションペインで、**[ゼロ ETL 統合]** を選択して、変更する統合を選択します。

1. **[変更]** を選択して、変更可能な設定をすべて変更します。

1. すべての変更が完了したら、**[変更]** を選択します。

## AWS CLI
<a name="modify-integration-cli"></a>

AWS CLI を使用してゼロ ETL 統合を変更するには、[modify-integration](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-integration.html) コマンドを呼び出します。`--integration-identifier` に加えて、次のいずれかのオプションを指定します。
+ `--integration-name` — 統合の新しい名前を指定します。
+ `--description` — 統合の新しい説明を指定します。
+ `--data-filter` — 統合のデータフィルタリングオプションを指定します。詳細については、「[Amazon RDS ゼロ ETL 統合でのデータフィルタリング](zero-etl.filtering.md)」を参照してください。

**Example**  
次のリクエストは既存のインテグレーションを変更します。  
Linux、macOS、Unix の場合:  

```
aws rds modify-integration \
    --integration-identifier ee605691-6c47-48e8-8622-83f99b1af374 \
    --integration-name my-renamed-integration
```
Windows の場合:  

```
aws rds modify-integration ^
    --integration-identifier ee605691-6c47-48e8-8622-83f99b1af374 ^
    --integration-name my-renamed-integration
```

## RDS API
<a name="modify-integration-api"></a>

RDS API を使用してゼロ ETL 統合を変更するには、[ModifyIntegration](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyIntegration.html) オペレーションを呼び出します。統合識別子と変更するパラメータを指定します。

# AmazonRDS ゼロ ETL 統合の削除
<a name="zero-etl.deleting"></a>

ゼロ ETL 統合を削除すると、Amazon RDS はソースデータベースの からその ETL 統合を削除します。トランザクションデータが Amazon RDS または分析送信先から削除されることはありませんが、Amazon RDS は新しいデータを Amazon Redshift や Amazon SageMaker に送信しません。

統合は、ステータスが `Active`、`Failed`、`Syncing`、または `Needs attention` のときにのみ削除できます。

AWS マネジメントコンソール、AWS CLI、または RDS API を使用してゼロ ETL 統合を削除できます。

## コンソール
<a name="zero-etl.deleting-console"></a>

**ゼロ ETL 統合を削除するには**

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

1. 左側のナビゲーションペインから、**[ゼロ ETL 統合]** を選択します。

1. 削除するゼロ ETL 統合を選択します。

1. **[アクション]**、**[削除]** を選択し、削除を確定します。

## AWS CLI
<a name="zero-etl.deleting-cli"></a>

ゼロ ETL 統合を削除するには、[delete-integration](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-integration.html) コマンドを使用して `--integration-identifier` オプションを指定します。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds delete-integration \
    --integration-identifier ee605691-6c47-48e8-8622-83f99b1af374
```
Windows の場合:  

```
aws rds delete-integration ^
    --integration-identifier ee605691-6c47-48e8-8622-83f99b1af374
```

## RDS API
<a name="zero-etl.deleting-api"></a>

Amazon RDS API を使用してゼロ ETL 統合を削除するには、`IntegrationIdentifier` パラメータを指定して [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteIntegration.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteIntegration.html) オペレーションを使用します。

# Amazon RDS ゼロ ETL 統合のトラブルシューティング
<a name="zero-etl.troubleshooting"></a>

分析送信先の [SVV\$1INTEGRATION](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_INTEGRATION.html) システムテーブルにクエリを実行することで、ゼロ ETL 統合の状態を確認できます。`state` 列の値が `ErrorState` の場合、何か問題があることを意味します。詳細については、「[Amazon Redshift のシステムテーブルを使用して統合をモニタリングします。](zero-etl.describingmonitoring.md#zero-etl.monitoring)」を参照してください。

以下の情報を使用して、Amazon RDS ゼロ ETL 統合に関する一般的な問題をトラブルシューティングしてください。

**重要**  
再同期および更新オペレーションは、Amazon SageMaker AI Lakehouse とのゼロ ETL 統合では使用できません。統合に問題がある場合は、統合を削除して新しい統合を作成する必要があります。既存の統合を更新または再同期することはできません。

**Topics**
+ [ゼロ ETL 統合を作成できない](#zero-etl.troubleshooting.creation)
+ [統合が `Syncing` の状態でスタックしている](#zero-etl.troubleshooting.syncing)
+ [テーブルが Amazon Redshift にレプリケートされない](#zero-etl.troubleshooting.primarykey)
+ [1 つ以上の Amazon Redshift テーブルを再同期する必要がある](#zero-etl.troubleshooting.resync)
+ [Amazon SageMaker AI Lakehouse ゼロ ETL 統合の統合で失敗した問題](#zero-etl.troubleshooting.integration-issues)

## ゼロ ETL 統合を作成できない
<a name="zero-etl.troubleshooting.creation"></a>

ゼロ ETL 統合を作成できない場合は、ソースデータベースについて以下が正しいことを確認してください。
+ ソースデータベースは、サポートされている DB エンジンバージョンを実行している必要があります。サポートされているバージョンのリストについては、「[Amazon RDS ゼロ ETL 統合でサポートされているリージョンと DB エンジン](Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.md)」を参照してください。
+  DB パラメータを正しく設定しました。必須パラメータが正しく設定されていないか、データベースに関連付けられていない場合、作成は失敗します。「[ステップ 1: カスタム DB のパラメータグループを作成する](zero-etl.setting-up.md#zero-etl.parameters)」を参照してください。

さらに、ターゲットデータウェアハウスについて、以下が正しいことを確認してください。
+ 大文字と小文字の区別が有効になっている。「[データウェアハウスの大文字と小文字の区別を有効にする](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html#zero-etl-setting-up.case-sensitivity)」を参照してください。
+ 正しい承認済みプリンシパルと統合ソースを追加した。「[Amazon Redshift データウェアハウスの認可を設定する](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html#zero-etl-using.redshift-iam)」を参照してください。
+ データウェアハウスは暗号化されている (プロビジョニングされたクラスターの場合)。「[Amazon Redshift データベース暗号化](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html)」を参照してください。

## 統合が `Syncing` の状態でスタックしている
<a name="zero-etl.troubleshooting.syncing"></a>

必須 DB パラメータのいずれかの値を変更すると、統合のステータスが常に `Syncing` と表示されることがあります。

この問題を解決するには、ソースデータベースに関連付けられているパラメータグループのパラメータの値をチェックして、必要な値と一致していることを確認します。詳細については、「[ステップ 1: カスタム DB のパラメータグループを作成する](zero-etl.setting-up.md#zero-etl.parameters)」を参照してください。

パラメータを変更した場合は、必ずデータベースを再起動して変更を適用してください。

## テーブルが Amazon Redshift にレプリケートされない
<a name="zero-etl.troubleshooting.primarykey"></a>

Amazon Redshift に 1 つ以上のテーブルが反映されていない場合は、次のコマンドを実行してテーブルを再同期できます。

```
ALTER DATABASE dbname INTEGRATION REFRESH TABLES table1, table2;
```

詳細については、「Amazon Redshift SQL リファレンス」の「[ALTER DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)」を参照してください。

1 つ以上のソーステーブルにプライマリキーがないため、データがレプリケートされていない可能性があります。Amazon Redshift のモニタリングダッシュボードには、これらのテーブルのステータスが `Failed` と表示され、ゼロ ETL 統合全体のステータスが `Needs attention` に変わります。この問題を解決するには、プライマリキーとなる既存のキーをテーブル内で特定するか、合成プライマリキーを追加することができます。詳細な解決策については、「[Amazon Aurora MySQL または Amazon RDS for MySQL と Amazon Redshift とのゼロ ETL 統合を作成する際に、プライマリキーがないテーブルを処理する](https://aws.amazon.com/blogs/database/handle-tables-without-primary-keys-while-creating-amazon-aurora-mysql-or-amazon-rds-for-mysql-zero-etl-integrations-with-amazon-redshift/)」を参照してください。

## 1 つ以上の Amazon Redshift テーブルを再同期する必要がある
<a name="zero-etl.troubleshooting.resync"></a>

ソースデータベースに対して特定のコマンドを実行するには、テーブルの再同期が必要になる場合があります。このような場合、[SVV\$1INTEGRATION\$1TABLE\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_INTEGRATION_TABLE_STATE.html) システムビューには `table_state` が `ResyncRequired` と表示されます。つまり、統合は MySQL から Amazon Redshift に特定のテーブルを完全にリロードする必要があります。

テーブルが再同期を開始すると、`Syncing` の状態はになります。テーブルを再同期するために手動で操作を行う必要はありません。テーブルデータの再同期中は、Amazon Redshift からデータにアクセスすることはできません。

以下に、テーブルを `ResyncRequired` 状態にする操作の例と、検討すべき代替案をいくつか示します。


| Operation | 例 | 代替 | 
| --- | --- | --- | 
| 特定の位置への列の追加  |  <pre>ALTER TABLE table_name<br />  ADD COLUMN column_name INTEGER<br />  NOT NULL first;</pre>  | Amazon Redshift は、first または after キーワードを使用して特定の位置に列を追加することをサポートしていません。ターゲットテーブルの列の順序が重要でない場合は、より簡単なコマンドを使用してテーブルの最後に列を追加します。<pre>ALTER TABLE table_name<br />  ADD COLUMN column_name column_type;</pre> | 
| デフォルトの CURRENT\$1TIMESTAMP でのタイムスタンプ列の追加 |  <pre>ALTER TABLE table_name<br />  ADD COLUMN column_name TIMESTAMP<br />  NOT NULL DEFAULT CURRENT_TIMESTAMP;</pre>  | 既存のテーブル行の CURRENT\$1TIMESTAMP 値は RDS for MySQL によって計算されるため、テーブルデータを完全に再同期しない限り、Amazon Redshift でシミュレートすることはできません。可能であれば、テーブルが利用可能になるまでの待ち時間を避けるために、デフォルト値を `2023-01-01 00:00:15` などのリテラル定数に切り替えてください。 | 
| 1 つのコマンドで複数の列操作を実行する |  <pre>ALTER TABLE table_name<br />  ADD COLUMN column_1,<br />  RENAME COLUMN column_2 TO column_3;</pre>  | コマンドを ADD と RENAME の 2 つの操作に分割することを検討してください。この場合、再同期は不要です。 | 

## Amazon SageMaker AI Lakehouse ゼロ ETL 統合の統合で失敗した問題
<a name="zero-etl.troubleshooting.integration-issues"></a>

既存のゼロ ETL 統合と Amazon SageMaker AI Lakehouse で問題が発生した場合、唯一の解決策は統合を削除して新しい統合を作成することです。他の AWS サービスとは異なり、ゼロ ETL 統合は更新または再同期オペレーションをサポートしていません。

統合の問題を解決するには

1. コンソール、CLI、または API を使用して、問題のあるゼロ ETL 統合を削除します。

1. ソースデータベースとターゲットデータウェアハウスの設定が正しいことを確認します。

1. 同じ設定または更新された設定で新しいゼロ ETL 統合を作成します。

このプロセスにより、データパイプラインが完全に再初期化されます。再初期化の時間は、ソースデータベースのサイズによって異なる場合があります。