

# Filtragem de dados para Integrações ETL zero do Aurora
<a name="zero-etl.filtering"></a>

As Integrações ETL zero do Aurora permitem filtragem de dados, o que possibilita controlar quais dados são replicados do cluster de banco de dados do Aurora de origem para o data warehouse de destino. Em vez de replicar todo o banco de dados, você pode aplicar um ou mais filtros para incluir ou excluir seletivamente tabelas específicas. Isso ajuda a otimizar o desempenho do armazenamento e das consultas, garantindo que somente os dados relevantes sejam transferidos. No momento, a filtragem é limitada aos níveis de banco de dados e tabela. Não é possível aplicar filtragem em nível de coluna e linha.

A filtragem de dados pode ser útil quando você deseja:
+ Una determinadas tabelas de dois ou mais clusters de origem diferentes para não precisar de dados completos de nenhum cluster.
+ Economize custos realizando análises usando apenas um subconjunto de tabelas em vez de uma frota inteira de bancos de dados.
+ Filtre informações confidenciais, como números de telefone, endereços ou detalhes do cartão de crédito, de determinadas tabelas.

É possível adicionar filtros de dados a uma integração ETL zero usando o Console de gerenciamento da AWS, a AWS Command Line Interface (AWS CLI) ou a API do Amazon RDS.

Se a integração tiver um cluster provisionado como destino, o cluster deverá estar no [patch 180](https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html#cluster-version-180) ou posterior para usar a filtragem de dados.

**Topics**
+ [Formato de um filtro de dados](#zero-etl.filtering-format)
+ [Lógica de filtros](#zero-etl.filtering-evaluate)
+ [Precedência do filtro](#zero-etl.filtering-precedence)
+ [Exemplos do Aurora MySQL](#zero-etl.filtering-examples-mysql)
+ [Exemplos do Aurora PostgreSQL](#zero-etl.filtering-examples-postgres)
+ [Adicionar filtros de dados a uma integração](#zero-etl.add-filter)
+ [Remover filtros de dados de uma integração](#zero-etl.remove-filter)

## Formato de um filtro de dados
<a name="zero-etl.filtering-format"></a>

É possível definir vários filtros para uma única integração. Cada filtro inclui ou exclui qualquer tabela de banco de dados existente e futura que corresponda a um dos padrões na expressão do filtro. As integrações ETL zero do Aurora usam a [sintaxe de filtro Maxwell](https://maxwells-daemon.io/filtering/) para a filtragem de dados.

Cada filtro tem os seguintes elementos:


| Elemento | Descrição | 
| --- | --- | 
| Tipo de filtro | Um tipo de filtro `Include` *inclui* todas as tabelas que correspondem a um dos padrões na expressão do filtro. Um tipo de filtro `Exclude` *exclui* todas as tabelas que correspondem a um dos padrões. | 
| Expressão de filtro | Uma lista separada por vírgulas de padrões. As expressões devem usar a [sintaxe de filtro Maxwell](https://maxwells-daemon.io/filtering/). | 
| Pattern | Um padrão de filtro no formato `{{database}}.{{table}}` para o Aurora MySQL ou `{{database}}.{{schema}}.{{table}}` para o Aurora PostgreSQL. É possível especificar nomes literais ou definir expressões regulares. No Aurora MySQL, são aceitas expressões regulares em nomes de banco de dados e de tabela. No Aurora PostgreSQL, as expressões regulares são aceitas somente em nomes de esquema e de tabela, não em nomes de banco de dados. <br />Não é possível incluir filtros ao nível da coluna nem listas de bloqueio.<br />Uma única integração pode ter um máximo de 99 padrões no total. No console, é possível inserir padrões em uma única expressão de filtro ou distribuí-los entre várias expressões. Um único padrão não pode exceder 256 caracteres. | 

**Importante**  
Se você selecionar um cluster de banco de dados de origem do Aurora PostgreSQL, deverá especificar pelo menos um padrão de filtro de dados. O padrão deve incluir no mínimo um banco de dados único (`{{database-name}}.*.*`) para replicação no data warehouse de destino.

A imagem a seguir mostra a estrutura dos filtros de dados do Aurora MySQL no console:

![Filtragem de dados para uma Integração ETL zero](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/images/zero-etl-filter.png)


**Importante**  
Não inclua informações pessoais, confidenciais ou sigilosas em seus padrões de filtragem.

### Filtros de dados na AWS CLI
<a name="zero-etl.filtering-cli"></a>

Ao usar a AWS CLI para adicionar um filtro de dados, a sintaxe difere um pouco da sintaxe do console. Você deve atribuir um tipo de filtro (`Include` ou `Exclude`) a cada padrão individualmente; portanto, não é possível agrupar vários padrões sob um tipo de filtro.

Por exemplo, no console, é possível agrupar os seguintes padrões separados por vírgula em uma única instrução `Include`:

**Aurora MySQL**

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

**Aurora PostgreSQL**

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

No entanto, ao usar a AWS CLI, o mesmo filtro de dados deve estar no seguinte formato:

**Aurora MySQL**

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

**Aurora PostgreSQL**

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

## Lógica de filtros
<a name="zero-etl.filtering-evaluate"></a>

Se você não especificar nenhum filtro de dados na integração, o Aurora assumirá o filtro padrão `include:*.*`, o que replica todas as tabelas no data warehouse de destino. Entretanto, se você adicionar pelo menos um filtro, a lógica padrão mudará para `exclude:*.*`, o que exclui todas as tabelas por padrão. Isso permite que você defina explicitamente quais bancos de dados e tabelas incluir na replicação.

Por exemplo, se você definir o seguinte filtro:

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

O Aurora avaliará o filtro da seguinte forma:

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

Portanto, o Aurora replica somente a `table1` e a `table2` do banco de dados denominado `db` para o data warehouse de destino.

## Precedência do filtro
<a name="zero-etl.filtering-precedence"></a>

O Aurora avalia os filtros de dados na ordem em que você especificar. No Console de gerenciamento da AWS, ele processa expressões de filtro da esquerda para a direita e de cima para baixo. Um segundo filtro ou um padrão individual subsequente pode substituir o primeiro.

Por exemplo, se o primeiro filtro for `Include books.stephenking`, ele incluirá somente a tabela `stephenking` do banco de dados `books`. No entanto, se você adicionar um segundo filtro, `Exclude books.*`, ele substituirá o primeiro filtro. Isso impede que qualquer tabela do índice `books` seja replicada para o data warehouse de destino.

Quando você especifica pelo menos um filtro, a lógica primeiro assume `exclude:*.*`, o que significa que todas as tabelas são automaticamente *excluídas* da replicação. Como prática recomendada, defina filtros do mais amplo ao mais específico. Comece com uma ou mais instruções `Include` para especificar os dados a serem replicados e, em seguida, adicione filtros `Exclude` para remover seletivamente determinadas tabelas.

O mesmo princípio se aplica aos filtros que você define usando a AWS CLI. O Aurora avalia esses padrões de filtro na ordem em que você os especifica; portanto, um padrão pode substituir um especificado antes dele.

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

Os seguintes exemplos demonstram como a filtragem de dados funciona para exemplos do Aurora MySQL de Integração ETL zero:
+  Inclua todos os bancos de dados e todas as tabelas:

  ```
  'include: *.*'
  ```
+  Inclua todas as tabelas no banco de dados `books`:

  ```
  'include: books.*'
  ```
+ Exclua todas as tabelas chamadas `mystery`:

  ```
  'include: *.*, exclude: *.mystery'
  ```
+ Inclua duas tabelas específicas no banco de dados `books`:

  ```
  'include: books.stephen_king, include: books.carolyn_keene'
  ```
+ Inclua todas as tabelas no banco de dados `books`, exceto aquelas que contêm a substring `mystery`:

  ```
  'include: books.*, exclude: books./.*mystery.*/'
  ```
+ Inclua todas as tabelas no banco de dados `books`, exceto aquelas que começam com `mystery`:

  ```
  'include: books.*, exclude: books./mystery.*/'
  ```
+ Inclua todas as tabelas no banco de dados `books`, exceto aquelas que terminam com `mystery`:

  ```
  'include: books.*, exclude: books./.*mystery/'
  ```
+ Inclua todas as tabelas no banco de dados `books` que começam com `table_`, exceto aquela chamada `table_stephen_king`. Por exemplo, `table_movies` ou `table_books` seria replicada, mas não `table_stephen_king`.

  ```
  'include: books./table_.*/, exclude: books.table_stephen_king'
  ```

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

Os seguintes exemplos demonstram como a filtragem de dados funciona para Integrações ETL zero do Aurora PostgreSQL:
+ Inclua todas as tabelas no banco de dados `books`:

  ```
  'include: books.*.*'
  ```
+ Exclua todas as tabelas denominadas `mystery` no banco de dados `books`:

  ```
  'include: books.*.*, exclude: books.*.mystery'
  ```
+ Inclua uma tabela no banco de dados `books` no esquema `mystery` e uma tabela no banco de dados `employee` no esquema `finance`:

  ```
  'include: books.mystery.stephen_king, include: employee.finance.benefits'
  ```
+ Inclua todas as tabelas no banco de dados `books` e no esquema `science_fiction`, exceto aquelas que contêm a substring `king`:

  ```
  'include: books.science_fiction.*, exclude: books.*./.*king.*/
  ```
+ Inclua todas as tabelas no banco de dados `books`, exceto aquelas que têm um nome de esquema que começa com `sci`:

  ```
  'include: books.*.*, exclude: books./sci.*/.*'
  ```
+ Inclua todas as tabelas no banco de dados `books`, exceto aquelas no esquema `mystery` que terminam com `king`:

  ```
  'include: books.*.*, exclude: books.mystery./.*king/'
  ```
+ Inclua todas as tabelas no banco de dados `books` que começam com `table_`, exceto aquela chamada `table_stephen_king`. Por exemplo, `table_movies` no esquema `fiction` e `table_books` no esquema `mystery` são replicados, mas não `table_stephen_king` em nenhum dos esquemas:

  ```
  'include: books.*./table_.*/, exclude: books.*.table_stephen_king'
  ```

## Adicionar filtros de dados a uma integração
<a name="zero-etl.add-filter"></a>

É possível configurar a filtragem de dados usando o Console de gerenciamento da AWS, a AWS CLI ou a API do Amazon RDS. 

**Importante**  
Se você adicionar um filtro depois de criar uma integração, o Aurora o tratará como se ele sempre tivesse existido. Ele remove quaisquer dados no data warehouse de destino que não correspondam aos novos critérios de filtragem e ressincroniza todas as tabelas afetadas.

### Console do RDS
<a name="add-filter-console"></a>

**Para adicionar filtros de dados para uma integração ETL zero**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No painel de navegação, escolha **Integrações ETL zero**. Selecione a integração à qual você deseja adicionar filtros de dados e escolha **Modificar**.

1. Em **Fonte**, adicione uma ou mais instruções `Exclude` e `Include`.

   A seguinte imagem mostra um exemplo de filtros de dados para uma integração do MySQL:  
![Filtragens de dados para uma integração ETL zero no console do RDS](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/images/zero-etl-filter-data.png)

1. Quando as alterações estiverem adequadas para você, escolha **Continuar** e **Salvar alterações**.

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

Para adicionar filtros de dados a uma integração ETL zero usando a AWS CLI, chame o comando [modify-integration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/modify-integration.html). Além do identificador de integração, especifique o parâmetro `--data-filter` com uma lista separada por vírgulas dos filtros Maxwell `Include` e `Exclude`.

**Example**  
O exemplo a seguir adiciona padrões de filtro a `my-integration`.  
Para Linux, macOS ou Unix:  

```
aws rds modify-integration \
    --integration-identifier {{my-integration}} \
    --data-filter {{'include: foodb.*, exclude: foodb.tbl, exclude: foodb./table_\d+/'}}
```
Para Windows:  

```
aws rds modify-integration ^
    --integration-identifier {{my-integration}} ^
    --data-filter {{'include: foodb.*, exclude: foodb.tbl, exclude: foodb./table_\d+/'}}
```

### API do RDS
<a name="add-filter-api"></a>

Para modificar uma integração ETL zero usando a API do RDS, chame a operação [ModifyIntegration](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyIntegration.html). Especifica o identificador de integração e fornece uma lista separada por vírgulas de padrões de filtro.

## Remover filtros de dados de uma integração
<a name="zero-etl.remove-filter"></a>

Quando você remove um filtro de dados de uma integração, o Aurora reavalia os filtros restantes como se o filtro removido nunca tivesse existido. Em seguida, ele replica quaisquer dados anteriormente excluídos que agora atendem aos critérios no data warehouse de destino. Isso aciona uma ressincronização de todas as tabelas afetadas.