Uso de Amazon Kinesis Data Streams como destino para AWS Database Migration Service - AWS Database Migration Service

Uso de Amazon Kinesis Data Streams como destino para AWS Database Migration Service

Puede utilizar AWS DMS para migrar datos a Amazon Kinesis Data Streams. Amazon Kinesis Data Streams forma parte del servicio de Amazon Kinesis Data Streams. Puede utilizar Kinesis Data Streams para recopilar y procesar grandes secuencias de registros de datos en tiempo real.

Un flujo de datos de Kinesis se compone de particiones. Las particiones son secuencias de registros de datos identificados inequívocamente en una secuencia. Para obtener más información sobre las particiones en Amazon Kinesis Data Streams, consulte Partición en la Guía para desarrolladores de Amazon Kinesis Data Streams.

AWS Database Migration Service publica registros en un flujo de datos de Kinesis mediante JSON. Durante la conversión, AWS DMS serializa cada registro de la base de datos de origen en un par de atributo-valor en formato JSON o en un formato de mensaje JSON_UNFORMATTED. Un formato de mensaje JSON_UNFORMATTED es una cadena JSON de una sola línea con un delimitador de nueva línea. Permite a Amazon Data Firehose enviar datos de Kinesis a un destino de Amazon S3 y consultar después estos datos mediante distintos motores de consulta, incluido Amazon Athena.

Puede utilizar el mapeo de objetos para migrar sus datos desde cualquier origen de datos admitido a una secuencia de destino. Con el mapeo de datos, se determina cómo se estructuran los registros de datos de la secuencia. También debe definir una clave de partición para cada tabla, que Kinesis Data Streams utiliza para agrupar los datos en particiones.

Cuando AWS DMS crea tablas en un punto de conexión de destino de Kinesis Data Streams, crea tantas tablas como haya en el punto de conexión de la base de datos de origen. AWS DMS también establece varios valores de parámetros de Kinesis Data Streams. El costo de la creación de la tabla depende de la cantidad de datos y del número de tablas que hay que migrar.

nota

La opción de modo SSL en la consola o la API de AWS DMS no se aplica a algunos servicios de flujo de datos y NoSQL, como Kinesis y DynamoDB. Son seguros de forma predeterminada, por lo que AWS DMS muestra que la configuración del modo SSL es igual a cero (Modo SSL=Ninguno). No necesita proporcionar ninguna configuración adicional para que el punto de conexión utilice SSL. Por ejemplo, cuando se utiliza Kinesis como punto de conexión de destino, es seguro de forma predeterminada. Todas las llamadas de la API a Kinesis utilizan SSL, por lo que no es necesaria una opción SSL adicional en el punto de conexión de AWS DMS. Puede colocar y recuperar datos de forma segura a través de puntos de conexión SSL mediante el protocolo HTTPS, que AWS DMS utiliza de forma predeterminada al conectarse a un flujo de datos de Kinesis.

Configuración del punto de conexión de Kinesis Data Streams

Cuando usa los puntos de conexión de destino de Kinesis Data Streams, puede obtener detalles sobre transacción y control mediante la opción KinesisSettings en la API de AWS DMS.

Puede configurar ajustes de conexión de las siguientes formas:

  • En la consola de AWS DMS, con la configuración del punto de conexión.

  • En la CLI, mediante la opción kinesis-settings del comando CreateEndpoint.

En la CLI, utilice los siguientes parámetros de solicitud de la opción de kinesis-settings:

nota

La compatibilidad con la configuración del punto de conexión de IncludeNullAndEmpty está disponible en la versión de AWS DMS 3.4.1 y superiores. Sin embargo, la compatibilidad con las siguientes configuraciones de punto de conexión para los destinos de Kinesis Data Streams está disponible en AWS DMS.

  • MessageFormat: el formato del resultado de los registros creados en el punto de conexión. El formato del mensaje es JSON (predeterminado) o JSON_UNFORMATTED (una sola línea sin tabulación).

  • IncludeControlDetails: muestra información detallada de control para la definición de tablas, la definición de columnas y los cambios de tablas y columnas en la salida del mensaje de Kinesis. El valor predeterminado es false.

  • IncludeNullAndEmpty: incluya columnas NULL y vacías en el objetivo. El valor predeterminado es false.

  • IncludePartitionValue: muestra el valor de partición dentro de la salida del mensaje de Kinesis, a menos que el tipo de partición sea schema-table-type. El valor predeterminado es false.

  • IncludeTableAlterOperations: incluye todas las operaciones de lenguaje de definición de datos (DDL) que cambien la tabla en los datos de control, como rename-table, drop-table, add-column, drop-column y rename-column. El valor predeterminado es false.

  • IncludeTransactionDetails: proporciona información detallada sobre transacciones de la base de datos de origen. Esta información incluye una marca temporal de confirmación, una posición de registro y valores para transaction_id, previous_transaction_id y transaction_record_id (el desplazamiento del registro dentro de una transacción). El valor predeterminado es false.

  • PartitionIncludeSchemaTable: agrega los nombres de los esquemas y de las tablas como prefijo a los valores de partición, cuando el tipo de partición es primary-key-type. Al hacerlo, aumenta la distribución de datos entre las particiones de Kinesis. Por ejemplo, supongamos que un esquema SysBench tiene miles de tablas y cada tabla tiene un rango limitado para una clave principal. En este caso, la misma clave principal se envía desde miles de tablas a la misma partición, lo que provoca la limitación controlada. El valor predeterminado es false.

En el siguiente ejemplo, se muestra la opción kinesis-settings en uso con un comando create-endpoint de ejemplo emitido mediante la AWS CLI.

aws dms create-endpoint --endpoint-identifier=$target_name --engine-name kinesis --endpoint-type target --region us-east-1 --kinesis-settings ServiceAccessRoleArn=arn:aws:iam::333333333333:role/dms-kinesis-role, StreamArn=arn:aws:kinesis:us-east-1:333333333333:stream/dms-kinesis-target-doc,MessageFormat=json-unformatted, IncludeControlDetails=true,IncludeTransactionDetails=true,IncludePartitionValue=true,PartitionIncludeSchemaTable=true, IncludeTableAlterOperations=true
Configuración de tareas de carga completa con varios subprocesos

Para ayudar a aumentar la velocidad de la transferencia, AWS DMS admite una carga completa con varios subprocesos a una instancia de destino de Kinesis Data Streams. DMS admite este multriproceso con configuración de tareas que incluyen lo siguiente:

  • MaxFullLoadSubTasks: utilice esta opción para indicar el número máximo de tablas de origen que se pueden cargar en paralelo. DMS carga cada tabla en su tabla de destino de Kinesis correspondiente mediante una tarea secundaria dedicada. El valor predeterminado es 8, el valor máximo es 49.

  • ParallelLoadThreads: utilice esta opción para especificar el número de procesos que AWS DMS utiliza para cargar cada tabla en su tabla de destino de Kinesis. El valor máximo para un objetivo de Kinesis Data Streams es 32. Puede pedir que se incremente este límite máximo.

  • ParallelLoadBufferSize: utilice esta opción para especificar el número máximo de registros para almacenar en el búfer que los subprocesos de carga en paralelo utilizan para cargar datos en el destino de Kinesis. El valor predeterminado es 50. El valor máximo es 1000. Utilice este parámetro con ParallelLoadThreads. ParallelLoadBufferSize es válido solo cuando hay más de un subproceso.

  • ParallelLoadQueuesPerThread: utilice esta opción para especificar el número de colas que acceden a cada subproceso simultáneo para eliminar los registros de datos de las colas y generar una carga por lotes para el destino. El valor predeterminado de es 1. Sin embargo, para los destinos de Kinesis de varios tamaños de carga, el intervalo válido es de 5-512 colas por subproceso.

Configuración de tareas de carga de CDC con varios subprocesos

Puede mejorar el rendimiento de la captura de datos de cambios (CDC) para los puntos de conexión de destino de flujo de datos en tiempo real como Kinesis mediante la configuración de tareas para modificar el comportamiento de la llamada a la API PutRecords. Para ello, puede especificar el número de subprocesos simultáneos, las colas por subproceso y el número de registros que se van a almacenar en un búfer mediante la configuración de tareas ParallelApply*. Suponga, por ejemplo, que desea realizar una carga de CDC y aplicar 128 subprocesos en paralelo. También desea acceder a 64 colas por subproceso, con 50 registros almacenados por búfer.

Para aumentar el rendimiento de CDC, AWS DMS admite esta configuración de las tareas:

  • ParallelApplyThreads: especifica el número de subprocesos simultáneos que utiliza AWS DMS durante una carga de CDC para insertar registros de datos en un punto de conexión de destino de Kinesis. El valor predeterminado es cero (0) y el valor máximo es 32.

  • ParallelApplyBufferSize: especifica el número máximo de registros que se almacenan en cada cola del búfer para los subprocesos simultáneos que insertan datos en un punto de conexión de destino de Kinesis durante una carga de CDC. El valor predeterminado es 100 y el máximo es 1000. Utilice esta opción cuando ParallelApplyThreads especifique más de un subproceso.

  • ParallelApplyQueuesPerThread: especifica el número de colas a las que accede cada subproceso para sacar registros de datos de las colas y generar una carga por lotes para un punto de conexión de Kinesis durante el proceso de CDC. El valor predeterminado es 1 y el máximo es 512.

Cuando se utiliza la configuración de tareas ParallelApply*, el valor predeterminado de partition-key-type es el valor de primary-key de la tabla, no el valor de schema-name.table-name.

Uso de una imagen anterior para consultar los valores originales de las filas de CDC de un flujo de datos de Kinesis como destino

Al escribir actualizaciones de CDC en un destino de flujo de datos como Kinesis, puede ver los valores originales de una fila de base de datos de origen antes de cambiar mediante una actualización. Para que esto sea posible, AWS DMS rellena una imagen anterior de los eventos de actualización basada en los datos proporcionados por el motor de base de datos de origen.

Los diferentes motores de base de datos de origen proporcionan diferentes cantidades de información para una imagen anterior:

  • Oracle proporciona actualizaciones a las columnas solo si cambian.

  • PostgreSQL proporciona datos solo para las columnas que forman parte de la clave principal (cambiadas o no). Para proporcionar datos para todas las columnas (cambiadas o no), debe establecer REPLICA_IDENTITY en FULL en lugar de DEFAULT. Tenga en cuenta que debe elegir cuidadosamente la configuración de REPLICA_IDENTITY para cada tabla. Si establece REPLICA_IDENTITY en FULL, todos los valores de las columnas se escriben en el registro antes de la escritura (WAL) de forma continua. Esto puede provocar problemas de rendimiento o de recursos en las tablas que se actualizan con frecuencia.

  • MySQL generalmente proporciona datos para todas las columnas excepto para los tipos de datos BLOB y CLOB (cambiadas o no).

Para habilitar imágenes anteriores para agregar valores originales de la base de datos de origen a la salida AWS DMS, utilice la configuración de tarea BeforeImageSettings o el parámetro add-before-image-columns. Este parámetro aplica una regla de transformación de columna.

BeforeImageSettings agrega un nuevo atributo JSON a cada operación de actualización con valores recopilados desde el sistema de base de datos de origen, como se muestra a continuación.

"BeforeImageSettings": { "EnableBeforeImage": boolean, "FieldName": string, "ColumnFilter": pk-only (default) / non-lob / all (but only one) }
nota

Solo se aplica BeforeImageSettings a tareas de AWS DMS que contienen un componente de CDC, como la carga completa más las tareas de CDC (que migran datos existentes y replican cambios en curso) o a tareas de solo CDC (que replican solo cambios de datos). No se aplica BeforeImageSettings a tareas que son solo de carga completa.

Para las opciones de BeforeImageSettings, se aplica lo siguiente:

  • Establezca la opción EnableBeforeImage para habilitar true antes de crear imágenes. El valor predeterminado es false.

  • Utilice la opción FieldName para asignar un nombre al nuevo atributo JSON. Cuando EnableBeforeImage es true, FieldName es necesario y no puede estar vacío.

  • La opción ColumnFilter especifica una columna para agregar mediante el uso de las imágenes anteriores. Para agregar solo columnas que forman parte de las claves principales de la tabla, utilice el valor predeterminado, pk-only. Para agregar cualquier columna que tenga un valor de imagen anterior, utilice all. Tenga en cuenta que la imagen anterior no contiene columnas con tipos de datos de LOB, como CLOB o BLOB.

    "BeforeImageSettings": { "EnableBeforeImage": true, "FieldName": "before-image", "ColumnFilter": "pk-only" }
nota

Los objetivos de Amazon S3 no admiten BeforeImageSettings. Para los destinos de S3, utilice solo la regla de transformación add-before-image-columns que debe realizarse antes de crear imágenes durante el CDC.

Uso de una regla de transformación de imagen anterior

Como alternativa a la configuración de tareas, puede utilizar el parámetro add-before-image-columns, que aplica una regla de transformación de columnas. Con este parámetro, puede habilitar imágenes anteriores durante CDC en destinos de flujo de datos como Kinesis.

Al utilizar add-before-image-columns en una regla de transformación, puede aplicar un control más detallado de los resultados de la imagen anterior. Las reglas de transformación permiten utilizar un localizador de objetos que le da control sobre las tablas seleccionadas para la regla. Además, puede encadenar reglas de transformación, lo que permite aplicar diferentes reglas a diferentes tablas. A continuación, puede manipular las columnas producidas utilizando otras reglas.

nota

No utilice el parámetro add-before-image-columns junto con la configuración de tarea BeforeImageSettings dentro de la misma tarea. En su lugar, utilice el parámetro o la configuración, pero no ambos, para una sola tarea.

Un tipo de regla transformation con el parámetro add-before-image-columns de una columna debe proporcionar una sección before-image-def. A continuación se muestra un ejemplo.

{ "rule-type": "transformation", … "rule-target": "column", "rule-action": "add-before-image-columns", "before-image-def":{ "column-filter": one-of (pk-only / non-lob / all), "column-prefix": string, "column-suffix": string, } }

El valor de column-prefix se antepone a un nombre de columna y el valor predeterminado de column-prefix es BI_. El valor de column-suffix se añade al nombre de la columna y el valor predeterminado está vacío. No configure ambas cadenas column-prefix y column-suffix como cadenas vacías.

Elija un valor para column-filter. Para agregar solo columnas que forman parte de las claves principales de la tabla, elija pk-only. Elija non-lob para agregar solo columnas que no sean de tipo LOB. O elija all para agregar cualquier columna que tenga un valor de imagen anterior.

Ejemplo de una regla de transformación de imagen anterior

La regla de transformación del siguiente ejemplo agrega una nueva columna llamada BI_emp_no en el destino. Entonces, una instrucción como UPDATE employees SET emp_no = 3 WHERE emp_no = 1; rellena el campo BI_emp_no con 1. Cuando escribe actualizaciones de CDC en destinos de Amazon S3, la columna BI_emp_no permite indicar qué fila original se actualizó.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "employees" }, "rule-action": "add-before-image-columns", "before-image-def": { "column-prefix": "BI_", "column-suffix": "", "column-filter": "pk-only" } } ] }

Para obtener información sobre el uso de la acción de regla add-before-image-columns, consulte Reglas y acciones de transformación.

Requisitos previos para el uso de un flujo de datos de Kinesis como destino para AWS Database Migration Service

Rol de IAM para el uso de un flujo de datos de Kinesis como destino para AWS Database Migration Service

Antes de configurar un flujo de datos de Kinesis como destino para AWS DMS, asegúrese de crear un rol de IAM. Este rol debe permitir a AWS DMS asumir y conceder acceso a Kinesis Data Streams que se va a migrar. El conjunto mínimo de permisos de acceso se muestra en la siguiente política de IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "Service": "dms.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

El rol que utilice para la migración a un flujo de datos de Kinesis debe tener los siguientes permisos.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": "arn:aws:kinesis:region:accountID:stream/streamName" } ] }

Acceder a un flujo de datos de Kinesis como destino para AWS Database Migration Service

En AWS DMS versión 3.4.7 y posteriores, para conectarse a un punto de conexión de Kinesis, debe realizar una de estas acciones:

Restricciones al usar Kinesis Data Streams como destino para AWS Database Migration Service

Al utilizar Kinesis Data Streams como destino se aplican las siguientes restricciones:

  • AWS DMS publica cada actualización en un solo registro de la base de datos de origen como un único registro de datos en un determinado flujo de datos de Kinesis, independientemente de las transacciones. Sin embargo, puede incluir detalles de transacción para cada registro de datos utilizando los parámetros pertinentes de la API KinesisSettings.

  • No se admite el modo LOB completo.

  • El tamaño de LOB máximo admitido es 1 MB.

  • Kinesis Data Streams no admite la desduplicación. Las aplicaciones que consumen datos de una secuencia necesitan ocuparse de los registros duplicados. Para obtener más información, consulte Gestión de registros duplicados en la Guía para desarrolladores de Amazon Kinesis Data Streams.

  • AWS DMS admite los dos formatos siguientes para las claves de partición:

    • SchemaName.TableName una combinación del nombre de esquema y de tabla.

    • ${AttributeName}: el valor de uno de los campos del archivo JSON o la clave principal de la tabla de la base de datos de origen.

  • Para obtener información sobre el cifrado de los datos en reposo en Kinesis Data Streams, consulte Protección de datos en Kinesis Data Streams en la Guía para desarrolladores de AWS Key Management Service.

  • BatchApply no es compatible con un punto de conexión de Kinesis. Es posible que el uso de la aplicación por lotes (por ejemplo, la configuración de tareas de metadatos de destino BatchApplyEnabled) para un objetivo de Kinesis provoque la pérdida de datos.

  • Los destinos de Kinesis solo se admiten para un flujo de datos de Kinesis en la misma cuenta de AWS y la misma Región de AWS que la instancia de replicación.

  • Al migrar desde un origen de MySQL, los datos de BeforeImage no incluyen los tipos de datos CLOB y BLOB. Para obtener más información, consulte Uso de una imagen anterior para consultar los valores originales de las filas de CDC de un flujo de datos de Kinesis como destino.

  • AWS DMS no admite la migración de valores de tipos de datos BigInt con más de 16 dígitos. Para evitar esta limitación, puede usar la siguiente regla de transformación para convertir la columna BigInt en una cadena. Para obtener más información sobre las reglas de transformación, consulte Reglas y acciones de transformación.

    { "rule-type": "transformation", "rule-id": "id", "rule-name": "name", "rule-target": "column", "object-locator": { "schema-name": "valid object-mapping rule action", "table-name": "", "column-name": "" }, "rule-action": "change-data-type", "data-type": { "type": "string", "length": 20 } }

Uso de la asignación de objetos para migrar datos a un flujo de datos de Kinesis

AWS DMS usa reglas de asignación de tablas para asignar datos del origen al flujo de datos de Kinesis de destino. Para asignar datos a una secuencia de destino, se utiliza un tipo de regla de mapeo de tablas denominada "object mapping". Puede utilizar la asignación de objetos para definir cómo los registros de datos del origen asignan a los registros de datos publicados en el flujo de datos de Kinesis.

Kinesis Data Streams no tiene una estructura predeterminada distinta de una clave de partición. En una regla de asignación de objetos, los valores posibles de partition-key-type para los registros de datos son schema-table, transaction-id, primary-key, constant y attribute-name.

Para crear una regla de mapeo de objetos, especifique rule-type como object-mapping. Esta regla indica el tipo de mapeo de objetos que desea utilizar.

La estructura de la regla es la siguiente.

{ "rules": [ { "rule-type": "object-mapping", "rule-id": "id", "rule-name": "name", "rule-action": "valid object-mapping rule action", "object-locator": { "schema-name": "case-sensitive schema name", "table-name": "" } } ] }

AWS DMS actualmente admite map-record-to-record y map-record-to-document como únicos valores válidos para el parámetro rule-action. Esta configuración afecta a los valores que no están excluidos como parte de la lista de atributos exclude-columns. Los valores map-record-to-record y map-record-to-document especifican cómo AWS DMS gestiona estos registros de forma predeterminada. Estos valores no afectan a los mapeos de atributos en modo alguno.

Utilice map-record-to-record al migrar desde una base de datos relacional a un flujo de datos de Kinesis. Este tipo de regla utiliza el valor taskResourceId.schemaName.tableName de la base de datos relacional como la clave de partición en el flujo de datos de Kinesis y crea un atributo para cada columna de la base de datos de origen.

Cuando utilice map-record-to-record, tenga en cuenta lo siguiente:

  • Esta configuración solo afecta a las columnas excluidas de la lista exclude-columns.

  • Para cada columna de este tipo, AWS DMS crea un atributo correspondiente en el tema de destino.

  • AWS DMS crea este atributo correspondiente independientemente de si la columna de origen se utiliza en una asignación de atributos.

Se utiliza map-record-to-document para colocar las columnas de origen en un único documento plano en la secuencia de destino correspondiente utilizando el nombre de atributo “_doc”. AWS DMS coloca los datos en un único mapa plano del origen denominado “_doc”. Esta colocación se aplica a cada columna de la tabla de origen que no se enumera en la lista de atributos exclude-columns.

Una forma de entender map-record-to-record es verlo en acción. En este ejemplo, imagine que empieza con una fila de una tabla de base de datos relacional con la estructura y los datos siguientes.

FirstName LastName StoreId HomeAddress HomePhone WorkAddress WorkPhone DateofBirth

Randy

Marsh

5

221B Baker Street

1234567890

31 Spooner Street, Quahog

9876543210

02/29/1988

Para migrar esta información desde un esquema denominado Test a un flujo de datos de Kinesis, debe crear reglas para asignar los datos a la secuencia de destino. La siguiente regla ilustra la operación de asignación.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "DefaultMapToKinesis", "rule-action": "map-record-to-record", "object-locator": { "schema-name": "Test", "table-name": "Customers" } } ] }

A continuación, se ilustra el formato de registro resultante en el flujo de datos de Kinesis:

  • Nombre de secuencia: XXX

  • Clave de partición: Test.Customers //schmaName.tableName

  • Datos: //El siguiente mensaje JSON

    { "FirstName": "Randy", "LastName": "Marsh", "StoreId": "5", "HomeAddress": "221B Baker Street", "HomePhone": "1234567890", "WorkAddress": "31 Spooner Street, Quahog", "WorkPhone": "9876543210", "DateOfBirth": "02/29/1988" }

Sin embargo, supongamos que utiliza las mismas reglas pero cambia el parámetro rule-action a map-record-to-document y excluye determinadas columnas. La siguiente regla ilustra la operación de asignación.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "DefaultMapToKinesis", "rule-action": "map-record-to-document", "object-locator": { "schema-name": "Test", "table-name": "Customers" }, "mapping-parameters": { "exclude-columns": [ "homeaddress", "homephone", "workaddress", "workphone" ] } } ] }

En este caso, las columnas que no aparecen en el parámetro exclude-columns, FirstName, LastName, StoreId y DateOfBirth, se asignan a _doc. A continuación, se ilustra el formato de registro resultante.

{ "data":{ "_doc":{ "FirstName": "Randy", "LastName": "Marsh", "StoreId": "5", "DateOfBirth": "02/29/1988" } } }

Reestructuración de datos con el mapeo de atributos

Puede reestructurar los datos mientras los migra a un flujo de datos de Kinesis mediante un mapa de atributos. Por ejemplo, es posible que desee combinar varios campos del origen en un único campo en el destino. El mapa de atributos siguiente ilustra cómo reestructurar los datos.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "rule-action": "include", "object-locator": { "schema-name": "Test", "table-name": "%" } }, { "rule-type": "object-mapping", "rule-id": "2", "rule-name": "TransformToKinesis", "rule-action": "map-record-to-record", "target-table-name": "CustomerData", "object-locator": { "schema-name": "Test", "table-name": "Customers" }, "mapping-parameters": { "partition-key-type": "attribute-name", "partition-key-name": "CustomerName", "exclude-columns": [ "firstname", "lastname", "homeaddress", "homephone", "workaddress", "workphone" ], "attribute-mappings": [ { "target-attribute-name": "CustomerName", "attribute-type": "scalar", "attribute-sub-type": "string", "value": "${lastname}, ${firstname}" }, { "target-attribute-name": "ContactDetails", "attribute-type": "document", "attribute-sub-type": "json", "value": { "Home": { "Address": "${homeaddress}", "Phone": "${homephone}" }, "Work": { "Address": "${workaddress}", "Phone": "${workphone}" } } } ] } } ] }

Para establecer un valor constante para partition-key, especifique un valor de partition-key. Tal vez desee hacer esto, por ejemplo, para obligar a que todos los datos se almacenen en una única partición. El siguiente mapeo ilustra este enfoque.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "object-mapping", "rule-id": "1", "rule-name": "TransformToKinesis", "rule-action": "map-record-to-document", "object-locator": { "schema-name": "Test", "table-name": "Customer" }, "mapping-parameters": { "partition-key": { "value": "ConstantPartitionKey" }, "exclude-columns": [ "FirstName", "LastName", "HomeAddress", "HomePhone", "WorkAddress", "WorkPhone" ], "attribute-mappings": [ { "attribute-name": "CustomerName", "value": "${FirstName},${LastName}" }, { "attribute-name": "ContactDetails", "value": { "Home": { "Address": "${HomeAddress}", "Phone": "${HomePhone}" }, "Work": { "Address": "${WorkAddress}", "Phone": "${WorkPhone}" } } }, { "attribute-name": "DateOfBirth", "value": "${DateOfBirth}" } ] } } ] }
nota

El valor partition-key de un registro de control para una tabla específica es TaskId.SchemaName.TableName. El valor partition-key de un registro de control para una tabla específica es el TaskId de ese registro. La especificación de un valor partition-key en el mapeo de objetos no tiene ningún efecto en el elemento partition-key de un registro de control.

Formato de mensaje para Kinesis Data Streams

La salida JSON es simplemente una lista de pares de clave-valor. Un formato de mensaje JSON_UNFORMATTED es una cadena JSON de una sola línea con un delimitador de nueva línea.

AWS DMS proporciona los siguientes campos reservados para facilitar el consumo de datos desde Kinesis Data Streams:

RecordType

El tipo de registro puede ser de datos o de control. Los registros de datos representan las filas reales en el origen. Los registros de control son para eventos importantes de la secuencia como, por ejemplo, el reinicio de una tarea.

Operación

Para los registros de datos, la operación puede ser load, insert, update o delete.

Para los registros de control, la operación puede ser create-table, rename-table, drop-table, change-columns, add-column, drop-column, rename-column o column-type-change.

SchemaName

El esquema de origen del registro. Este campo puede estar vacío para un registro de control.

TableName

La tabla de origen del registro. Este campo puede estar vacío para un registro de control.

Timestamp

La marca temporal que indica cuándo se creó el mensaje JSON. El campo está formateado con el formato ISO 8601.