Amazon RDS 与 Amazon Redshift 零 ETL 集成的数据筛选
您可以使用适用于 Amazon RDS 零 ETL 集成的数据筛选,来定义从源 Amazon RDS 数据库复制到目标 Amazon Redshift 数据仓库的范围。您可以定义一个或多个筛选条件,选择性地在复制中包括或排除某些表,而不是将所有数据都复制到目标。只有数据库和表级别筛选才可用于零 ETL 集成。您无法按列或行进行筛选。
当您要执行以下操作时,数据筛选可能很有用:
-
联接来自两个或更多不同源数据库的某些表,而您不需要来自任一数据库的完整数据。
-
仅使用表的子集而不是整个数据库实例集来执行分析,从而节省成本。
-
从某些表中筛选掉敏感信息,例如电话号码、地址或信用卡详细信息。
您可以使用 AWS Management Console、AWS Command Line Interface(AWS CLI)或 Amazon RDS API 向零 ETL 集成添加数据筛选条件。
如果集成将预调配的 Amazon Redshift 集群作为其目标,则该集群必须使用补丁 180 或更高版本。
数据筛选条件的格式
您可以为单个集成定义多个筛选条件。每个筛选条件要么包含、要么排除任何与筛选表达式中的模式之一匹配的现有和将来的数据库表。Amazon RDS 零 ETL 集成使用 Maxwell 筛选条件语法
每个筛选条件都包含以下元素:
元素 | 描述 |
---|---|
筛选条件类型 |
|
筛选表达式 |
逗号分隔的模式列表。表达式必须使用 Maxwell 筛选条件语法 |
模式 |
Amazon RDS 仅支持在数据库和表级别进行筛选。您不能包含列级别筛选条件 ( 单个集成最多可以有总共 99 个模式。在控制台中,可以在单个筛选表达式中包含模式,也可以将它们分散在多个表达式中。单个模式的长度不能超过 256 个字符。 |
下图显示了控制台中数据筛选条件的结构:
重要
请勿在筛选条件模式中包含个人身份信息、机密信息或敏感信息。
AWS CLI 中的数据筛选条件
使用 AWS CLI 添加数据筛选条件时,与控制台相比,语法略有不同。每个单独的模式都必须与其自己的筛选条件类型(Include
或 Exclude
)相关联。您不能使用单一筛选条件类型对多个模式进行分组。
例如,在控制台中,您可以在单个 Include
语句中对以下逗号分隔的模式分组:
mydb
.mytable
,mydb
./table_\d+/
但是,使用 AWS 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'
因此,只有来自名为 db
的数据库的 table1
和 table2
会复制到目标数据仓库中。
筛选条件优先级
Amazon RDS 按指定数据筛选条件的顺序评估这些筛选条件。在 AWS Management Console中,这意味着 Amazon RDS 将从左到右、从上到下评估筛选表达式。如果您为第一个筛选条件指定了特定的模式,那么第二个筛选条件甚至是紧随其后指定的各个模式都可以覆盖它。
例如,您的第一个筛选条件可能是 Include
books.stephenking
,它包括 books
数据库中名为 stephenking
的单个表。但是,如果您添加第二个筛选条件 Exclude
books.*
,则它会覆盖在它之前定义的 Include
筛选条件。因此,books
索引中的任何表都不会复制到 Amazon Redshift。
如果您至少指定一个筛选条件,则逻辑将从假定的 exclude:*.*
开始,这意味着所有表都将自动排除在复制范围之外。因此,作为一般最佳实践,请按从最宽泛到最不宽泛的顺序定义筛选条件。例如,使用一个或多个 Include
语句来定义要复制的所有数据。然后,开始添加 Exclude
筛选条件,以便有选择地将某些表排除在复制范围之外。
同样的原则也适用于使用 AWS 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'
向集成添加数据筛选条件
您可以使用 AWS Management Console、AWS CLI 或 Amazon RDS API 配置数据筛选。
重要
如果您在创建集成后添加筛选条件,则 Amazon RDS 会重新评估筛选条件,就好像它一直存在一样。它会移除当前位于目标 Amazon Redshift 数据仓库中,但与新筛选标准不匹配的所有数据。此操作会使所有受影响的表重新同步。
将数据筛选条件添加到零 ETL 集成中
登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择零 ETL 集成。选择要向其添加数据筛选条件的集成,然后选择修改。
-
在源下,添加一个或多个
Include
和Exclude
语句。下图显示了集成的数据筛选条件示例:
-
当所有更改都达到您的要求时,依次选择继续和保存更改。
要使用 AWS 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 RDS 将以前不符合筛选标准(但现在符合)的任何数据复制到目标 Amazon Redshift 数据仓库中。
移除一个或多个筛选条件会导致所有受影响的表重新同步。