Utilizar expressões de regra de transformação para definir o conteúdo da coluna - AWS Database Migration Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Utilizar expressões de regra de transformação para definir o conteúdo da coluna

Para definir o conteúdo de colunas novas e existentes, é possível utilizar uma expressão em uma regra de transformação. Por exemplo, utilizando expressões, é possível adicionar uma coluna ou replicar cabeçalhos de tabela de origem para um destino. Também é possível utilizar expressões para sinalizar registros em tabelas de destino como inseridos, atualizados ou excluídos na origem.

Adicionar uma coluna utilizando uma expressão

Para adicionar colunas a tabelas utilizando uma expressão em uma regra de transformação, utilize uma ação de regra add-column e um destino de regra column.

O exemplo a seguir adiciona uma nova coluna à tabela ITEM. Ele define o nome da nova coluna como FULL_NAME, com um tipo de dados de string, com 50 caracteres. A expressão concatena os valores de duas colunas existentes, FIRST_NAME e LAST_NAME, para avaliar para FULL_NAME. Os parâmetros schema-name e table-name e de expressão se referem aos objetos na tabela do banco de dados de origem. Value e o bloco data-type se referem aos objetos na tabela do banco de dados 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 } } ] }

Sinalizar registros de destino utilizando uma expressão

Para sinalizar registros em tabelas de destino como inseridos, atualizados ou excluídos na tabela de origem, utilize uma expressão em uma regra de transformação. A expressão utiliza um perfil operation_indicator para sinalizar registros. Os registros excluídos da origem não são excluídos do destino. Em vez disso, o registro de destino é sinalizado com um valor fornecido pelo usuário para indicar que ele foi excluído da origem.

nota

O perfil operation_indicator funciona somente em tabelas que têm uma chave primária no banco de dados de origem e de destino.

Por exemplo, a regra de transformação a seguir primeiro adiciona uma nova coluna Operation à uma tabela de destino. Ela atualiza a coluna com o valor D sempre que um registro for excluído de uma tabela de origem.

{ "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 } }

Replicar cabeçalhos de tabela de origem utilizando expressões

Por padrão, os cabeçalhos das tabelas de origem não são replicados no destino. Para indicar quais cabeçalhos a serem replicados, utilize uma regra de transformação com uma expressão que inclua o cabeçalho da coluna da tabela.

É possível utilizar os cabeçalhos de coluna a seguir em expressões.

Cabeçalho Valor na replicação contínua Valor na carga completa Tipo de dados
AR_H_STREAM_POSITION O valor da posição do streaming da origem. Esse valor pode ser o número de alterações do sistema (SCN) ou o número de sequência de log (LSN), dependendo do endpoint de origem. Uma string vazia. STRING
AR_H_TIMESTAMP Um time stamp indicando a hora da alteração. Um timestamp indicando a hora atual em que os dados chegam ao destino. DATETIME (escala=7)
AR_H_COMMIT_TIMESTAMP Um time stamp indicando a hora da confirmação. Um time stamp indicando a hora atual. DATETIME (escala=7)
AR_H_OPERATION INSERT, UPDATE ou DELETE INSERT STRING
AR_H_USER O nome de usuário, ID ou qualquer outra informação fornecida pela origem sobre o usuário que fez a alteração.

Esse cabeçalho tem suporte somente nos endpoints de origem SQL Server e Oracle (versão 11.2.0.3 e posterior).

A transformação que você deseja aplicar ao objeto. As ações de regra de transformação diferenciam maiúsculas e minúsculas. STRING
AR_H_CHANGE_SEQ Um número de incremento exclusivo do banco de dados de origem que consiste em um timestamp e em um número de incremento automático. O valor depende do sistema do banco de dados de origem. Uma string vazia. STRING

O exemplo a seguir adiciona uma nova coluna ao destino utilizando o valor da posição do fluxo da origem. Para o SQL Server, o valor da posição do fluxo é o LSN do endpoint de origem. Para o Oracle, o valor da posição do fluxo é o SCN do endpoint de origem.

{ "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 } }

O exemplo a seguir adiciona uma nova coluna ao destino que tem um número incremental exclusivo da origem. Esse valor representa um número exclusivo de 35 dígitos no nível da tarefa. Os primeiros 16 dígitos fazem parte de um timestamp e os últimos 19 dígitos são o número de record_id incrementado pelo 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 } }

Utilizar perfis do SQLite para criar expressões

Utilize as configurações da tabela para especificar quaisquer configurações que deseja aplicar à tabela ou à visualização selecionada para uma operação especificada. As regras de configuração de tabela são opcionais.

nota

Em vez do conceito de tabelas e visualizações, os bancos de dados MongoDB e DocumentDB armazenam os registros de dados como documentos reunidos em coleções. Portanto, ao migrar de uma origem do MongoDB ou do DocumentDB, considere o tipo de segmentação por intervalo das configurações de carga paralela para coleções selecionadas, em vez de tabelas e visualizações.

A seguir, você encontrará perfis de string que podem ser utilizadas para criar expressões de regras de transformação.

Funções de string Descrição

lower(x)

O perfil lower(x) retorna uma cópia da string x com todos os caracteres convertidos em minúsculas. O padrão, o perfil lower integrado funciona somente para caracteres ASCII.

upper(x)

O perfil upper(x) retorna uma cópia da string x com todos os caracteres convertidos em maiúsculas. O padrão, o perfil upper integrado funciona somente para caracteres ASCII.

ltrim(x,y)

O perfil ltrim(x,y) retorna uma string formada pela remoção de todos os caracteres que aparecem em y do lado esquerdo de x. Se não houver nenhum valor para y, ltrim(x) removerá os espaços do lado esquerdo de x.

replace(x,y,z)

O perfil replace(x,y,z) retorna uma string formada pela substituição da string z de cada ocorrência da string y na string x.

rtrim(x,y)

O perfil rtrim(x,y) retorna uma string formada pela remoção de todos os caracteres que aparecem em y do lado direito de x. Se não houver nenhum valor para y, rtrim(x) removerá os espaços do lado direito de x.

substr(x,y,z)

O perfil substr(x,y,z) retorna uma substring da string de entrada x que começa com o yº caractere e tem z caracteres.

Se z for omitido, substr(x,y) retornará todos os caracteres até o final da string x começando com o caractere yº. O caractere mais à esquerda de x é o número 1. Se y for negativo, o primeiro caractere da substring será encontrado contando a partir da direita em vez da esquerda. Se z for negativo, os caracteres abs(z) anteriores ao yº caractere serão retornados. Se x for uma string, os índices de caracteres se referem aos caracteres UTF-8 reais. Se x for um BLOB, os índices se referirão a bytes.

trim(x,y)

O perfil trim(x,y) retorna uma string formada pela remoção de todos os caracteres que aparecem em y do dois lados de x. Se não houver nenhum valor para y, trim(x) removerá os espaços dos dois lados de x.

A seguir, é possível encontrar perfis de LOB que podem ser utilizados para criar expressões de regras de transformação.

Perfis de LOB Descrição

hex(x)

O perfil hex recebe um BLOB como argumento e retorna uma versão de string hexadecimal em maiúsculas do conteúdo do BLOB.

randomblob (N)

O perfil randomblob(N) retorna um BLOB de N-bytes que contém bytes pseudoaleatórios. Se N for menor que 1, um BLOB aleatório de 1 byte será retornado.

zeroblob(N)

O perfil zeroblob(N) retorna um BLOB que consiste em N bytes de 0x00.

A seguir, é possível encontrar perfis numéricos que podem ser utilizados para criar expressões de regras de transformação.

Perfis numéricos Descrição

abs(x)

O perfil abs(x) retorna o valor absoluto do argumento numérico x. O perfil abs(x) retornará NULL se x for NULL. O perfil abs(x) retornará 0,0 se x for uma string ou BLOB que não pode ser convertido em um valor numérico.

random()

O perfil random retorna um número inteiro pseudoaleatório entre -9.223.372.036.854.775.808 e +9.223.372.036.854.775.807.

round (x,y)

O perfil round (x,y) retorna um valor de ponto flutuante x arredondado para y dígitos à direita do ponto decimal. Se não houver nenhum valor para y, presume-se que ele seja 0.

max (x,y...)

O perfil max de multiargumento retorna o argumento com o valor máximo ou retorna NULL se algum argumento for NULL.

O perfil max pesquisa seus argumentos da esquerda para a direita em busca de um argumento que defina um perfil de agrupamento. Se um for encontrado, ele utilizará esse perfil de agrupamento para todas as comparações de strings. Se nenhum dos argumentos para max definir um perfil de agrupamento, o perfil de agrupamento BINARY será utilizado. O perfil max é simples quando há dois ou mais argumentos, mas funciona como um perfil agregado se tiver um único argumento.

min (x,y...)

O perfil min de multiargumento retorna o argumento com o valor mínimo.

O perfil min pesquisa seus argumentos da esquerda para a direita em busca de um argumento que defina um perfil de agrupamento. Se um for encontrado, ele utilizará esse perfil de agrupamento para todas as comparações de strings. Se nenhum dos argumentos para min definir um perfil de agrupamento, o perfil de agrupamento BINARY será utilizado. O perfil min é simples quando há dois ou mais argumentos, mas funciona como um perfil agregado se tiver um único argumento.

A seguir, é possível encontrar perfis de verificação de NULL que podem ser utilizados para criar expressões de regras de transformação.

Perfis de verificação NULL Descrição

coalesce (x,y...)

O perfil coalesce retorna uma cópia do primeiro argumento não NULL, mas retornará NULL se todos os argumentos forem NULL. O perfil de agrupamento tem pelo menos dois argumentos.

ifnull(x,y)

O perfil ifnull retorna uma cópia do primeiro argumento não NULL, mas retornará NULL se os dois argumentos forem NULL. O perfil ifnull tem exatamente dois argumentos. O perfil ifnull é igual a coalesce com dois argumentos.

nullif(x,y)

O perfil nullif(x,y) retornará uma cópia do primeiro argumento se os argumentos forem diferentes, mas retornará NULL se os argumentos forem iguais.

O perfil nullif(x,y) pesquisa seus argumentos da esquerda para a direita em busca de um argumento que defina um perfil de agrupamento. Se um for encontrado, ele utilizará esse perfil de agrupamento para todas as comparações de strings. Se nenhum dos argumentos nullif definir um perfil de agrupamento, o perfil de agrupamento BINARY será utilizado.

A seguir, é possível encontrar perfis de data e hora que podem ser utilizados para criar expressões de regras de transformação.

Perfis de data e hora Descrição

date(timestring, modifier, modifier...)

O perfil date retorna a data no formato DD-MM-AAAA.

time(timestring, modifier, modifier...)

O perfil time retorna a hora no formato HH:MM:SS.

datetime(timestring, modifier, modifier...)

O perfil datetime retorna a data e a hora no formato DD-MM-AAAA HH:MM:SS.

julianday(timestring, modifier, modifier...)

O perfil julianday retorna o número de dias desde o meio-dia em Greenwich em 24 de novembro de 4714 a.C.

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

O perfil strftime retorna a data de acordo com a string de formato especificada como o primeiro argumento, utilizando uma das seguintes variáveis:

%d: dia do mês

%H: hora 00 a 24

%f: ** segundos fracionários SS.SSS

%j: dia do ano 001 a 366

%J: ** número do dia juliano

%m: mês 1 a 12

%M: minuto 00 a 59

%s: segundos desde 1-1-1970

%S: segundos 00 a 59

%w: dia da semana 0 a 6 domingo==0

%W: semana do ano 00 a 53

%Y: ano 0000 a 9999

%%: %

A seguir, é possível encontrar um perfil de hash que pode ser utilizado para criar expressões de regras de transformação.

Função de hash Descrição

hash_sha256(x)

O perfil hash gera um valor de hash para uma coluna de entrada (utilizando o algoritmo SHA-256) e retorna o valor hexadecimal do valor de hash gerado.

Para utilizar o perfil hash em uma expressão, adicione hash_sha256(x) à expressão e substitua x pelo nome da coluna de origem.

Utilizar uma expressão CASE

A expressão CASE do SQLite avalia uma lista de condições e retorna uma expressão com base no resultado. A sintaxe é mostrada a seguir.

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

Exemplos

exemplo de adição de uma nova coluna de string à tabela de destino utilizando uma condição de caso

O seguinte exemplo de regra de transformação adiciona uma nova coluna string, emp_seniority, à tabela de destino, employee. Ele utiliza o perfil round do SQLite na coluna de salário, com uma condição de caso para verificar se o salário é igual ou superior a 20.000. Se isso acontecer, a coluna obterá o valor SENIOR e qualquer outra coisa terá o 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 } }
exemplo da adição de uma nova coluna de data à tabela de destino

O exemplo a seguir adiciona uma nova coluna de data, createdate, à tabela de destino, employee. Quando você utiliza o perfil datetime de data do SQLite, a data é adicionada à tabela recém-criada para cada linha inserida.

{ "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 } }
exemplo da adição de uma nova coluna numérica à tabela de destino

O exemplo a seguir adiciona uma nova coluna numérica, rounded_emp_salary, à tabela de destino, employee. Ele utiliza o perfil round do SQLite para adicionar o salário arredondado.

{ "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" } }
exemplo da adição de uma nova coluna string à tabela de destino utilizando o perfil hash

O exemplo a seguir adiciona uma nova coluna string, hashed_emp_number, à tabela de destino, employee. O perfil hash_sha256(x) do SQLite cria valores com hash no destino para a coluna de origem, 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 } }

Adicionar metadados a uma tabela de destino utilizando expressões

É possível adicionar informações de metadados à tabela de destino utilizando as seguintes expressões:

  • $AR_M_SOURCE_SCHEMA: o nome do esquema de origem.

  • $AR_M_SOURCE_TABLE_NAME: o nome da tabela de origem.

  • $AR_M_SOURCE_COLUMN_NAME: o nome de uma coluna na tabela de origem.

  • $AR_M_SOURCE_COLUMN_DATATYPE: o tipo de dados de uma coluna na tabela de origem.

exemplo da adição de uma coluna para um nome de esquema utilizando o nome do esquema da origem

O exemplo a seguir adiciona uma nova coluna schema_name ao destino utilizando o nome do esquema da origem.

{ "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 } }