Uso de Amazon S3 como fuente de AWS DMS - AWS Database Migration Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de Amazon S3 como fuente de AWS DMS

Puede migrar datos desde un bucket de Amazon S3 mediante AWS DMS. Para ello, proporcione acceso a un bucket de Amazon S3 que contenga uno o varios archivos de datos. En ese bucket de S3 incluya un archivo JSON que describa el mapeo entre los datos y las tablas de la base de datos de los datos de esos archivos.

Los archivos de datos de origen deben estar en el bucket de Amazon S3 antes de que comience la carga completa. El nombre del bucket se especifica mediante el parámetro bucketName.

Los archivos de datos de origen pueden tener los siguientes formatos:

Para los archivos de datos de origen en formato de valores separados por comas (.csv), asígneles un nombre según la siguiente convención de nomenclatura. En esta convención, schemaName es el esquema de origen y tableName es el nombre de una tabla dentro de dicho esquema.

/schemaName/tableName/LOAD001.csv /schemaName/tableName/LOAD002.csv /schemaName/tableName/LOAD003.csv ...

Por ejemplo, supongamos que los archivos de datos están en mybucket, en la siguiente ruta de Amazon S3.

s3://mybucket/hr/employee

En el momento de la carga, se AWS DMS supone que el nombre del esquema de origen es hr y que el nombre de la tabla de origen es. employee

Además bucketName (obligatorio), puede proporcionar opcionalmente un bucketFolder parámetro para especificar dónde AWS DMS deben buscarse los archivos de datos en el bucket de Amazon S3. Continuando con el ejemplo anterior, si se establece bucketFolder ensourcedata, AWS DMS lee los archivos de datos en la siguiente ruta.

s3://mybucket/sourcedata/hr/employee

Puede especificar el delimitador de columnas, el delimitador de filas, el indicador de valor nulo y otros parámetros mediante los atributos de conexión adicionales. Para obtener más información, consulte Configuración de puntos de conexión para Amazon S3 como fuente de AWS DMS.

Puede especificar el propietario de un bucket y evitar saqueos mediante la configuración del punto de conexión de Amazon S3 ExpectedBucketOwner, como se muestra a continuación. A continuación, cuando realice una solicitud para probar una conexión o realizar una migración, S3 comprobará el ID de cuenta del propietario del bucket con el parámetro especificado.

--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'

Definir tablas externas para Amazon S3 como fuente de AWS DMS

Además de los archivos de datos, debe indicar también una definición de tabla externa. Una definición de tabla externa es un documento JSON que describe cómo se AWS DMS deben interpretar los datos de Amazon S3. El tamaño máximo de este documento es de 2 MB. Si crea un punto final de origen mediante la consola AWS DMS de administración, puede introducir el JSON directamente en el cuadro de mapeo de tablas. Si utilizas AWS Command Line Interface (AWS CLI) o la AWS DMS API para realizar migraciones, puedes crear un archivo JSON para especificar la definición de la tabla externa.

Supongamos que tiene un archivo de datos que contiene la información siguiente.

101,Smith,Bob,2014-06-04,New York 102,Smith,Bob,2015-10-08,Los Angeles 103,Smith,Bob,2017-03-13,Dallas 104,Smith,Bob,2017-03-13,Dallas

A continuación se muestra un ejemplo de definición de tabla externa para estos datos.

{ "TableCount": "1", "Tables": [ { "TableName": "employee", "TablePath": "hr/employee/", "TableOwner": "hr", "TableColumns": [ { "ColumnName": "Id", "ColumnType": "INT8", "ColumnNullable": "false", "ColumnIsPk": "true" }, { "ColumnName": "LastName", "ColumnType": "STRING", "ColumnLength": "20" }, { "ColumnName": "FirstName", "ColumnType": "STRING", "ColumnLength": "30" }, { "ColumnName": "HireDate", "ColumnType": "DATETIME" }, { "ColumnName": "OfficeLocation", "ColumnType": "STRING", "ColumnLength": "20" } ], "TableColumnsTotal": "5" } ] }

Los elementos de este documento JSON son los siguientes:

TableCount: el número de tablas de origen. En este ejemplo, solo hay una tabla.

Tables: una matriz que consta de un mapa JSON por tabla de origen. En este ejemplo, solo hay un mapa. Cada mapa está formado por los siguientes elementos:

  • TableName: el nombre de la tabla de origen.

  • TablePath: la ruta del bucket de Amazon S3 donde AWS DMS puede encontrar el archivo de carga de datos completa. Si se especifica un valor bucketFolder, el valor se anexa delante de la ruta.

  • TableOwner: nombre del esquema para esta tabla.

  • TableColumns: una matriz de uno o varios mapas, en la que cada mapa describe una columna de la tabla de origen:

    • ColumnName: el nombre de una columna de la tabla de origen.

    • ColumnType: el tipo de datos de la columna. Para consultar los tipos de datos válidos, vea Tipos de datos de origen de Amazon S3.

    • ColumnLength: el número de bytes de esta columna. La longitud máxima de las columnas está limitada a 2147483647 bytes (2.047 MegaBytes), ya que una fuente de S3 no admite el modo FULL LOB. ColumnLengthes válido para los siguientes tipos de datos:

      • BYTE

      • STRING

    • ColumnNullable: valor booleano que es true si esta columna puede contener valores NULL (predeterminado=false).

    • ColumnIsPk: un valor booleano que es true si esta columna es parte de la clave principal (predeterminado=false).

    • ColumnDateFormat: el formato de fecha de entrada de una columna con los tipos DATE, TIME y DATETIME, y se utiliza para analizar una cadena de datos y convertirla en un objeto de fecha. Los valores posibles son:

      - YYYY-MM-dd HH:mm:ss - YYYY-MM-dd HH:mm:ss.F - YYYY/MM/dd HH:mm:ss - YYYY/MM/dd HH:mm:ss.F - MM/dd/YYYY HH:mm:ss - MM/dd/YYYY HH:mm:ss.F - YYYYMMdd HH:mm:ss - YYYYMMdd HH:mm:ss.F
  • TableColumnsTotal: el número total de columnas. Este número debe coincidir con el número de elementos de la matriz TableColumns.

Si no especifica lo contrario, se AWS DMS supone que ColumnLength es cero.

nota

En las versiones compatibles de AWS DMS, los datos de origen de S3 también pueden contener una columna de operaciones opcional como primera columna antes del valor de la TableName columna. Esta columna de operación identifica la operación (INSERT) utilizada para migrar los datos a un punto de enlace de destino S3 durante una carga completa.

Si está presente, el valor de esta columna es el carácter inicial de la INSERTpalabra clave de operación (I). Si se especifica, esta columna generalmente indica que el origen S3 fue creado por DMS como un destino S3 durante una migración anterior.

En versiones anteriores a 3.4.2 de DMS, esta columna no estaba presente en los datos de origen de S3 creados a partir de una carga completa de DMS anterior. Agregar esta columna a los datos de destino S3 permite que el formato de todas las filas escritas en el objetivo S3 sea coherente, ya sea que se escriban durante una carga completa o durante una carga CDC. Para obtener más información acerca de las opciones para el formateo de datos de destino de S3, consulte Indicar operaciones de base de datos de origen en datos de S3 migrados.

Para una columna de tipo NUMERIC, especifique la precisión y la escala. Precisión es el número total de dígitos de un número y escala es el número de dígitos situados a la derecha de la coma decimal. Utilice los elementos ColumnPrecision y ColumnScale para esto, tal y como se muestra a continuación.

... { "ColumnName": "HourlyRate", "ColumnType": "NUMERIC", "ColumnPrecision": "5" "ColumnScale": "2" } ...

Para una columna del tipo DATETIME con datos que contienen fracciones de segundos, especifique la escala. La escala es el número de dígitos de las fracciones de segundo y puede oscilar entre 0 y 9. Utilice el elemento de ColumnScale para esto, tal y como se muestra a continuación.

... { "ColumnName": "HireDate", "ColumnType": "DATETIME", "ColumnScale": "3" } ...

Si no especifica lo contrario, AWS DMS asume que ColumnScale es cero y trunca las fracciones de segundo.

Uso de CDC con Amazon S3 como origen para AWS DMS

Después de AWS DMS realizar una carga de datos completa, puede replicar opcionalmente los cambios de datos en el punto final de destino. Para ello, debe cargar archivos de captura de datos de cambios (archivos CDC) en su bucket de Amazon S3. AWS DMS lee estos archivos CDC cuando los carga y, a continuación, aplica los cambios en el punto final de destino.

Las archivos CDC se denominan de la forma siguiente:

CDC00001.csv CDC00002.csv CDC00003.csv ...
nota

Para poder replicar archivos de CDC correctamente en la carpeta de datos de cambios, cárguelos por orden léxico (secuencial). Por ejemplo, cargue el archivo CDC00002.csv antes que el archivo CDC00003.csv. De lo contrario, CDC00002.csv se omitirá y no se replicará si lo carga después de CDC00003.csv. Sin embargo, el archivo CDC00004.csv sí se replicará correctamente si se carga después de CDC00003.csv.

Para indicar dónde AWS DMS puede encontrar los archivos, especifique el cdcPath parámetro. Prosiguiendo con el ejemplo anterior, si establece cdcPath en changedata, entonces AWS DMS leerá los archivos de CDC en la ruta siguiente.

s3://mybucket/changedata

Si establece cdcPath en changedata y bucketFolder en myFolder, AWS DMS lee los archivos CDC en la siguiente ruta.

s3://mybucket/myFolder/changedata

Los registros de un archivo CDC se formatean de la siguiente manera:

  • Operación: la operación de cambio que realizar: INSERT o I, UPDATE o U o DELETE o D. Estos valores de palabras clave y caracteres no distinguen entre mayúsculas y minúsculas.

    nota

    En AWS DMS las versiones compatibles, AWS DMS puede identificar la operación a realizar para cada registro de carga de dos maneras. AWS DMS puede hacerlo a partir del valor de la palabra clave del registro (por ejemplo,INSERT) o desde el carácter inicial de la palabra clave (por ejemplo,I). En versiones anteriores, AWS DMS reconocía la operación de carga solo a partir del valor completo de la palabra clave.

    En versiones anteriores de AWS DMS, el valor completo de la palabra clave se escribía para registrar los datos de los CDC. Además, las versiones anteriores escribieron el valor de la operación en cualquier destino de S3 utilizando solo la inicial de la palabra clave.

    Reconocer ambos formatos AWS DMS permite gestionar la operación independientemente de cómo se escriba la columna de operaciones para crear los datos de origen de S3. Este enfoque admite el uso de datos de destino de S3 como origen para una migración posterior. Con este enfoque, no necesita cambiar el formato de ningún valor inicial de palabra clave que aparezca en la columna de operación de la fuente S3 posterior.

  • Nombre de tabla: el nombre de la tabla de origen.

  • Nombre de esquema: el nombre del esquema de origen.

  • Datos: una o varias columnas que representan los datos que se van a cambiar.

A continuación se muestra un ejemplo de un archivo CDC para una tabla con el nombre employee.

INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas

Requisitos previos al utilizar Amazon S3 como fuente de AWS DMS

Para utilizar Amazon S3 como fuente AWS DMS, el bucket de S3 de origen debe estar en la misma AWS región que la instancia de replicación de DMS que migra los datos. Además, la cuenta de AWS que utiliza para la migración debe tener acceso de lectura al bucket de origen. Para la AWS DMS versión 3.4.7 y versiones posteriores, el DMS debe acceder al bucket de origen a través de un punto final de VPC o una ruta pública. Para obtener información sobre los puntos de enlace de VPC, consulte. Configuración de puntos de conexión de VPC como puntos de conexión de origen y destino de AWS DMS

El rol AWS Identity and Access Management (IAM) asignado a la cuenta de usuario utilizada para crear la tarea de migración debe tener el siguiente conjunto de permisos.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

El rol AWS Identity and Access Management (IAM) asignado a la cuenta de usuario utilizada para crear la tarea de migración debe tener el siguiente conjunto de permisos si el control de versiones está habilitado en el bucket de Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "S3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

Limitaciones al usar Amazon S3 como fuente de AWS DMS

Las siguientes limitaciones se aplican cuando se utiliza Amazon S3 como origen:

  • No habilite el control de versiones para S3. Si necesita el control de versiones de S3, utilice las políticas de ciclo de vida para eliminar activamente las versiones antiguas. De lo contrario, es posible que se produzcan errores en la conexión de las pruebas de punto de conexión debido al tiempo de espera de una llamada a list-object de S3. Para crear una política de ciclo de vida para un bucket de S3, consulte Administración del ciclo de vida del almacenamiento. Para eliminar una versión de un objeto de S3, consulte Eliminación de versiones de objetos de un bucket con control de versiones habilitado.

  • En las versiones 3.4.7 y superiores se admite un bucket S3 habilitado para VPC (VPC de puerta de enlace).

  • MySQL convierte el tipo time de datos en. string Para ver los valores de los tipos de time datos en MySQL, defina la columna de la tabla de destino como string y establezca la configuración del modo de preparación de la tabla de destino de la tarea en Truncar.

  • AWS DMS usa el tipo BYTE de datos internamente para los datos de ambos tipos BYTE de BYTES datos.

  • Los puntos finales de origen de S3 no admiten la función de recarga de tablas del DMS.

  • AWS DMS no admite el modo LOB completo con Amazon S3 como fuente.

Se aplican las siguientes limitaciones cuando se utilizan archivos con formato Parquet en Amazon S3 como fuente:

  • Las fechas están incluidas MMYYYYDD o no DDMMYYYY son compatibles con la función de particionamiento de fechas de S3 Parquet Source.

Configuración de puntos de conexión para Amazon S3 como fuente de AWS DMS

Puede utilizar la configuración de punto de conexión para configurar la base de datos de origen de Amazon S3 de forma similar al uso de atributos de conexión adicionales. Los ajustes se especifican al crear el punto final de origen mediante la AWS DMS consola o mediante el create-endpoint comando incluido AWS CLIen la sintaxis --s3-settings '{"EndpointSetting": "value", ...}' JSON.

La siguiente tabla muestra la configuración de punto de conexión que puede utilizar con Amazon S3 como origen.

Opción Descripción
BucketFolder

(Opcional) Nombre de carpeta en el bucket de S3. Si se proporciona este atributo, los archivos de datos de origen y los archivos de CDC se leen desde la ruta s3://myBucket/bucketFolder/schemaName/tableName/ y s3://myBucket/bucketFolder/ respectivamente. Si no se especifica este atributo, la ruta utilizada es schemaName/tableName/.

'{"BucketFolder": "sourceData"}'

BucketName

Nombre del bucket de S3.

'{"BucketName": "myBucket"}'

CdcPath La ubicación de los archivos de CDC. Este atributo es obligatorio si una tarea captura datos de cambios; de lo contrario, es opcional. Si CdcPath está presente, AWS DMS lee los archivos CDC de esta ruta y replica los cambios de datos en el punto final de destino. Para obtener más información, consulte Uso de CDC con Amazon S3 como origen para AWS DMS.

'{"CdcPath": "changeData"}'

CsvDelimiter

Delimitador utilizado para separar columnas en los archivos de origen. El valor predeterminado es una coma. Ejemplo:

'{"CsvDelimiter": ","}'

CsvNullValue

Cadena definida por el usuario que se AWS DMS considera nula cuando se lee desde la fuente. El valor predeterminado es una cadena vacía. Si no establece este parámetro, AWS DMS trata una cadena vacía como un valor nulo. Si establece este parámetro en una cadena como «\ N», AWS DMS trata esta cadena como un valor nulo y trata las cadenas vacías como un valor de cadena vacío.

CsvRowDelimiter

Delimitador utilizado para separar filas en los archivos de origen. El valor predeterminado es una nueva línea (\n).

'{"CsvRowDelimiter": "\n"}'

DataFormat

Establezca este valor en Parquet para leer los datos en formato Parquet.

'{"DataFormat": "Parquet"}'

IgnoreHeaderRows

Si este valor se establece en 1, AWS DMS ignora el encabezado de la primera fila de un archivo.csv. Un valor de 1 habilita la característica, un valor de 0 deshabilita la característica.

El valor predeterminado es 0.

'{"IgnoreHeaderRows": 1}'

Rfc4180

Cuando este valor se establece en true o y, las comillas dobles de inicio tienen que ir seguidas de comillas dobles finales. Este formato cumple con RFC 4180. Cuando este valor se establece en false o n, los literales de cadena se copian en el destino tal cual. En este caso, un delimitador (fila o columna) señala el final del campo. Por lo tanto, no puede utilizar un delimitador como parte de la cadena, ya que señala el final del valor.

El valor predeterminado es true.

Valores válidos: true, false, y, n

'{"Rfc4180": false}'

Tipos de datos de origen de Amazon S3

Migración de datos que utiliza Amazon S3 como fuente para AWS DMS las necesidades de mapear datos de Amazon S3 a tipos de AWS DMS datos. Para obtener más información, consulte Definir tablas externas para Amazon S3 como fuente de AWS DMS.

Para obtener más información sobre cómo ver el tipo de datos que se asigna en el destino, consulte la sección del punto de enlace de destino que esté utilizando.

Para obtener información adicional sobre AWS DMS los tipos de datos, consulteTipos de datos de AWS Database Migration Service.

Los siguientes tipos de AWS DMS datos se utilizan con Amazon S3 como fuente:

Uso de archivos con formato Parquet en Amazon S3 como fuente para AWS DMS

En la AWS DMS versión 3.5.3 y posteriores, puede usar archivos con formato Parquet en un bucket de S3 como fuente tanto para la replicación a carga completa como para la replicación CDC.

DMS solo admite archivos en formato Parquet como fuente que DMS genera al migrar los datos a un punto final de destino de S3. Los nombres de los archivos deben estar en el formato compatible o DMS no los incluirá en la migración.

En el caso de los archivos de datos fuente en formato Parquet, deben estar en la carpeta y la convención de nomenclatura siguientes.

schema/table1/LOAD00001.parquet schema/table2/LOAD00002.parquet schema/table2/LOAD00003.parquet

En el caso de los archivos de datos fuente de los CDC en formato Parquet, asígneles un nombre y guárdelos utilizando la siguiente carpeta y convención de nomenclatura.

schema/table/20230405-094615814.parquet schema/table/20230405-094615853.parquet schema/table/20230405-094615922.parquet

Para acceder a los archivos en formato Parquet, defina la siguiente configuración de punto final:

  • Establezca DataFormat en Parquet.

  • No defina la cdcPath configuración. Asegúrese de crear los archivos con formato Parquet en las carpetas de esquemas o tablas especificadas.

Para obtener más información sobre la configuración de los puntos finales de S3, consulte S3Settings en la referencia de la API.AWS Database Migration Service

Tipos de datos compatibles con los archivos con formato Parquet

AWS DMS admite los siguientes tipos de datos de origen y destino al migrar datos de archivos con formato Parquet. Asegúrese de que la tabla de destino tenga columnas con los tipos de datos correctos antes de realizar la migración.

Tipo de datos de origen Tipo de datos de destino
BYTE BINARY
DATE DATE32
TIME TIME32
DATETIME TIMESTAMP
INT1 INT8
INT2 INT16
INT4 INT32
INT8 INT64
NUMERIC DECIMAL
REAL4 FLOAT
REAL8 DOUBLE
STRING STRING
UINT1 UINT8
UINT2 UINT16
UINT4 UINT32
UINT8 UINT
WSTRING STRING
BLOB BINARY
NCLOB STRING
CLOB STRING
BOOLEAN BOOL