

# Aurora 零 ETL 集成的数据筛选
<a name="zero-etl.filtering"></a>

Aurora 零 ETL 集成支持数据筛选，这使您可以控制哪些数据从源 Aurora 数据库集群复制到目标数据仓库。您可以应用一个或多个筛选条件来有选择地包含或排除特定的表，而不是复制整个数据库。这可以通过确保只传输相关数据，来协助您优化存储和查询性能。目前，筛选仅限于数据库级和表级。不支持列级和行级筛选。

当您要执行以下操作时，数据筛选可能很有用：
+ 联接来自两个或更多不同源集群的某些表，而您不需要来自任一集群的完整数据。
+ 仅使用表的子集而不是整个数据库实例集来执行分析，从而节省成本。
+ 从某些表中筛选掉敏感信息，例如电话号码、地址或信用卡详细信息。

您可以使用 Amazon Web Services 管理控制台、Amazon Command Line Interface（Amazon CLI）或 Amazon RDS API 向零 ETL 集成添加数据筛选条件。

如果集成将预置集群作为其目标，则该集群必须使用[补丁 180](https://docs.amazonaws.cn/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 | 说明 | 
| --- | --- | 
| 筛选条件类型 |  `Include` 筛选条件类型*包括*与筛选表达式中的模式之一匹配的所有表。`Exclude` 筛选条件类型*排除*与模式之一匹配的所有表。  | 
| 筛选表达式 |  逗号分隔的模式列表。表达式必须使用 [Maxwell 筛选条件语法](https://maxwells-daemon.io/filtering/)。  | 
| Pattern |  一种筛选模式，格式为 `database.table`（对于 Aurora MySQL）；或者格式为 `database.schema.table`（对于 Aurora PostgreSQL）。您可以指定文字名称，也可以定义正则表达式。  对于 Aurora MySQL，数据库和表名称均支持正则表达式。对于 Aurora PostgreSQL，只有架构和表名称支持正则表达式，而数据库名称不支持正则表达式。  您不能包含列级别筛选条件或黑名单。 单个集成最多可以有总共 99 个模式。在控制台中，可以在单个筛选表达式中输入模式，也可以将它们分散在多个表达式中。单个模式的长度不能超过 256 个字符。  | 

**重要**  
如果选择 Aurora PostgreSQL 源数据库集群，则必须至少指定一种数据筛选模式。该模式必须至少包含一个数据库 (`database-name.*.*`)，才能复制到目标数据仓库。

下图显示了控制台中 Aurora MySQL 数据筛选条件的结构：

![\[零 ETL 集成的数据筛选条件\]](http://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/images/zero-etl-filter.png)


**重要**  
请勿在筛选条件模式中包含个人身份信息、机密信息或敏感信息。

### Amazon CLI 中的数据筛选条件
<a name="zero-etl.filtering-cli"></a>

使用 Amazon CLI 添加数据筛选条件时，语法与使用控制台略有不同。必须为每种模式分别指定筛选条件类型（`Include` 或 `Exclude`），因此不能将多个模式分组到一个筛选条件类型下。

例如，在控制台中，可以在单个 `Include` 语句下对以下逗号分隔的模式进行分组：

**Aurora MySQL**

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

**Aurora PostgreSQL**

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

但是，使用 Amazon 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 按您指定的顺序评估数据筛选条件。在 Amazon Web Services 管理控制台中，它将从左到右、从上到下处理筛选表达式。第二个筛选条件或第一个筛选条件之后的单个模式可以覆盖它。

例如，如果第一个筛选条件是 `Include books.stephenking`，则它只包括 `books` 数据库中的 `stephenking` 表。但是，如果您添加第二个筛选条件 `Exclude books.*`，则它会覆盖第一个筛选条件。这可以防止将 `books` 索引中的任何表复制到目标数据仓库。

当您指定至少一个筛选条件时，默认情况下，逻辑以采用 `exclude:*.*` 开始，这会自动将所有表*排除* 在复制范围之外。作为最佳实践，请按照从最广泛到最具体的顺序定义筛选条件。首先使用一个或多个 `Include` 语句来指定要复制的数据，然后添加 `Exclude` 筛选条件来有选择性地移除某些表。

同样的原则也适用于使用 Amazon 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'
  ```
+ 在 `mystery` 架构的 `books` 数据库中包括一个表，在 `finance` 架构的 `employee` 数据库中包括一个表：

  ```
  '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` 数据库中的所有表，但那些在 `mystery` 架构中以 `king` 结束的表除外：

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

您可以使用 Amazon Web Services 管理控制台、Amazon CLI 或 Amazon RDS API 配置数据筛选。

**重要**  
如果您在创建集成后添加筛选条件，Aurora 会将其视为似乎始终存在。它会移除目标数据仓库中不符合新筛选条件的任何数据，并重新同步所有受影响的表。

### RDS 控制台
<a name="add-filter-console"></a>

**将数据筛选条件添加到零 ETL 集成中**

1. 登录 Amazon Web Services 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在导航窗格中，选择**零 ETL 集成**。选择要向其添加数据筛选条件的集成，然后选择**修改**。

1. 在**源**下，添加一个或多个 `Include` 和 `Exclude` 语句。

   下图显示了 MySQL 集成的数据筛选条件的示例：  
![\[RDS 控制台中零 ETL 集成的数据筛选条件\]](http://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/images/zero-etl-filter-data.png)

1. 如果您对更改感到满意，请选择**继续**和**保存更改**。

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

要使用 Amazon CLI 向零 ETL 集成添加数据筛选条件，请调用 [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.amazonaws.cn/AmazonRDS/latest/APIReference/API_ModifyIntegration.html) 操作。指定集成标识符，并提供逗号分隔的筛选条件模式列表。

## 从集成中移除数据筛选条件
<a name="zero-etl.remove-filter"></a>

当您从集成中移除数据筛选条件时，Aurora 会重新评估剩余的筛选条件，就好像移除的筛选条件从未存在过一样。然后，它将所有以前排除但现在符合条件的数据复制到目标数据仓库。这会触发所有受影响的表重新同步。