Uso de expresiones de regla de transformación para definir el contenido de columnas - 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 expresiones de regla de transformación para definir el contenido de columnas

Para definir contenido para columnas nuevas y existentes, puede utilizar una expresión dentro de una regla de transformación. Por ejemplo, mediante expresiones puede agregar una columna o replicar encabezados de tabla de origen a un destino. También puede utilizar expresiones para marcar registros en tablas de destino como insertados, actualizados o eliminados en el origen.

Agregar una columna mediante una expresión

Para agregar columnas a tablas mediante una expresión en una regla de transformación, utilice una acción de regla add-column y un destino de regla column.

En el ejemplo siguiente se agrega una nueva columna a la tabla ITEM. Establece el nuevo nombre de columna en FULL_NAME, con un tipo de datos de string, 50 caracteres de longitud. La expresión concatena los valores de dos columnas existentes, FIRST_NAME y LAST_NAME, para evaluar FULL_NAME. Los parámetros schema-name, table-name y de expresión hacen referencia a los objetos de la tabla de la base de datos de origen. Value y el bloque data-type hacen referencia a los objetos en la tabla de la base de datos de destino.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "Test", "table-name": "ITEM" }, "value": "FULL_NAME", "expression": "$FIRST_NAME||'_'||$LAST_NAME", "data-type": { "type": "string", "length": 50 } } ] }

Marcar registros de destino mediante una expresión

Para marcar los registros de las tablas de destino como insertados, actualizados o eliminados en la tabla de origen, utilice una expresión en una regla de transformación. La expresión utiliza una función operation_indicator para marcar registros. Los registros eliminados del origen no se eliminan del destino. En su lugar, el registro de destino se marca con un valor proporcionado por el usuario para indicar que se eliminó del origen.

nota

La función operation_indicator solo funciona en tablas que tienen una clave principal en la base de datos de origen y destino.

Por ejemplo, la siguiente regla de transformación agrega primero una nueva columna Operation a una tabla de destino. A continuación, actualiza la columna con el valor D cada vez que se elimina un registro de una tabla de origen.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "Operation", "expression": "operation_indicator('D', 'U', 'I')", "data-type": { "type": "string", "length": 50 } }

Replicación de encabezados de tablas de origen mediante expresiones

De forma predeterminada, los encabezados de las tablas de origen no se replican en el destino. Para indicar qué encabezados replicar, utilice una regla de transformación con una expresión que incluya el encabezado de columna de tabla.

Puede utilizar los siguientes encabezados de columna en expresiones.

Encabezado Valor en la replicación continua Valor en carga completa Tipo de datos
AR_H_STREAM_POSITION El valor de posición del flujo desde el origen. Este valor puede ser el número de cambio del sistema (SCN) o el número de secuencia de registro (LSN), dependiendo del punto de enlace de origen. Una cadena vacía. STRING
AR_H_TIMESTAMP Una marca de tiempo que indica la hora del cambio. Una marca temporal que indica la hora actual en que los datos llegan al destino. DATETIME (escala=7)
AR_H_COMMIT_TIMESTAMP Una marca de tiempo que indica la hora de la confirmación. Una marca de tiempo que indica la hora actual. DATETIME (escala=7)
AR_H_OPERATION INSERT, UPDATE, o DELETE INSERT STRING
AR_H_USER Nombre de usuario, ID o cualquier otra información que el origen proporciona sobre el usuario que realizó el cambio.

Este encabezado solo se admite en los puntos de enlace de origen de SQL Server y Oracle (versión 11.2.0.3 y superior).

La transformación que desea aplicar al objeto. Las acciones de las reglas de transformación distinguen entre mayúsculas y minúsculas. STRING
AR_H_CHANGE_SEQ Un número de incremento único de la base de datos de origen que consta de una marca temporal y un número de incremento automático. El valor depende del sistema de base de datos de origen. Una cadena vacía. STRING

En el ejemplo siguiente se agrega una nueva columna al destino mediante el valor de posición de flujo del origen. Para SQL Server, el valor de posición de flujo es el LSN para el punto de conexión de origen. Para Oracle, el valor de posición de flujo es el SCN para el punto de conexión de origen.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "transact_id", "expression": "$AR_H_STREAM_POSITION", "data-type": { "type": "string", "length": 50 } }

El siguiente ejemplo agrega una nueva columna al destino que tiene un número creciente único del origen. Este valor representa un número único de 35 dígitos en el nivel de tarea. Los primeros 16 dígitos forman parte de una marca temporal y los últimos 19 dígitos son el número record_id incrementado por DBMS.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "transact_id", "expression": "$AR_H_CHANGE_SEQ", "data-type": { "type": "string", "length": 50 } }

Uso de funciones de SQLite para crear expresiones

Puede utilizar table-settings para especificar cualquier configuración que desee aplicar a la tabla o vista seleccionada para una operación específica. Las reglas de table-settings son opcionales.

nota

En lugar del concepto de tablas y vistas, las bases de datos MongoDB y DocumentDB almacenan los registros de datos como documentos que se agrupan en recopilaciones. Por lo tanto, al migrar desde un origen de MongoDB o DocumentDB, considere el tipo de segmentación por rango de la configuración de carga paralela para recopilaciones seleccionadas en lugar de tablas y vistas.

A continuación, encontrará funciones de cadena que puede utilizar para crear expresiones de reglas de transformación.

Funciones de cadena Descripción

lower(x)

La función lower(x) devuelve una copia de la cadena x con todos los caracteres convertidos a minúsculas. La función lower integrada de forma predeterminada solo funciona con caracteres ASCII.

upper(x)

La función upper(x) devuelve una copia de la cadena x con todos los caracteres convertidos a mayúsculas. La función upper integrada de forma predeterminada solo funciona con caracteres ASCII.

ltrim(x,y)

La función ltrim(x,y) devuelve una cadena formada al eliminar todos los caracteres que aparecen en y desde el lado izquierdo de x. Si no hay ningún valor para y, ltrim(x) elimina los espacios del lado izquierdo de x.

replace(x,y,z)

La función replace(x,y,z) devuelve una cadena formada al sustituir la cadena z por cada aparición de la cadena y en la cadena x.

rtrim(x,y)

La función rtrim(x,y) devuelve una cadena formada al eliminar todos los caracteres que aparecen en y desde el lado derecho de x. Si no hay ningún valor para y, rtrim(x) elimina los espacios del lado derecho de x.

substr(x,y,z)

La función substr(x,y,z) devuelve una subcadena de la cadena de entrada x que comienza con el carácter y y que tiene una longitud de z caracteres.

Si z se omite, substr(x,y) devuelve todos los caracteres hasta el final de la cadena que x comienza por el carácter y. El carácter situado más a la izquierda de x es el número 1. Si y es negativo, el primer carácter de la subcadena se encuentra contando desde la derecha y no desde la izquierda. Si z es negativo, se devuelven los caracteres abs(z) que preceden al carácter y. Si x es una cadena, los índices de los caracteres se refieren a los caracteres UTF-8 reales. Si x es un BLOB, los índices se refieren a bytes.

trim(x,y)

La función trim(x,y) devuelve una cadena formada al eliminar todos los caracteres que aparecen en y desde ambos lados de x. Si no hay ningún valor para y, trim(x) elimina los espacios desde ambos lados de x.

A continuación, puede encontrar funciones de LOB que puede utilizar para crear expresiones de reglas de transformación.

Funciones de LOB Descripción

hex(x)

La función hex recibe un BLOB como argumento y devuelve una versión de cadena hexadecimal en mayúscula del contenido del BLOB.

randomblob (N)

La función randomblob(N) devuelve un BLOB de N bytes que contiene bytes pseudoaleatorios. Si N es menor que 1, se devuelve un BLOB aleatorio de 1 byte.

zeroblob(N)

La función zeroblob(N) devuelve un BLOB que consta de N bytes de 0x00.

A continuación, puede encontrar funciones numéricas que puede utilizar para crear expresiones de reglas de transformación.

Funciones numéricas Descripción

abs(x)

La función abs(x) devuelve el valor absoluto del argumento numérico x. La función abs(x) devuelve NULL si x es NULL. La función abs(x) devuelve 0.0 si x es una cadena o un BLOB que no se puede convertir en un valor numérico.

random()

La función random devuelve un entero pseudoaleatorio comprendido entre -9,223,372,036,854,775,808 y +9,223,372,036,854,775,807.

round (x,y)

La función round (x,y) devuelve un valor de coma flotante x redondeado a y dígitos a la derecha de la coma decimal. Si no hay ningún valor para y, se supone que es 0.

max (x,y...)

La función max de multiargumento devuelve el argumento con el valor máximo o devuelve NULL si algún argumento es NULL.

La función max busca en sus argumentos de izquierda a derecha un argumento que defina una función de clasificación. Si encuentra uno, utiliza esa función de clasificación para todas las comparaciones de cadenas. Si ninguno de los argumentos en max define una función de clasificación, se utiliza la función de clasificación BINARY. La función max es simple cuando tiene dos o más argumentos, pero funciona como una función agregada si tiene un solo argumento.

min (x,y...)

La función min multiargumento devuelve el argumento con el valor mínimo.

La función min busca en sus argumentos de izquierda a derecha un argumento que defina una función de clasificación. Si encuentra uno, utiliza esa función de clasificación para todas las comparaciones de cadenas. Si ninguno de los argumentos en min define una función de clasificación, se utiliza la función de clasificación BINARY. La función min es simple cuando tiene dos o más argumentos, pero funciona como una función agregada si tiene un solo argumento.

A continuación, puede encontrar funciones de comprobación NULL que puede utilizar para crear expresiones de reglas de transformación.

Funciones de comprobación NULL Descripción

coalesce (x,y...)

La función coalesce devuelve una copia de su primer argumento distinto de NULL, pero devuelve NULL si todos los argumentos son NULL. La función de unión tiene al menos dos argumentos.

ifnull(x,y)

La función ifnull devuelve una copia del primer argumento distinto de NULL, pero devuelve NULL si todos los argumentos son NULL. La función ifnull tiene exactamente dos argumentos. La función ifnull es la misma que coalesce con dos argumentos.

nullif(x,y)

La función nullif(x,y) devuelve una copia del primer argumento si los argumentos son diferentes, pero devuelve NULL si los argumentos son iguales.

La función nullif(x,y) busca en sus argumentos de izquierda a derecha un argumento que defina una función de clasificación. Si encuentra uno, utiliza esa función de clasificación para todas las comparaciones de cadenas. Si ninguno de los argumentos en nullif define una función de clasificación, se utiliza la función de clasificación BINARY.

A continuación, puede encontrar funciones de fecha y hora que puede utilizar para crear expresiones de reglas de transformación.

Funciones de fecha y hora Descripción

date(timestring, modifier, modifier...)

La función date devuelve la fecha en el formato AAAA-MM-DD.

time(timestring, modifier, modifier...)

La función time devuelve la hora en el formato HH:MM:SS.

datetime(timestring, modifier, modifier...)

La función datetime devuelve la fecha y la hora en el formato AAAA-MM-DD HH:MM:SS.

julianday(timestring, modifier, modifier...)

La función julianday devuelve el número de días transcurridos desde el mediodía en Greenwich el 24 de noviembre de 4714 a. C.

strftime(format, timestring, modifier, modifier...)

La función strftime devuelve la fecha según la cadena de formato especificada como primer argumento y utiliza una de las siguientes variables:

%d: día del mes

%H: hora 00-24

%f: ** fracciones de segundo SS.SSS

%j: día del año de 001 a 366

%J: ** número de día juliano

%m: mes 01-12

%M: minuto 00-59

%s: segundos desde 1970-01-01

%S: segundos 00-59

%w: día de la semana 0–6 domingo==0

%W: semana del año 00-53

%Y: año 0000-9999

%%: %

A continuación, puede encontrar una función de inserción que puede utilizar para crear expresiones de reglas de transformación.

Función de inserción Descripción

hash_sha256(x)

La función hash genera un valor de inserción para una columna de entrada (mediante el algoritmo SHA-256) y devuelve el valor hexadecimal del valor de inserción generado.

Para usar la función hash en una expresión, agregue hash_sha256(x) a la expresión y sustituya x por el nombre de la columna de origen.

Uso de una expresión CASE

La expresión CASE de SQLite evalúa una lista de condiciones y devuelve una expresión basada en el resultado. La sintaxis se muestra a continuación.

CASE case_expression WHEN when_expression_1 THEN result_1 WHEN when_expression_2 THEN result_2 ... [ ELSE result_else ] END # Or CASE WHEN case_expression THEN result_1 WHEN case_expression THEN result_2 ... [ ELSE result_else ] END

Ejemplos

ejemplo de agregar una nueva columna de cadenas a la tabla de destino mediante una condición que distingue entre mayúsculas y minúsculas

La siguiente regla de transformación de ejemplo agrega una nueva columna de cadena, emp_seniority, a la tabla de destino, employee. Utiliza la función round de SQLite en la columna de salarios, con una condición que distingue entre mayúsculas y minúsculas para comprobar si el salario es igual o superior a 20 000. Si es así, la columna obtiene el valor SENIOR y cualquier otra columna tiene el valor JUNIOR.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "emp_seniority", "expression": " CASE WHEN round($emp_salary)>=20000 THEN ‘SENIOR’ ELSE ‘JUNIOR’ END", "data-type": { "type": "string", "length": 50 } }
ejemplo de agregar una nueva columna de fecha a la tabla de destino

En el ejemplo siguiente se agrega una nueva columna de fecha, createdate, a la tabla de destino, employee. Al utilizar la función datetime de fecha de SQLite, la fecha se agrega a la tabla recién creada por cada fila insertada.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "createdate", "expression": "datetime ()", "data-type": { "type": "datetime", "precision": 6 } }
ejemplo de agregar una nueva columna numérica a la tabla de destino

En el ejemplo siguiente se agrega una nueva columna numérica, rounded_emp_salary, a la tabla de destino, employee. Utiliza la función round de SQLite para agregar el salario redondeado.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "rounded_emp_salary", "expression": "round($emp_salary)", "data-type": { "type": "int8" } }
ejemplo de agregar una nueva columna de cadenas a la tabla de destino mediante la función de inserción

En el ejemplo siguiente se agrega una nueva columna de cadena, hashed_emp_number, a la tabla de destino, employee. La función hash_sha256(x) de SQLite crea valores de inserción en el destino para la columna de origen, emp_number.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "public", "table-name": "employee" }, "value": "hashed_emp_number", "expression": "hash_sha256($emp_number)", "data-type": { "type": "string", "length": 64 } }

Agregar metadatos a una tabla de destino mediante expresiones

Puede agregar la información de los metadatos a la tabla de destino mediante las siguientes expresiones:

  • $AR_M_SOURCE_SCHEMA: el nombre del esquema de origen.

  • $AR_M_SOURCE_TABLE_NAME: el nombre de la tabla de origen.

  • $AR_M_SOURCE_COLUMN_NAME: el nombre de una columna de la tabla de origen.

  • $AR_M_SOURCE_COLUMN_DATATYPE: el tipo de datos de una columna en la tabla de origen.

ejemplo de agregar una columna para un nombre de esquema mediante el nombre de esquema del origen

En el ejemplo siguiente se agrega una nueva columna denominada schema_name al destino mediante el nombre de esquema del origen.

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "add-column", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value":"schema_name", "expression": "$AR_M_SOURCE_SCHEMA", "data-type": { "type": "string", "length": 50 } }