Amazon Redshift との Amazon RDS ゼロ ETL 統合でのデータフィルタリング
Amazon RDS ゼロ ETL 統合でのデータフィルタリングを使用して、ソースの Amazon RDS データベースからターゲットの Amazon Redshift データウェアハウスへのレプリケーションの範囲を定義できます。すべてのデータをターゲットにレプリケートするのではなく、単一または複数のフィルターを定義して、特定のテーブルを選択的にレプリケーションの対象に含めたり除外したりできます。ゼロ ETL 統合の場合、フィルタリングはデータベースレベルとテーブルレベルでのみ使用できます。列や行でのフィルタリングはできません。
データフィルタリングは、次のような場合に便利です。
-
2 つ以上の異なるソースデータベースの特定のテーブルを結合し、いずれのデータベースのデータ全体は必要ない場合。
-
データベース全体ではなく、テーブルのサブセットのみを使用して分析を行うことで、コストを節約する場合。
-
電話番号、住所、クレジットカード情報などの機密情報を特定のテーブルから除外する場合。
ゼロ ETL 統合には、AWS Management Console、AWS Command Line Interface (AWS CLI)、または RDS API を使用して、データフィルターを追加できます。
統合でプロビジョンした Amazon Redshift クラスターをターゲットとして使用している場合、クラスターは パッチ 180 以降である必要があります。
データフィルターの形式
1 つの統合に対して複数のフィルターを定義できます。各フィルターは、フィルター式のパターンのいずれかに一致する既存および今後利用するデータベーステーブルを含めるまたは除外します。Amazon RDS ゼロ ETL 統合では、データフィルタリングに Maxwell フィルター構文
各フィルターには以下の要素が含まれます。
要素 | 説明 |
---|---|
フィルタータイプ |
|
フィルター式 |
コンマ区切りのパターンのリスト。式では Maxwell フィルター構文 |
パターン |
Amazon RDS は、データベースレベルとテーブルレベルでのみフィルタリングをサポートしています。列レベルのフィルター ( 1 つの統合に含めることができるパターンの合計数は、最大 99 個です。コンソールでは、1 つのフィルター式にパターンを含めることも、複数の式に分散させることもできます。1 つのパターンの長さは 256 文字を超えることはできません。 |
次の図は、コンソールでのデータフィルターの構造を示しています。
重要
フィルターパターンには、個人を特定する情報、または機密情報を含めないでください。
AWS CLI のデータフィルター
AWS CLI を使用してデータフィルターを追加する場合、構文はコンソールと少し異なります。各パターンには、それぞれ独自のフィルタータイプ (Include
または Exclude
) を関連付ける必要があります。複数のパターンを 1 つのフィルタータイプにグループ化することはできません。
例えば、コンソールでは、以下のカンマで区切られたパターンを 1 つの Include
ステートメントにまとめることができます。
mydb
.mytable
,mydb
./table_\d+/
ただし AWS CLI を使用する際は、データフィルターを次のように記述する必要があります。
'include:
mydb.mytable
, include:mydb./table_\d+/
'
フィルター論理
統合でデータフィルターを指定しない場合、Amazon RDS は include:*.*
をデフォルトのフィルターと見なし、すべてのテーブルをターゲットデータウェアハウスに複製します。ただし、1 つまたは複数のフィルターを指定すると、ロジックは 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 がフィルター式を左から右、上から下に適用することを意味します。1 つ目のフィルターに特定のパターンを指定しても、2 つ目のフィルターや、その直後に指定された個別のパターンでそのパターンを上書きできます。
例えば、1 つ目のフィルターが Include
books.stephenking
で、books
データベース内の stephenking
という名前のテーブルが 1 つ含まれているとします。ただし、2 つ目のフィルター Exclude
books.*
を追加すると、その前に定義されている Include
フィルターが上書きされます。結果として、books
インデックスのテーブルは Amazon Redshift に複製されません。
1 つまたは複数のフィルターを指定すると、ロジックは exclude:*.*
を前提として開始されます。そのため、すべてのテーブルが自動的にレプリケーションから除外されます。そのため、一般的なベストプラクティスとしては、最も範囲の広いフィルターから最も範囲の狭いフィルターの順番で定義します。例えば、1 つまたは複数の Include
ステートメントを使用して、複製するデータをすべて定義します。次に、特定のテーブルを複製から選択的に除外する Exclude
フィルターを追加します。
AWS CLI を使用して定義するフィルターにも同じ原則が適用されます。Amazon RDS は、これらのフィルターパターンを指定された順番で適用するため、あるパターンによってその前に指定されたフィルターパターンが上書きされる場合があります。
例
以下の例は、ゼロ ETL 統合でのデータフィルタリングの仕組みを示しています。
-
すべてのデータベースとすべてのテーブルを含める。
'include: *.*'
-
books
データベース内のすべてのテーブルを含める。'include: books.*'
-
mystery
という名前のすべてのテーブルを除外します。'include: *.*, exclude: *.mystery'
-
books
データベース内の 2 つの特定のテーブルを含める。'include: books.stephen_king, include: books.carolyn_keene'
-
サブストリング
mystery
を含んでいるものを除き、books
データベース内のすべてのテーブルを含めます。'include: books.*, exclude: books./.*mystery.*/'
-
mystery
で始まるものを除き、books
データベース内のすべてのテーブルを含めます。'include: books.*, exclude: books./mystery.*/'
-
mystery
で終わるものを除き、books
データベース内のすべてのテーブルを含めます。'include: books.*, exclude: books./.*mystery/'
-
table_stephen_king
という名前のテーブルを除き、table_
で始まるbooks
データベース内の すべてのテーブルを含めます。例えば、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 統合] を選択します。データフィルターを追加する統合を選択して [変更] を選択します。
-
[ソース] で、1 つまたは複数の
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 オペレーションを呼び出します。統合 ID を指定し、フィルターパターンのカンマ区切りリストを指定します。
統合からのデータフィルターの削除
統合からデータフィルターを削除すると、Amazon RDS は削除したフィルターが存在しなかったかのようにそれ以外のフィルターを適用し始めます。その後、Amazon RDS は、以前はフィルタリング条件に一致しなかったが現在は一致しているすべてのデータをターゲットの Amazon Redshift データウェアハウスに複製します。
1 つ以上のデータフィルターを削除すると、影響を受けるすべてのテーブルが再同期されます。