

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

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

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

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

您可以使用 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)
+ [Aurora MySQL 範例](#zero-etl.filtering-examples-mysql)
+ [Aurora PostgreSQL 範例](#zero-etl.filtering-examples-postgres)
+ [將資料篩選條件新增至整合](#zero-etl.add-filter)
+ [從整合中移除資料篩選條件](#zero-etl.remove-filter)

## 資料篩選的格式
<a name="zero-etl.filtering-format"></a>

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

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


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

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

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

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


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

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

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

例如，在主控台中，您可以在單一 `Include` 陳述式下群組下列逗號分隔模式：

**Aurora MySQL**

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

**Aurora PostgreSQL**

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

不過，使用 時 AWS CLI，相同的資料篩選條件必須採用下列格式：

**Aurora MySQL**

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

**Aurora PostgreSQL**

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

## 篩選條件邏輯
<a name="zero-etl.filtering-evaluate"></a>

如果您未在整合中指定任何資料篩選條件，Aurora 會假設 `include:*.*` 的預設篩選條件，這會將所有資料表複寫到目標資料倉儲。不過，如果您新增至少一個篩選條件，預設邏輯會切換為 `exclude:*.*`，預設會排除所有資料表。這可讓您明確定義複寫中要包含哪些資料庫和資料表。

例如，如果您定義下列篩選條件：

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

Aurora 會評估篩選條件，如下所示：

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

因此，Aurora 只會從名為 `db` 的資料庫將 `table1` 和 `table2` 複寫到目標資料倉儲。

## 篩選條件優先順序
<a name="zero-etl.filtering-precedence"></a>

Aurora 會依您指定的順序評估資料篩選條件。在 中 AWS 管理主控台，它會處理從左到右以及從上到下的篩選條件表達式。第二個篩選條件或第一個篩選條件後面的個別模式可以覆寫它。

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

當您指定至少一個篩選條件時，邏輯會從預設假設 `exclude:*.*` 開始，這會自動*排除*所有資料表進行複寫。最佳實務是定義從最廣泛到最具體的篩選條件。從一或多個 `Include` 陳述式開始，指定要複寫的資料，然後新增 `Exclude` 篩選條件以選擇性地移除特定資料表。

相同的原則適用於您使用 AWS CLI定義的篩選條件。Aurora 會依您指定的順序評估這些篩選條件模式，因此模式可能會覆寫您在之前指定的模式。

## Aurora MySQL 範例
<a name="zero-etl.filtering-examples-mysql"></a>

下列範例示範資料篩選如何適用於 Aurora 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'
  ```

## Aurora PostgreSQL 範例
<a name="zero-etl.filtering-examples-postgres"></a>

下列範例示範資料篩選如何適用於 Aurora 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'
  ```

## 將資料篩選條件新增至整合
<a name="zero-etl.add-filter"></a>

您可以使用 AWS 管理主控台、 AWS CLI或 Amazon RDS API 設定資料篩選。

**重要**  
如果您在建立整合之後新增篩選條件，Aurora 會將其視為一律存在。它會移除目標資料倉儲中不符合新篩選條件的任何資料，並重新同步所有受影響的資料表。

### 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/AuroraUserGuide/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>

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