

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon RDS Aurora零 ETL 整合
<a name="zero-etl"></a>

Amazon RDS Aurora與 Amazon Redshift 的零 ETL 整合，並使用 RDSAurora 的資料 Amazon SageMaker AI 啟用近乎即時的分析和機器學習 (ML)。其是一種全受管解決方案，可讓交易資料在寫入 RDS 資料庫之後，於分析目的地中使用。*擷取、轉換*和*載入* (ETL) 是一種過程，可將來自多個來源的資料合併為大型、中央資料倉儲。

零 ETL 整合可讓 RDS 資料庫 中的資料近乎即時地在 Amazon Redshift 或 Amazon SageMaker AI 資料湖倉中提供。一旦資料位於目標資料倉儲或資料湖中，您可以使用內建功能來支援分析、ML 和 AI 工作負載，例如機器學習、具體化視觀表、資料共用、對多個資料存放區和資料湖的聯合存取，以及與 Amazon SageMaker AI、Quick 和其他 整合 AWS 服務。

若要建立零 ETL 整合時，請指定 RDS 資料庫做為*來源*，以及指定支援資料倉儲或資料湖倉做為*目標*。整合會將來源資料庫中的資料複寫到目標資料倉儲或資料湖倉。

下圖說明與 Amazon Redshift 進行零 ETL 整合的此功能：

![\[零 ETL 整合\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/zero-etl-integrations.png)


下圖說明與 Amazon SageMaker AI 資料湖倉進行零 ETL 整合的此功能：

![\[與 Lakehouse 的零 ETL Amazon SageMaker AI 整合\]](http://docs.aws.amazon.com/zh_tw/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 資料湖倉的 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 Aurora零 ETL 整合](zero-etl.modifying.md)
+ [刪除 Amazon RDS 零 ETL 整合](zero-etl.deleting.md)
+ [針對 Amazon RDS 零 ETL 整合進行疑難排解](zero-etl.troubleshooting.md)

## 優勢
<a name="zero-etl.benefits"></a>

RDS 零 ETL 整合具有下列優勢：
+ 協助您從多個資料來源衍生整體洞見。
+ 無需建置和維護執行擷取、轉換和載入 (ETL) 操作的複雜資料管道。Zero-ETL 整合會透過為您佈建和管理管道，免除建置和管理這些管道所帶來的挑戰。
+ 減少操作負擔和成本，讓您專注於改善應用程式。
+ 讓您利用目標目的地的分析和 ML 功能，從交易和其他資料衍生洞見，以有效地回應關鍵、時間敏感的事件。

## 重要概念
<a name="zero-etl.concepts"></a>

當您開始使用零 ETL 整合時，請考慮下列概念：

**整合**  
全受管資料管道，其會自動將交易資料和結構描述從 RDS 資料庫複寫到資料倉儲或目錄。

**來源資料庫**  
從中複寫資料的 RDS 資料庫。您可以指定單一可用區或多可用區資料庫執行個體，或多可用區資料庫叢集 （僅適用於 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)資料倉儲。佈建的叢集資料倉儲是稱為節點的運算資源集合，這些節點會組織成稱為*叢集*的群組。無伺服器資料倉儲由存放運算資源的工作群組，以及為資料庫物件和使用者提供空間的命名空間所組成。這兩個資料倉儲都會執行分析引擎，並包含一或多個資料庫。  
目標資料湖倉由目錄、資料庫、資料表和檢視組成。如需資料湖倉架構的詳細資訊，請參閱《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`) 可以觸發資料表重新同步，使得資料表無法在重新同步時進行查詢。如需詳細資訊，請參閱[我的一個或多個 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 整合的支援區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.md)。
+ 相同 AWS 區域中的主要執行個體和僅供讀取複本執行個體都不支援零 ETL 整合。
+ 零 ETL 整合依賴 MySQL 二進位記錄 (binlog)，來擷取持續的資料變更。不要使用 Binlog 型資料篩選，因為其可能會在來源資料庫與目標資料庫之間導致資料不一致。
+ 僅針對設定為使用 InnoDB 儲存體引擎的資料庫支援零 ETL 整合。
+ 不支援具有預先定義之資料表更新的外部索引鍵參考。具體而言，不支援 `ON DELETE` 和 `ON UPDATE` 規則搭配 `CASCADE`、`SET NULL` 和 `SET DEFAULT` 動作。嘗試建立或更新對另一個資料表具有這類參考的資料表，會將該資料表置於失敗狀態。
+ 您無法為使用磁性儲存的來源資料庫建立整合。

### RDS for PostgreSQL 限制
<a name="zero-etl.reqs-lims-rds-postgres"></a>
+ 來源資料庫必須是執行 15.7\$1、16.3\$1 或 17.1\$1 版的 RDS for PostgreSQL 執行個體。不支援舊版。
+ RDS for PostgreSQL 零 ETL 整合不支援多可用區域資料庫叢集做為來源資料庫。
+ 您無法從 RDS for PostgreSQL 僅供讀取複本執行個體建立零 ETL 整合。
+ PostgreSQL 未記錄的資料表和具體化視觀表不會複寫到 Amazon Redshift。
+ 由於 Amazon Redshift 的限制，不支援複寫特定 PostgreSQL 資料類型，例如[幾何資料類型](https://www.postgresql.org/docs/current/datatype-geometric.html)和大於 64KB 的資料。如需 RDS for PostgreSQL 和 Amazon Redshift 之間資料類型差異的詳細資訊，請參閱**資料類型差異**一節中的 [RDS for PostgreSQL](zero-etl.querying.md#zero-etl.data-type-mapping-postgres)。
+ 當來源 RDS for PostgreSQL 執行個體具有作用中零 ETL 整合時，您無法對其執行[主要版本升級](USER_UpgradeDBInstance.PostgreSQL.md)。若要升級來源執行個體，您必須先刪除所有現有的零 ETL 整合。主要版本升級完成後，您可以重新建立零 ETL 整合。
+ 如果您在來源資料庫執行個體上執行[宣告式分割](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 整合時，您無法重新命名租用戶資料庫。
+ 租用戶資料庫只能有一個零 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 管理指南》**中的[將零 ETL 整合與 Amazon Redshift 搭配使用的考量](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>

以下是湖房零 ETL Amazon SageMaker AI 整合的限制。
+ 目錄名稱的長度限制為 19 個字元。

## 配額
<a name="zero-etl.quotas"></a>

您的帳戶具有與 RDS 零 ETL 整合相關的下列配額。除非另有說明，否則每個配額都是根據區域而定。


| 名稱 | 預設 | Description | 
| --- | --- | --- | 
| 整合 | 100 |  AWS 帳戶內的整合總數。 | 
| 每個目標的整合 | 50 | 將資料傳送至單一目標資料倉儲或資料湖倉的整合數目。 | 
| 每個來源執行個體的整合 | 5 | 從單一來源資料庫執行個體傳送資料的整合數目。 | 

此外，目標倉儲會對每個資料庫執行個體或叢集節點中允許的資料表數目設定某些限制。如需 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 Aurora零 ETL 整合可在 的子集中使用 AWS 區域。如需支援的區域的清單，請參閱 [Amazon RDS 零 ETL 整合的支援區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.md)。

# 開始使用 Amazon RDS 零 ETL 整合
<a name="zero-etl.setting-up"></a>

在建立零 ETL 整合之前，請先使用必要的參數和許可設定 RDS 資料庫和資料倉儲。安裝期間，您將完成以下步驟：

1. [建立自訂資料庫參數群組。](#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 資料湖倉的 Amazon RDS 零 ETL 整合](zero-etl.creating-smlh.md)。

**提示**  
您可以在建立整合時讓 RDS 為您完成這些設定步驟，而不用手動執行這些步驟。若要立即開始建立整合，請參閱 [建立與 Amazon Redshift 的 Amazon RDS 零 ETL 整合](zero-etl.creating.md)。

對於步驟 3，您可以選擇根據您的需求建立目標資料倉儲 (步驟 3a) 或目標湖房 (步驟 3b)：
+ 如果您需要使用 SQL 型分析的傳統資料倉儲功能，請選擇資料倉儲。
+ 如果您需要機器學習功能，並想要將湖房功能用於資料科學和 ML 工作流程，請選擇 Amazon SageMaker Lakehouse。

## 步驟 1：建立自訂資料庫參數群組。
<a name="zero-etl.parameters"></a>

Amazon RDS 零 ETL 整合需要控制資料複寫之資料庫參數的特定值。特定參數取決於您的來源資料庫引擎。若要設定這些參數，您必須先建立自訂資料庫參數群組，然後將其與來源資料庫建立關聯。根據您的來源資料庫引擎設定下列參數值。如需建立參數群組的指示，請參閱 [Amazon RDS 資料庫執行個體的資料庫參數群組](USER_WorkingWithDBInstanceParamGroups.md)。建議您在相同的要求中設定所有參數值，以避免相依性問題。

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

此外，請確定`binlog_row_value_options` 參數*未*設定為 `PARTIAL_JSON`。如果來源資料庫是多可用區域資料庫叢集，請確定 `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 整合，每個整合將使用一個邏輯複寫槽。根據您的用量檢閱 `max_replication_slots` 和 `max_wal_senders` 參數。

為了在零 ETL 整合中有效率地同步資料，請在來源資料庫執行個體中設定 `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 所使用的單欄式引擎進行高輸送量操作期間導致效能下降。

**重要**  
將複本身分設定為記錄完整資料列[會增加您的 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>

在建立自訂資料庫參數群組之後，請選擇或建立 RDS 資料庫執行個體 。此資料庫將是複寫至目標資料倉儲之資料的來源。如需建立單一可用區或多可用區域資料庫執行個體的指示，請參閱 [建立 Amazon RDS 資料庫執行個體](USER_CreateDBInstance.md)。如需建立多可用區域資料庫叢集的指示 （僅限 MySQL 的 RDS)，請參閱 [為 Amazon RDS 建立多可用區域資料庫叢集](create-multi-az-db-cluster.md)。

資料庫必須執行支援的資料庫引擎版本。如需支援的版本的清單，請參閱[Amazon RDS 零 ETL 整合的支援區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.md)。

當您建立資料庫時，在**其他組態**下，將預設**資料庫參數群組**變更為您在上一個步驟中建立的自訂參數群組。

**注意**  
如果您在已建立資料庫*之後*將參數群組與資料庫建立關聯，則必須將資料庫重新開機以套用變更，然後才能建立零 ETL 整合。如需相關指示，請參閱 [在資料庫執行個體](USER_RebootInstance.md) 或 [重新啟動 Amazon RDS 的多可用區域資料庫叢集和讀取器資料庫執行個體](multi-az-db-clusters-concepts-rebooting.md)。

此外，請確定已在資料庫上啟用自動備份。如需詳細資訊，請參閱[啟用自動備份](USER_WorkingWithAutomatedBackups.Enabling.md)。

## 步驟 3a：建立目標資料倉儲
<a name="zero-etl-setting-up.data-warehouse"></a>

在建立來源資料庫之後，您必須建立並設定目標資料倉儲。資料倉儲必須符合下列需求：
+ 使用具有至少兩個節點的 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) (適用於佈建的叢集)，或[使用命名空間建立工作群組](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-console-workgroups-create-workgroup-wizard.html) (適用於 Redshift Serverless)。

### 在資料倉儲上啟用區分大小寫
<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)。
**注意**  
在將自訂參數群組與叢集建立關聯之後，請記得重新啟動該叢集。
+ **無伺服器工作群組** - 若要在 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 SDKs 設定整合
<a name="zero-etl.setup-sdk"></a>

您可以執行下列 Python 指令碼來為您自動設定所需的資源，而不用手動設定每個資源。程式碼範例使用 [適用於 Python (Boto3) 的 AWS SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) 建立來源 RDS for MySQL 資料庫執行個體和目標資料倉儲，每個都具有必要的參數值。然後，在資料庫之間建立零 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 Glue 受管目錄 AWS Lake Formation。目標目錄必須是 Amazon Redshift 受管目錄。若要建立 Amazon Redshift 受管目錄，請先建立 `AWSServiceRoleForRedshift` 服務連結角色。在 Lake Formation 主控台中，將 `AWSServiceRoleForRedshift` 新增為唯讀管理員。

如需有關先前任務的詳細資訊，請參閱下列主題。
+ 如需有關建立 Amazon Redshift 受管目錄的詳細資訊，請參閱《AWS Lake Formation 開發人員指南》**中的[在 AWS Glue Data Catalog中建立 Amazon Redshift 受管目錄](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 角色和 IAM 許可參考](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>

MySQL 目錄操作需要 Glue 資料傳輸角色，且必須具有下列許可。

------
#### [ 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 Resource Name (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>

如果您打算指定位於另一個 中的目標 Amazon Redshift 資料倉儲 AWS 帳戶，您必須建立角色，允許目前帳戶中的使用者存取目標帳戶中的資源。如需詳細資訊，請參閱[AWS 帳戶 為您擁有的另一個 IAM 使用者提供存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)。

角色必須具有下列許可，允許使用者檢視目標帳戶中可用的 Amazon Redshift 佈建叢集和 Redshift 無伺服器命名空間。

#### 必要許可和信任政策
<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 整合依賴二進位日誌將資料從來源複寫到目標，因此來源資料庫的保留期必須至少為一小時。您一旦建立了整合，Amazon RDS 即會針對選取的來源資料庫檢查二進位日誌檔保留期。如果目前的值為 0 小時，Amazon RDS 會自動將其變更為 1 小時。否則，此值保持不變。

### RDS 主控台
<a name="zero-etl.create-console"></a>

**建立零 ETL 整合**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在左側導覽窗格中，選擇**零 ETL 整合**。

1. 選擇**建立零 ETL 整合**。

1. 對於**整合識別符**，輸入整合的名稱。此名稱最多可有 63 個英數字元，且可包含連字號。
**重要**  
目錄名稱的長度限制為 19 個字元。如果整合識別符將用作目錄名稱，請確保其符合此要求。

1. 選擇**下一步**。

1. 對於**來源**，請選取資料源自其中的 RDS 資料庫。
**注意**  
如果未正確設定資料庫參數，RDS 即會通知您。如果您收到此訊息，您可以選擇**為我修正**或手動設定它們。如需手動修正它們的指示，請參閱 [步驟 1：建立自訂資料庫參數群組。](zero-etl.setting-up.md#zero-etl.parameters)。  
修改資料庫參數需要重新開機。在可以建立整合之前，必須先完成重新開機，且新參數值必須成功套用至資料庫。

1. 順利設定來源資料庫後，即可選擇**下一步**。

1. 針對**目標**，執行下列動作：

   1. （選用） 若要 AWS 帳戶 對 Amazon Redshift 目標使用不同的 ，請選擇**指定不同的帳戶**。然後，輸入 IAM 角色的 ARN，該角色擁有顯示您資料倉儲的許可。如需建立 IAM 角色的指示，請參閱 [在不同帳戶中選擇目標資料倉儲](#zero-etl.create-permissions-cross-account)。

   1. 對於 **Amazon Redshift 資料倉儲**，請從來源資料庫中選取所複寫資料的目標。您可以選擇佈建的 Amazon Redshift *叢集*或 Redshift 無伺服器*命名空間*做為目標。
**注意**  
如果未正確設定所指定資料倉儲的資源政策或區分大小寫設定，RDS 即會通知您。如果您收到此訊息，您可以選擇**為我修正**或手動設定它們。如需手動修正它們的指示，請參閱《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. (選用) 對於**標籤**，將一或多個標籤新增至整合。如需詳細資訊，請參閱[標記 Amazon RDS 資源](USER_Tagging.md)。

1. 對於**加密**，指定您想要加密整合的方式。根據預設，RDS 會加密與 的所有整合 AWS 擁有的金鑰。若要改為選擇客戶受管金鑰，請啟用**自訂加密設定**，然後選擇要用於加密的 KMS 金鑰。如需詳細資訊，請參閱[加密 Amazon RDS 資源](Overview.Encryption.md)。

   可選擇性地新增加密內容。如需詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[加密內容](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 開發人員指南》**中的[使用授予限制條件](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>

若要使用 建立零 ETL 整合 AWS CLI，請使用 [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 資料湖倉的 Amazon RDS 零 ETL 整合
<a name="zero-etl.creating-smlh"></a>

當您建立與 Lakehouse Amazon SageMaker 的 Amazon RDS Aurora零 ETL 整合時，您可以指定來源 RDS 資料庫和目標 AWS Glue 受管目錄。您也可以自訂加密設定和新增標籤。Amazon RDS 會在來源資料庫與其目標之間建立整合。一旦整合作用中，您插入至來源資料庫的任何資料就會複寫至設定的目標。

## 先決條件
<a name="zero-etl.create-prereqs-smlh"></a>

建立與 Lakehouse Amazon SageMaker 的零 ETL 整合之前，您必須建立來源資料庫和目標 AWS Glue 受管目錄。您也必須將資料庫新增為授權整合來源，以允許複寫至目錄。

如需完成上述每個步驟的指示，請參閱 [開始使用 Amazon RDS 零 ETL 整合](zero-etl.setting-up.md)。

## 所需的許可
<a name="zero-etl.create-permissions-smlh"></a>

建立與 Amazon SageMaker 資料湖倉的零 ETL 整合需要特定 IAM 許可。您至少需要執行下列動作的許可：
+ 為來源 RDS 資料庫建立零 ETL 整合。
+ 檢視並刪除所有零 ETL 整合。
+ 在目標 AWS Glue 受管目錄中建立傳入整合。
+ 存取 AWS Glue 受管目錄使用的 Amazon S3 儲存貯體。
+ 如果已設定自訂加密，請使用 AWS KMS 金鑰進行加密。
+ 向 Lake Formation 註冊資源。
+ 在 AWS Glue 受管目錄上放置資源政策，以授權傳入整合。

下列範例政策示範建立和管理與 Amazon SageMaker 資料湖倉的整合所需的[最低權限許可](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 Resource Name (ARN) 具有下列格式：  
Glue 目錄 – `arn:aws:glue:{region}:{account-id}:catalog/catalog-name`

### 在不同的帳戶中選擇目標 AWS Glue 受管目錄
<a name="zero-etl.create-permissions-cross-account-smlh"></a>

如果您打算指定位於另一個 的目標 AWS Glue 受管目錄 AWS 帳戶，則必須建立角色，允許目前帳戶中的使用者存取目標帳戶中的資源。如需詳細資訊，請參閱[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 資料湖倉的零 ETL 整合
<a name="zero-etl.create-smlh"></a>

您可以使用 AWS CLI、 Amazon SageMaker 或 RDS API AWS 管理主控台建立與湖房的零 ETL 整合。

**重要**  
與 Amazon SageMaker 資料湖倉的零 ETL 整合不支援重新整理或重新同步操作。如果您在建立整合之後遇到問題，則必須刪除整合並建立新的整合。

依預設，RDS for MySQL 會立即清除二進位日誌檔。由於零 ETL 整合依賴二進位日誌將資料從來源複寫到目標，因此來源資料庫的保留期必須至少為一小時。您一旦建立了整合，Amazon RDS 即會針對選取的來源資料庫檢查二進位日誌檔保留期。如果目前的值為 0 小時，Amazon RDS 會自動將其變更為 1 小時。否則，此值保持不變。

### RDS 主控台
<a name="zero-etl.create-console-smlh"></a>

**建立與 Amazon SageMaker 資料湖倉的零 ETL 整合**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在左側導覽窗格中，選擇**零 ETL 整合**。

1. 選擇**建立零 ETL 整合**。

1. 對於**整合識別符**，輸入整合的名稱。此名稱最多可有 63 個英數字元，且可包含連字號。

1. 選擇**下一步**。

1. 對於**來源**，請選取資料源自其中的 RDS 資料庫。
**注意**  
如果未正確設定資料庫參數，RDS 即會通知您。如果您收到此訊息，您可以選擇**為我修正**或手動設定它們。如需手動修正它們的指示，請參閱 [步驟 1：建立自訂資料庫參數群組。](zero-etl.setting-up.md#zero-etl.parameters)。  
修改資料庫參數需要重新開機。在可以建立整合之前，必須先完成重新開機，且新參數值必須成功套用至資料庫。

1. 順利設定來源資料庫後，即可選擇**下一步**。

1. 針對**目標**，執行下列動作：

   1. （選用） 若要 AWS 帳戶 對湖房目標使用不同的 Amazon SageMaker ，請選擇**指定不同的帳戶**。然後，輸入具有顯示 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. 您必須使用在 中建立的 Lake Formation 管理員角色，授予目標 IAM 角色描述目標 AWS Glue 受管目錄的許可[步驟 3b：建立 Amazon SageMaker Lakehouse 零 ETL 整合的 AWS Glue 目錄](zero-etl.setting-up.md#zero-etl-setting-up.sagemaker)。
**注意**  
如果指定的 AWS Glue 受管目錄的資源政策或組態設定未正確設定，RDS 會通知您。如果您收到此訊息，您可以選擇**為我修正**或手動設定它們。  
如果您選取的來源和目標位於不同的 AWS 帳戶中，則 Amazon RDS 無法為您修正這些設定。您必須導覽至其他帳戶，然後在 SageMaker Unified Studio 中手動修正這些設定。

1. 正確設定目標 AWS Glue 受管目錄後，請選擇**下一步**。

1. (選用) 對於**標籤**，將一或多個標籤新增至整合。如需詳細資訊，請參閱[標記 Amazon RDS 資源](USER_Tagging.md)。

1. 對於**加密**，指定您想要加密整合的方式。根據預設，RDS 會加密與 的所有整合 AWS 擁有的金鑰。若要改為選擇客戶受管金鑰，請啟用**自訂加密設定**，然後選擇要用於加密的 KMS 金鑰。如需詳細資訊，請參閱[加密 Amazon RDS 資源](Overview.Encryption.md)。

   可選擇性地新增加密內容。如需詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[加密內容](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 開發人員指南》**中的[使用授予限制條件](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 資料湖倉的狀態為 `Modifying`。在此期間，您無法查詢目錄或對其進行任何組態變更。

成功建立整合時，整合和目標 Amazon SageMaker 資料湖倉的狀態都會變更為 `Active`。

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

若要使用 為零 ETL 整合準備目標 AWS Glue 受管目錄 AWS CLI，您必須先使用 [create-integration-resource-property](https://docs.aws.amazon.com/cli/latest/reference/rds/create-integration.html) 命令搭配下列選項：
+ `--resource-arn` – 指定將成為整合目標之 AWS Glue 受管目錄的 ARN。
+ `--target-processing-properties` – 指定 IAM 角色的 ARN 以存取目標 AWS Glue 受管目錄 

```
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"}'
```

若要使用 建立與 Lakehouse Amazon SageMaker 的零 ETL 整合 AWS CLI，請使用 [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>

如果您在建立與 的整合 AWS 擁有的金鑰 時指定自訂 KMS 金鑰，而不是 Amazon SageMaker，則金鑰政策必須提供 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 資料湖倉中查詢資料。資料會自動複寫，並可用於分析和機器學習工作負載。

# Amazon RDS 零 ETL 整合的資料篩選
<a name="zero-etl.filtering"></a>

Amazon RDS 零 ETL 整合支援資料篩選，可讓您控制要將哪些資料從來源 Amazon RDS 資料庫複寫到目標資料倉儲。您可以套用一或多個篩選條件來選擇性地包含或排除特定資料表，而不是複寫整個資料庫。這可協助您透過確保僅傳輸相關資料來最佳化儲存和查詢效能。目前，篩選僅限於資料庫和資料表層級。不支援資料欄層級和資料列層級篩選。

當您想要執行下列操作時，資料篩選很有用：
+ 從兩個或多個不同的來源資料庫聯結特定資料表，且您不需要任何一個資料庫的完整資料。
+ 僅使用資料表子集而非整個資料庫機群執行分析，以節省成本。
+ 從特定資料表篩選掉敏感資訊，例如電話號碼、地址或信用卡詳細資訊。

您可以使用 AWS 管理主控台、 AWS Command Line Interface (AWS CLI) 或 Amazon RDS API，將資料篩選條件新增至零 ETL 整合。

如果整合具有佈建叢集做為其目標，則叢集必須在[修補程式 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>

您可以為單一整合定義多個篩選條件。每個篩選條件都會包含或排除符合篩選條件運算式中其中一個模式的任何現有和未來資料庫資料表。Amazon RDS 零 ETL 整合使用 [Maxwell 篩選條件語法](https://maxwells-daemon.io/filtering/)進行資料篩選。

每個篩選條件都有下列元素：


| Element | Description | 
| --- | --- | 
| 篩選條件類型 |  `Include` 篩選條件類型*包含*符合篩選條件運算式中其中一個模式的所有資料表。`Exclude` 篩選條件類型*排除*符合其中一個模式的所有資料表。  | 
| 篩選條件表達式 |  模式的逗號分隔清單。運算式必須使用 [Maxwell 篩選條件語法](https://maxwells-daemon.io/filtering/)。  | 
| 模式 |  RDS for MySQL 的 `database.table` 格式篩選條件模式，或 RDS for PostgreSQL 的 `database.schema.table` 格式篩選條件模式。您可以指定常值名稱，或定義規則運算式。  對於 RDS for MySQL，資料庫和資料表名稱都支援規則運算式。對於 RDS for PostgreSQL，僅結構描述和資料表名稱支援規則運算式，資料庫名稱不支援。  您無法包含資料欄層級篩選條件或拒絕清單。 單一整合最多可有 99 個模式。在主控台中，您可以在單一篩選條件運算式內輸入模式，或將其分散在多個運算式中。單一模式的長度不可超過 256 個字元。  | 

**重要**  
如果您選取 RDS for PostgreSQL 來源資料庫，則必須至少指定一個資料篩選條件模式。模式至少必須包含單一資料庫 (`database-name.*.*`)，才能複寫至目標資料倉儲。

下圖顯示主控台中 RDS for MySQL 資料篩選條件的結構：

![\[零 ETL 整合的資料篩選條件\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/zero-etl-filter.png)


**重要**  
請勿在您的篩選條件模式中包含個人身分識別、機密或敏感資訊。

### 中的資料篩選條件 AWS CLI
<a name="zero-etl.filtering-cli"></a>

使用 AWS CLI 新增資料篩選條件時，語法與主控台略有不同。您必須個別為每個模式指派篩選條件類型 (`Include` 或 `Exclude`)，因此您無法在一個篩選條件類型下群組多個模式。

例如，在主控台中，您可以在單一 `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:*.*` 的預設篩選條件，這會將所有資料表複寫到目標資料倉儲。不過，如果您新增至少一個篩選條件，預設邏輯會切換為 `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 管理主控台，它會處理從左到右以及從上到下的篩選條件表達式。第二個篩選條件或第一個篩選條件後面的個別模式可以覆寫它。

例如，如果第一個篩選條件是 `Include books.stephenking`，它只會包含 `books` 資料庫中的 `stephenking` 資料表。不過，如果您新增第二個篩選條件 `Exclude books.*`，則會覆寫第一個篩選條件。這可防止 `books` 索引中的任何資料表複寫到目標資料倉儲。

當您指定至少一個篩選條件時，邏輯會從預設假設 `exclude:*.*` 開始，這會自動*排除*所有資料表進行複寫。最佳實務是定義從最廣泛到最具體的篩選條件。從一或多個 `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` 資料庫中的兩個特定資料表：

  ```
  'include: books.stephen_king, include: books.carolyn_keene'
  ```
+ 包含 `books` 資料庫中的所有資料表，但包含子字串 `mystery` 的資料表除外：

  ```
  'include: books.*, exclude: books./.*mystery.*/'
  ```
+ 包含 `books` 資料庫中的所有資料表，但以 `mystery` 開頭的資料表除外：

  ```
  'include: books.*, exclude: books./mystery.*/'
  ```
+ 包含 `books` 資料庫中的所有資料表，但以 `mystery` 結尾的資料表除外：

  ```
  'include: books.*, exclude: books./.*mystery/'
  ```
+ 包含 `books` 資料庫中以 `table_` 開頭的所有資料表，但名為 `table_stephen_king` 的資料表除外。例如，會複寫 `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` 結構描述中的一個資料表，以及 `employee` 資料庫的 `finance` 結構描述的一個資料表：

  ```
  'include: books.mystery.stephen_king, include: employee.finance.benefits'
  ```
+ 包含 `books` 資料庫的 `science_fiction` 結構描述中的所有資料表，但包含子字串 `king` 的資料表除外：

  ```
  'include: books.science_fiction.*, exclude: books.*./.*king.*/
  ```
+ 包含 `books` 資料庫中的所有資料表，但具有以 `sci` 開頭的結構描述名稱的資料表除外：

  ```
  'include: books.*.*, exclude: books./sci.*/.*'
  ```
+ 包含 `books` 資料庫中的所有資料表，但以 `king` 結尾的 `mystery` 結構描述中的資料表除外：

  ```
  'include: books.*.*, exclude: books.mystery./.*king/'
  ```
+ 包含 `books` 資料庫中以 `table_` 開頭的所有資料表，但名為 `table_stephen_king` 的資料表除外。例如，會複寫 `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 結構描述中的一個資料表，以及 employee 資料庫的 finance 結構描述中的一個資料表：

  ```
  '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 以不同的方式處理物件名稱大小寫，這會影響資料篩選條件組態和目標查詢。注意下列事項：
+ 除非在 `CREATE` 陳述式中明確加上引號，否則 Oracle Database 會以大寫形式儲存資料庫、結構描述和物件名稱。例如，如果您建立 `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`，您必須將大寫名稱 `MYTABLE` 加上引號，使其符合 Oracle 資料字典中的大小寫。

```
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`。查詢成功，因為它會搜尋名為 `mytable` 的資料表，這是 Oracle 資料字典中的資料表名稱。

```
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 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇**零 ETL 整合**。選取您要新增資料篩選條件的整合，然後選擇**修改**。

1. 在**來源**下，新增一或多個 `Include` 和 `Exclude` 陳述式。

   下圖顯示 MySQL 整合的資料篩選條件範例：  
![\[RDS 主控台中零 ETL 整合的資料篩選條件\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/zero-etl-filter-data.png)

1. 當您對變更感到滿意時，請選擇**繼續**和**儲存變更**。

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

若要使用 將資料篩選條件新增至零 ETL 整合 AWS CLI，請呼叫 [modify-integration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/modify-integration.html) 命令。除了整合識別符之外，使用逗號分隔的 `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) 操作。指定整合識別符，並提供以逗號分隔的篩選條件模式清單。

## 從整合中移除資料篩選條件
<a name="zero-etl.remove-filter"></a>

當您從整合中移除資料篩選條件時，Amazon RDS 會重新評估剩餘的篩選條件，就好像移除的篩選條件從未存在一樣。然後，它會將目前符合條件的任何先前排除的資料複寫到目標資料倉儲。這會觸發所有受影響資料表的重新同步。

# 將資料新增至來源 RDS 資料庫並進行查詢
<a name="zero-etl.querying"></a>

若要完成建立 零 ETL 整合，將資料從 Amazon RDS 複製到 Amazon Redshift，您必須在目標目的地中建立資料庫。

對於與 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 主控台或查詢編輯器第 2 版來建立資料庫。

如需建立目的地資料庫的指示，請參閱[在 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 資料庫執行個體](USER_ConnectToInstance.md)。

然後，建立資料表並插入一列範例資料。

**重要**  
請確定資料表具有主索引鍵。否則，無法將其複寫到目標資料倉儲。

**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 主控台，然後從左側導覽窗格中選擇**查詢編輯器第 2 版**。

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 資料庫的單一範例資料列。\]](http://docs.aws.amazon.com/zh_tw/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 資料湖倉的零 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/zh_tw/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/zh_tw/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

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

**不受支援的資料類型**

Amazon Redshift 不支援下列 RDS for Oracle 資料類型：
+ `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/zh_tw/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/zh_tw/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/zh_tw/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/zh_tw/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

# 檢視和監控 Amazon RDS 零 ETL 整合
<a name="zero-etl.describingmonitoring"></a>

您可以檢視 Amazon RDS 零 ETL 整合的詳細資訊，以查看其組態資訊和目前狀態。您也可以透過在 Amazon Redshift 中查詢特定系統檢視來監控整合的狀態。此外，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 Aurora零 ETL 整合。

### 主控台
<a name="zero-etl.describing-console"></a>

**檢視零 ETL 整合的詳細資訊**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 從左側導覽窗格中，選擇**零 ETL 整合**。

1. 選取整合以檢視其詳細資訊，例如其來源資料庫和目標資料倉儲。  
![\[關於零 ETL 整合的詳細資訊\]](http://docs.aws.amazon.com/zh_tw/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>

若要使用 檢視目前帳戶中的所有零 ETL 整合 AWS CLI，請使用 [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) – 提供已完成整合執行的相關資訊。

所有整合相關的 Amazon 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 Aurora零 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 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon RDS 主控台。

1. 在導覽窗格中，選擇**零 ETL 整合**，然後選擇您要修改的整合。

1. 選擇**修改**並修改任何可用的設定。

1. 滿意所有變更時，請選擇**修改**。

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

若要使用 修改零 ETL 整合AWS CLI，請呼叫 [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) 操作。指定整合識別符，以及您要修改的參數。

# 刪除 Amazon RDS 零 ETL 整合
<a name="zero-etl.deleting"></a>

當您刪除零 ETL 整合時，Amazon RDS 會將其從來源資料庫中移除。您的交易資料不會從 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 管理主控台，開啟位於 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) 的 Amazon 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 資料湖倉的零 ETL 整合。如果整合發生問題，您必須刪除整合並建立新的整合。您無法重新整理或重新同步現有的整合。

**Topics**
+ [我無法建立零 ETL 整合](#zero-etl.troubleshooting.creation)
+ [我的整合停滯在 `Syncing` 狀態](#zero-etl.troubleshooting.syncing)
+ [我的資料表未複寫至 Amazon Redshift](#zero-etl.troubleshooting.primarykey)
+ [我的一個或多個 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 整合，請確定下列情況對於您的來源資料庫是正確的：
+ 來源資料庫必須執行支援的資料庫引擎版本。如需支援的版本的清單，請參閱[Amazon RDS 零 ETL 整合的支援區域和資料庫引擎](Concepts.RDS_Fea_Regions_DB-eng.Feature.ZeroETL.md)。
+  您已正確設定資料庫參數。如果必要參數設定不正確或未與資料庫相關聯，則建立會失敗。請參閱 [步驟 1：建立自訂資料庫參數群組。](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>

如果您變更其中一個必要資料庫參數的值，您的整合可能會持續顯示 `Syncing` 的狀態。

若要修正此問題，請檢查與來源資料庫相關聯之參數群組中的參數值，並確定其符合必要值。如需詳細資訊，請參閱[步驟 1：建立自訂資料庫參數群組。](zero-etl.setting-up.md#zero-etl.parameters)。

如果您修改任何參數，請務必將資料庫重新開機以套用變更。

## 我的資料表未複寫至 Amazon Redshift
<a name="zero-etl.troubleshooting.primarykey"></a>

如果您沒有看到一或多個資料表反映在 Amazon Redshift 中，您可以執行下列命令來重新同步它們：

```
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)。

您的資料可能不會複寫，因為一或多個來源資料表沒有主索引鍵。Amazon Redshift 中的監控儀表板會將這些資料表的狀態顯示為 `Failed`，而整體零 ETL 整合的狀態會變更為 `Needs attention`。若要解決此問題，您可以識別資料表中可成為主索引鍵的現有索引鍵，也可以新增合成主索引鍵。如需詳細解決方案，請參閱在[建立與 Amazon Redshift 的 Amazon Aurora MySQL 或 Amazon RDS for MySQL 零 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/)。

## 我的一個或多個 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) 系統檢視會顯示 `ResyncRequired` 的 `table_state`，這表示整合必須將該特定資料表的資料從 MySQL 完全重新載入至 Amazon Redshift。

當資料表開始重新同步時，其會進入 `Syncing` 的狀態。您不需要採取任何手動動作，即可重新同步資料表。當資料表資料重新同步時，您無法在 Amazon Redshift 中存取該資料。

以下是一些可以將資料表置於 `ResyncRequired` 狀態的範例操作，以及可以考慮的替代方法。


| 作業 | 範例 | 備用 | 
| --- | --- | --- | 
| 將資料欄新增到特定位置  |  <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` 之類的常值常數，避免資料表可用性中的延遲。 | 
| 在單一命令內執行多個資料欄操作 |  <pre>ALTER TABLE table_name<br />  ADD COLUMN column_1,<br />  RENAME COLUMN column_2 TO column_3;</pre>  | 考慮將命令分成兩個單獨的操作 (ADD 和 RENAME)，這不需要重新同步。 | 

## Amazon SageMaker AI Lakehouse 零 ETL 整合的整合失敗問題
<a name="zero-etl.troubleshooting.integration-issues"></a>

如果您在現有的零 ETL Amazon SageMaker AI 整合中遇到與湖房整合的問題，唯一的解決方法是刪除整合並建立新的整合。與其他 AWS 服務不同，零 ETL 整合不支援重新整理或重新同步操作。

若要解決整合問題：

1. 使用主控台、CLI 或 API 刪除有問題的零 ETL 整合。

1. 驗證來源資料庫和目標資料倉儲組態是否正確。

1. 使用相同或更新的組態建立新的零 ETL 整合。

此程序將導致資料管道完全重新初始化，這可能需要一些時間，取決於來源資料庫的大小。