Amazon RDS 与 Amazon Redshift 零 ETL 集成的数据筛选
Amazon RDS 零 ETL 集成支持数据筛选,这使您可以控制哪些数据从源 Amazon RDS 数据库复制到目标 Amazon Redshift 数据仓库。您可以应用一个或多个筛选条件来有选择地包含或排除特定的表,而不是复制整个数据库。这可以通过确保只传输相关数据,来协助您优化存储和查询性能。目前,筛选仅限于数据库级和表级。不支持列级和行级筛选。
当您要执行以下操作时,数据筛选可能很有用:
-
联接来自两个或更多不同源数据库的某些表,而您不需要来自任一数据库的完整数据。
-
仅使用表的子集而不是整个数据库实例集来执行分析,从而节省成本。
-
从某些表中筛选掉敏感信息,例如电话号码、地址或信用卡详细信息。
您可以使用 Amazon Web Services Management Console、Amazon Command Line Interface(Amazon CLI)或 Amazon RDS API 向零 ETL 集成添加数据筛选条件。
如果集成将预置 Amazon Redshift 集群作为其目标,则该集群必须使用补丁 180 或更高版本,才能使用数据筛选。
数据筛选条件的格式
您可以为单个集成定义多个筛选条件。每个筛选条件要么包含、要么排除任何与筛选表达式中的模式之一匹配的现有和将来的数据库表。Amazon RDS 零 ETL 集成使用 Maxwell 筛选条件语法
每个筛选条件都包含以下元素:
元素 | 描述 |
---|---|
筛选条件类型 |
|
筛选表达式 |
逗号分隔的模式列表。表达式必须使用 Maxwell 筛选条件语法 |
模式 |
一种筛选条件模式,格式为 您不能包含列级别筛选条件或黑名单。 单个集成最多可以有总共 99 个模式。在控制台中,可以在单个筛选表达式中输入模式,也可以将它们分散在多个表达式中。单个模式的长度不能超过 256 个字符。 |
下图显示了控制台中 数据筛选条件的结构:

重要
请勿在筛选条件模式中包含个人身份信息、机密信息或敏感信息。
Amazon CLI 中的数据筛选条件
使用 Amazon CLI 添加数据筛选条件时,语法与使用控制台略有不同。必须为每种模式分别指定筛选条件类型(Include
或 Exclude
),因此不能将多个模式分组到一个筛选条件类型下。
例如,在控制台中,可以在单个 Include
语句下对以下逗号分隔的模式进行分组:
mydb
.mytable
,mydb
./table_\d+/
但是,使用 Amazon CLI 时,相同的数据筛选条件必须采用以下格式:
'include:
mydb.mytable
, include:mydb./table_\d+/
'
筛选条件逻辑
如果您在集成中未指定任何数据筛选条件,Amazon RDS 会采用默认筛选条件 include:*.*
,这会将所有表复制到目标数据仓库。但是,如果您至少添加一个筛选条件,则默认逻辑会切换为 exclude:*.*
,默认情况下这会排除所有表。这使您可以显式定义要在复制中包含哪些数据库和表。
例如,如果您定义以下筛选条件:
'include: db.table1, include: db.table2'
Amazon RDS 按以下方式评估筛选条件:
'exclude:*.*, include: db.table1, include: db.table2'
因此,Amazon RDS 仅将来自名为 db
的数据库的 table1
和 table2
复制到目标数据仓库。
筛选条件优先级
Amazon RDS 按您指定的顺序评估数据筛选条件。在 Amazon Web Services Management Console中,它将从左到右、从上到下处理筛选表达式。第二个筛选条件或第一个筛选条件之后的单个模式可以覆盖它。
例如,如果第一个筛选条件是 Include books.stephenking
,则它只包括 books
数据库中的 stephenking
表。但是,如果您添加第二个筛选条件 Exclude books.*
,则它会覆盖第一个筛选条件。这可以防止 books
索引中的任何表复制到 Amazon Redshift。
当您指定至少一个筛选条件时,默认情况下,逻辑以采用 exclude:*.*
开始,这会自动将所有表排除 在复制范围之外。作为最佳实践,请按照从最广泛到最具体的顺序定义筛选条件。首先使用一个或多个 Include
语句来指定要复制的数据,然后添加 Exclude
筛选条件来有选择性地移除某些表。
同样的原则也适用于使用 Amazon CLI 定义的筛选条件。Amazon RDS 按您指定筛选条件模式的顺序评估这些模式,因此一个模式可能会覆盖您指定的在它之前的模式。
示例
以下示例演示了如何将数据筛选用于 零 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'
向集成添加数据筛选条件
您可以使用 Amazon Web Services Management Console、Amazon CLI 或 Amazon RDS API 配置数据筛选。
重要
如果您在创建集成后添加筛选条件,Amazon RDS 会将其视为似乎始终存在。它会移除目标 Amazon Redshift 数据仓库中不符合新筛选条件的任何数据,并重新同步所有受影响的表。
将数据筛选条件添加到零 ETL 集成中
登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择零 ETL 集成。选择要向其添加数据筛选条件的集成,然后选择修改。
-
在源下,添加一个或多个
Include
和Exclude
语句。下图显示了 MySQL 集成的数据筛选条件的示例:
-
如果您对更改感到满意,请选择继续和保存更改。
要使用 Amazon CLI 向零 ETL 集成添加数据筛选条件,请调用 modify-integrationInclude
和 Exclude
Maxwell 筛选条件列表来指定 --data-filter
参数。
以下示例向 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 修改零 ETL 集成,请调用 ModifyIntegration 操作。指定集成标识符,并提供逗号分隔的筛选条件模式列表。
从集成中移除数据筛选条件
当您从集成中移除数据筛选条件时,Amazon RDS 会重新评估剩余的筛选条件,就好像移除的筛选条件从未存在过一样。然后,它将所有以前排除但现在符合条件的数据复制到目标 Amazon Redshift 数据仓库。这会触发所有受影响的表重新同步。