

# Filtrado de datos para integraciones sin ETL de Aurora
<a name="zero-etl.filtering"></a>

Las integraciones sin ETL de Aurora admiten el filtrado de datos, lo que le permite controlar qué datos se replican desde el clúster de base de datos de Aurora de origen al almacén de datos de destino. En lugar de replicar toda la base de datos, puede aplicar uno o más filtros para incluir o excluir selectivamente tablas específicas. Esto lo ayuda a optimizar el almacenamiento y el rendimiento de las consultas al garantizar que solo se transfieran los datos relevantes. Actualmente, el filtrado está limitado a los niveles de base de datos y tabla. No se admite el filtrado a nivel de columna y fila.

El filtrado de datos puede resultar útil cuando desee:
+ Una determinadas tablas de dos o más clústeres de origen diferentes y no necesita datos completos del clúster.
+ Ahorrar costos realizando análisis utilizando únicamente un subconjunto de tablas en lugar de una flota completa de bases de datos.
+ Filtrar la información confidencial (como números de teléfono, direcciones o datos de tarjetas de crédito) de determinadas tablas.

Puede agregar filtros de datos a una integración sin ETL mediante la Consola de administración de AWS, la AWS Command Line Interface (AWS CLI) o la API de Amazon RDS.

Si la integración tiene un clúster aprovisionado como destino, el clúster debe tener [la revisión 180](https://docs.aws.amazon.com/redshift/latest/mgmt/cluster-versions.html#cluster-version-180) o uno posterior para usar el filtrado de datos.

**Topics**
+ [Formato de un filtro de datos](#zero-etl.filtering-format)
+ [Lógica de filtros](#zero-etl.filtering-evaluate)
+ [Prioridad del filtro](#zero-etl.filtering-precedence)
+ [Ejemplos de Aurora MySQL](#zero-etl.filtering-examples-mysql)
+ [Ejemplos de Aurora PostgreSQL](#zero-etl.filtering-examples-postgres)
+ [Adición de filtros de datos a una integración](#zero-etl.add-filter)
+ [Eliminación de filtros de datos de una integración](#zero-etl.remove-filter)

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

Puede definir varios filtros para una sola integración. Cada filtro incluye o excluye cualquier tabla de base de datos existente y futura que coincida con uno de los patrones de la expresión del filtro. Las integraciones sin ETL de Aurora utilizan la [sintaxis de filtro Maxwell](https://maxwells-daemon.io/filtering/) para el filtrado de datos.

Cada filtro tiene los siguientes elementos:


| Element | Descripción | 
| --- | --- | 
| Tipo de filtro |  Un tipo de filtro `Include` *incluye* todas las tablas que coinciden con uno de los patrones de la expresión de filtro. Un tipo de filtro `Exclude` *excluye* todas las tablas que coinciden con uno de los patrones.  | 
| Expresión de filtro |  Una lista separada por comas de patrones. Las expresiones deben usar la [sintaxis de filtro Maxwell](https://maxwells-daemon.io/filtering/).  | 
| Pattern |  Un patrón de filtro en el formato `database.table` para Aurora MySQL o `database.schema.table` para Aurora PostgreSQL. Puede especificar nombres literales o definir expresiones regulares.  Para Aurora MySQL, se admiten expresiones regulares tanto en el nombre de la base de datos como de la tabla. Para Aurora PostgreSQL, las expresiones regulares solo se admiten en el nombre del esquema y la tabla, no en el nombre de la base de datos.  No pueden incluir filtros en columnas ni listas de denegación. Una sola integración puede tener un máximo de 99 patrones en total. En la consola, puede introducir patrones dentro de una sola expresión de filtro o distribuirlos entre varias expresiones. Un único patrón no puede superar los 256 caracteres de longitud.  | 

**importante**  
Si selecciona un clúster de base de datos de origen de Aurora PostgreSQL, debe especificar al menos un patrón de filtro de datos. Como mínimo, el patrón debe incluir una única base de datos (`database-name.*.*`) para la replicación en el almacén de datos de destino.

En la imagen siguiente, se muestra la estructura de los filtros de datos de Aurora MySQL en la consola:

![\[Filtros de datos para integraciones sin ETL\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/images/zero-etl-filter.png)


**importante**  
No incluya información de identificación personal, confidencial o sensible en sus patrones de filtros.

### Filtros de datos en la AWS CLI
<a name="zero-etl.filtering-cli"></a>

Cuando se utiliza la AWS CLI para agregar un filtro de datos, la sintaxis es ligeramente diferente a la de la consola. Debe asignar un tipo de filtro (`Include` o `Exclude`) a cada patrón individualmente, por lo que no puede agrupar varios patrones en un mismo tipo de filtro.

Por ejemplo, en la consola puede agrupar los siguientes patrones separados por comas en una sola instrucción `Include`:

**Aurora MySQL**

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

**Aurora PostgreSQL**

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

Sin embargo, al utilizar la AWS CLI, el mismo filtro de datos debe tener el siguiente 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>

Si no especifica ningún filtro de datos en la integración, Aurora asume un filtro predeterminado de `include:*.*`, que replica todas las tablas en el almacén de datos de destino. No obstante, si agrega al menos un filtro, la lógica predeterminada cambia a `exclude:*.*`, que excluye todas las tablas de forma predeterminada. Esto le permite definir explícitamente qué bases de datos y tablas se incluirán en la replicación.

Por ejemplo, si hace lo siguiente:

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

Aurora evalúa el filtro de la siguiente manera:

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

Por lo tanto, Aurora solo replica `table1` y `table2` de la base de datos llamada `db` en el almacén de datos de destino.

## Prioridad del filtro
<a name="zero-etl.filtering-precedence"></a>

Aurora evalúa los filtros de datos en el orden que especifique. En la Consola de administración de AWS, procesa las expresiones de filtro de izquierda a derecha y de arriba abajo. Un segundo filtro o un patrón individual que siga al primero puede anularlo.

Por ejemplo, si el primer filtro es `Include books.stephenking`, solo incluye la tabla `stephenking` de la base de datos `books`. Sin embargo, si agrega un segundo filtro, `Exclude books.*`, este anulará el primer filtro. Esto evita que las tablas del índice de `books` se repliquen en el almacén de datos de destino.

Cuando especifica al menos un filtro, la lógica comienza con la suposición de `exclude:*.*` de forma predeterminada, lo que *excluye* automáticamente todas las tablas de la replicación. Como práctica recomendada, defina los filtros de más amplio a más específico. Comience con una o más instrucciones `Include` para especificar los datos que desea replicar; a continuación, agregue filtros `Exclude` para eliminar selectivamente ciertas tablas.

El mismo principio se aplica a los filtros que se definen mediante la AWS CLI. Aurora evalúa estos patrones de filtro en el orden en que los especifique, por lo que un patrón podría anular a otro especificado antes que él.

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

En los siguientes ejemplos, se muestra cómo funciona el filtrado de datos para las integraciones sin ETL de ejemplos de Aurora MySQL:
+  Incluir todas las bases de datos y todas las tablas:

  ```
  'include: *.*'
  ```
+  Incluir todas las tablas en la base de datos `books`:

  ```
  'include: books.*'
  ```
+ Excluya cualquier tabla con el nombre `mystery`:

  ```
  'include: *.*, exclude: *.mystery'
  ```
+ Incluir dos tablas específicas en la base de datos `books`:

  ```
  'include: books.stephen_king, include: books.carolyn_keene'
  ```
+ Incluya todas las tablas de la base de datos `books`, excepto las que contengan la subcadena `mystery`:

  ```
  'include: books.*, exclude: books./.*mystery.*/'
  ```
+ Incluya todas las tablas de la base de datos `books`, excepto las que comiencen por `mystery`:

  ```
  'include: books.*, exclude: books./mystery.*/'
  ```
+ Incluya todas las tablas de la base de datos `books`, excepto las que finalicen por `mystery`:

  ```
  'include: books.*, exclude: books./.*mystery/'
  ```
+ Incluya todas las tablas de la base de datos `books` que comiencen por `table_`, excepto la que se llama `table_stephen_king`. Por ejemplo, `table_movies` o `table_books` se replicaría, pero no `table_stephen_king`.

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

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

En los siguientes ejemplos, se muestra cómo funciona el filtrado de datos para las integraciones sin ETL de Aurora PostgreSQL:
+ Incluir todas las tablas en la base de datos `books`:

  ```
  'include: books.*.*'
  ```
+ Excluya cualquier tabla nombrada `mystery` en la base de datos `books`:

  ```
  'include: books.*.*, exclude: books.*.mystery'
  ```
+ Incluya una tabla dentro de la base de datos `books` en el esquema `mystery` y una tabla dentro de la base de datos `employee` en el esquema `finance`:

  ```
  'include: books.mystery.stephen_king, include: employee.finance.benefits'
  ```
+ Incluya todas las tablas de la base de datos `books` y el esquema `science_fiction`, excepto las que contengan la subcadena `king`:

  ```
  'include: books.science_fiction.*, exclude: books.*./.*king.*/
  ```
+ Incluya todas las tablas de la base de datos `books`, excepto las que tengan un nombre de esquema que comience por `sci`:

  ```
  'include: books.*.*, exclude: books./sci.*/.*'
  ```
+ Incluya todas las tablas de la base de datos `books`, excepto las que estén en el esquema `mystery` y acaben en `king`:

  ```
  'include: books.*.*, exclude: books.mystery./.*king/'
  ```
+ Incluya todas las tablas de la base de datos `books` que comiencen por `table_`, excepto la que se llama `table_stephen_king`. Por ejemplo, `table_movies` en el esquema `fiction` y `table_books` en el esquema `mystery` se replican, pero no `table_stephen_king` en ninguno de los dos esquemas:

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

## Adición de filtros de datos a una integración
<a name="zero-etl.add-filter"></a>

Puede configurar el filtrado de datos mediante la Consola de administración de AWS, la AWS CLI o la API de Amazon RDS. 

**importante**  
Si agrega un filtro después de crear una integración, Aurora lo trata como si hubiera existido siempre. Elimina todos los datos del almacén de datos de destino que no coincidan con los nuevos criterios de filtrado y vuelve a sincronizar todas las tablas afectadas.

### Consola de RDS
<a name="add-filter-console"></a>

**Adición de filtros de datos a una integración sin ETL**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. En el panel de navegación, elija **Integraciones sin ETL**. Seleccione la integración a la que desea agregar filtros de datos y, a continuación, elija **Modificar**.

1. En **Origen**, agregue una o más instrucciones `Include` y `Exclude`.

   En la imagen siguiente, se muestra un ejemplo de filtros de datos para una integración de MySQL:  
![\[Filtros de datos para una integración sin ETL en la consola de RDS\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/images/zero-etl-filter-data.png)

1. Cuando esté satisfecho con los cambios, elija **Continuar** y **Guardar cambios**.

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

Para agregar filtros de datos a una integración sin ETL mediante la AWS CLI, llame al comando [modify-integration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/rds/modify-integration.html). Además del identificador de integración, especifique el parámetro `--data-filter` con una lista separada por comas de filtros `Include` y `Exclude` Maxwell.

**Example**  
En el siguiente ejemplo, se agregan patrones de filtro a `my-integration`.  
Para Linux, macOS o 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 de RDS
<a name="add-filter-api"></a>

Para modificar una integración sin ETL mediante la API de RDS, llame a la operación [ModifyIntegration](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyIntegration.html). Especifique el identificador de integración y proporcione una lista separada por comas de patrones de filtro.

## Eliminación de filtros de datos de una integración
<a name="zero-etl.remove-filter"></a>

Al eliminar un filtro de datos de una integración, Aurora vuelve a evaluar los filtros restantes como si el filtro eliminado nunca hubiera existido. A continuación, replica en el almacén de datos de destino cualquier dato excluido anteriormente que ahora cumpla los criterios. Esto desencadena una nueva sincronización de todas las tablas afectadas.