Regras de transformação e ações - 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á.

Regras de transformação e ações

As ações de transformação são utilizadas para especificar as transformações que você deseja aplicar ao esquema, à tabela ou à visualização selecionada. As regras da transformação são opcionais.

Limitações

  • Não é possível aplicar mais de uma ação de regra de transformação ao mesmo objeto (esquema, tabela, coluna, espaço para tabela de tabela ou espaço para tabela de índice). É possível aplicar várias ações de regra de transformação em qualquer nível, desde que cada ação de transformação seja aplicada em um objeto diferente.

  • Os nomes de tabelas e de colunas nas regras de transformação diferenciam maiúsculas de minúsculas. Por exemplo, você deve fornecer nomes de tabelas e nomes de colunas para um banco de dados Oracle ou Db2 em letras maiúsculas.

  • As transformações não são compatíveis com nomes de colunas com idiomas da direita para a esquerda.

  • As transformações não podem ser executadas em colunas que contenham caracteres especiais (por exemplo, #, \, /, -) em seu nome.

  • A única transformação compatível com colunas mapeadas para tipos de dados BLOB/CLOB é descartar a coluna no destino.

  • AWS DMS não oferece suporte à replicação de duas tabelas de origem em uma única tabela de destino. AWS DMS replica registros de tabela em tabela e de coluna em coluna, de acordo com as regras de transformação da tarefa de replicação. Os nomes dos objetos devem ser exclusivos para evitar sobreposição.

    Por exemplo, uma tabela de origem tem uma coluna chamada ID e a tabela de destino correspondente tem uma coluna preexistente chamada id. Se uma regra utilizar uma instrução ADD-COLUMN para adicionar uma nova coluna chamada id, e uma instrução SQLite para preencher a coluna com valores personalizados, isso criará um objeto duplicado e ambíguo chamado id e não é compatível.

  • Ao criar uma regra de transformação, recomendamos usar o data-type parâmetro somente quando as regras de seleção column-name especificarem várias colunas, por exemplo, quando você define como%. Não recomendamos o uso data-type para selecionar uma única coluna.

Valores

Os seguintes valores podem ser aplicados a regras de mapeamento de tabela que utilizam o tipo de regra de transformação

Parâmetro Possíveis valores Descrição
rule-type transformation Um valor que aplica a regra a cada objeto especificado pela regra de seleção. Utilize transformation a menos que especificado de outra forma.
rule-id Um valor numérico. Um valor numérico exclusivo para identificar a regra. Se você especificar várias regras de transformação para o mesmo objeto (esquema, tabela, coluna, espaço entre tabelas ou espaço de tabela de índice), AWS DMS aplique a regra de transformação com o ID de regra inferior.
rule-name Um valor alfanumérico. Um nome exclusivo para identificar a regra.
object-locator Um objeto com os seguintes parâmetros:
  • schema-name: o nome do esquema. Para endpoints MongoDB e Amazon DocumentDB, esse é o nome do banco de dados que contém um conjunto de coleções.

  • table-name: o nome da tabela, visualização ou coleção.

  • table-tablespace-name: o nome de um espaço para tabela de tabela existente.

  • index-tablespace-name: o nome de um espaço para tabela de índice existente.

  • column-name: o nome de uma coluna existente.

  • data-type: o nome de um tipo de dados de coluna existente.

O nome de cada esquema, tabela ou visualização, espaço de tabela de tabela, espaço de tabela de índice e coluna aos quais a regra se aplica. É possível utilizar o sinal de porcentagem "%" como um curinga para todo ou parte do valor de cada parâmetro object-locator, exceto data-type. Assim, você pode corresponder estes itens:

  • Uma única tabela ou exibição em um único esquema

  • Uma única tabela ou exibição em alguns ou todos os esquemas

  • Algumas ou todas as tabelas e exibições em um único esquema

  • Algumas ou todas as tabelas e exibições em alguns ou todos os esquemas

  • Uma ou mais colunas na tabela ou tabelas especificadas, na exibição ou exibições e no esquema ou esquemas.

  • Recomendamos usar o data-type parâmetro somente quando as regras de seleção column-name especificarem várias colunas, por exemplo, quando você define como%. Não recomendamos usar esse parâmetro para uma única coluna.

Além disso, o parâmetro index-tablespace-name ou table-tablespace-name está disponível apenas para corresponder a um endpoint de origem do Oracle. É possível especificar table-tablespace-name ou index-tablespace-name em uma única regra, mas não os dois. Portanto, é possível corresponder qualquer um dos itens a seguir:

  • Um, alguns ou todos os espaços de tabela de tabela

  • Um, alguns ou todos os espaços de tabela de índice

rule-action

add-column, include-column, remove-column

rename

convert-lowercase, convert-uppercase

add-prefix, remove-prefix, replace-prefix

add-suffix, remove-suffix, replace-suffix

define-primary-key

change-data-type

add-before-image-columns

A transformação que você quer aplicar ao objeto. Todas as ações de regra de transformação diferenciam maiúsculas e minúsculas.

O valor de add-column do parâmetro rule-action adiciona uma coluna a uma tabela. Mas você não pode adicionar uma nova coluna com o mesmo nome de uma coluna já existente da mesma tabela.

Quando utilizado com os parâmetros expression e data-type, add-column especifica o valor de novos dados da coluna.

O valor de change-data-type para rule-action só está disponível para destinos de regras de column.

O valor include-column do parâmetro rule-action altera o modo da tabela para descartar todas as colunas por padrão e incluir as colunas especificadas. Várias colunas são incluídas no destino com a invocação da regra include-column várias vezes.

Não é possível utilizar uma regra define-primary-key quando a regra tem um curinga (%) em um nome de esquema ou de tabela.

Para uma tarefa existente, as ações da regra de transformação que alteram o esquema da tabela de destino, como remove-column, rename ou add-prefix, não entrarão em vigor enquanto você não reiniciar a tarefa. Se você retomar a tarefa depois de adicionar a regra de transformação, poderá observar um comportamento inesperado na coluna alterada, que pode incluir dados ausentes da coluna. É necessário reiniciar a tarefa para garantir que a regra de transformação funcione corretamente.

rule-target schema, table, column, table-tablespace, index-tablespace O tipo de objeto que você está transformando.

Os valores index-tablespace e table-tablespace estão disponíveis somente para um endpoint de destino do Oracle.

Especifique um valor para o parâmetro especificado como parte do object-locator: nome table-tablespace-name ou index-tablespace-name.

value Um valor alfanumérico que segue as regras de nomenclatura do tipo de destino. O novo valor de ações que exigem entrada, como rename.
old-value Um valor alfanumérico que segue as regras de nomenclatura do tipo de destino. O antigo valor de ações que exigem substituição, como replace-prefix.
data-type

type: o tipo de dados a ser utilizado se rule-action for add-column ou o tipo de dados de substituição se rule-action for change-data-type.

Ou, o nome do tipo de dados de substituição quando rule-action for change-data-type, o valor de column-name é "%", e um parâmetro data-type adicional para identificar o tipo de dados existente está incluído no object-locator.

AWS DMS suporta transformações de tipo de dados de coluna para os seguintes tipos de dados do DMS: "bytes", "date", "time", "datetime", "int1", "int2", "int4", "int8", "numeric", "real4", "real8", "string", "uint1", "uint2", "uint4", "uint8", "wstring", "blob", "nclob", "clob", "boolean", "set", "list" "map", "tuple"

precision: se a coluna adicionada ou o tipo de dados de substituição tiver uma precisão, um valor inteiro para especificar a precisão.

scale: se a coluna adicionada ou o tipo de dados de substituição tiver uma escala, um valor inteiro ou um valor de data e hora para especificar a escala.

length: o tamanho dos dados da nova coluna (quando utilizado com add-column)

Veja a seguir um exemplo de um parâmetro data-type para especificar o tipo de dados existente a ser substituído.

{ "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": "test", "table-name": "table_t", "column-name": "col10" }, "rule-action": "change-data-type", "data-type": { "type": "string", "length": "4092", "scale": "" } } ] }

Aqui, a coluna col10 da tabela table_t é alterada para o tipo de dados string.

expression Um valor alfanumérico que segue a sintaxe SQLite.

Quando utilizado com a rule-action definida como rename-schema, o parâmetro expression especifica um novo esquema. Quando utilizado com a rule-action definida como rename-table, expression especifica uma nova tabela. Quando utilizado com a rule-action definida como rename-column, expression especifica um novo valor de nome de coluna.

Quando utilizado com a rule-action definida como add-column, expression especifica dados que compõem uma nova coluna.

Observe que somente expressões são compatíveis com esse parâmetro. Os operadores e os comandos são incompatíveis.

Para obter mais informações sobre como utilizar expressões para regras de transformação, consulte Utilizar expressões de regra de transformação para definir o conteúdo da coluna.

Para obter mais informações sobre expressões SQLite, consulte Utilizar perfis do SQLite para criar expressões.

primary-key-def

Um objeto com os seguintes parâmetros:

  • name: o nome de uma nova chave primária ou índice exclusivo para a tabela ou visualização.

  • (Opcional) origin: o tipo de chave exclusiva a ser definida: primary-key (o padrão) ou unique-index.

  • columns: uma matriz de strings que lista os nomes de colunas na ordem em que aparecem na chave primária ou índice exclusivo.

Esse parâmetro pode definir o nome, o tipo e o conteúdo de uma chave exclusiva na tabela ou visualização transformada. Ele faz isso quando a rule-action é definida como define-primary-key e o rule-target é definido como table. Por padrão, a chave exclusiva é definida como uma chave primária.
before-image-def

Um objeto com os seguintes parâmetros:

  • column-prefix: um valor que precede um nome de coluna. O valor padrão é BI_.

  • column-suffix: um valor acrescentado ao nome da coluna. O padrão é vazio.

  • column-filter: requer um dos seguintes valores: pk-only (padrão), non-lob (opcional) e all (opcional).

Esse parâmetro define uma convenção de nomenclatura para identificar as colunas de imagem anterior e especifica um filtro para identificar quais colunas de origem podem ter colunas de imagem anterior criadas para elas no destino. É possível especificar esse parâmetro quando a rule-action é definida como add-before-image-columns e o rule-target é definido como column.

Não defina column-prefix e column-suffix como strings vazias.

Para column-filter, selecione:

  • pk-only: para adicionar somente colunas que façam parte das chaves primárias da tabela.

  • non-lob: para adicionar somente colunas que não sejam do tipo LOB.

  • all: para adicionar qualquer coluna que tenha um valor de imagem anterior.

Para obter mais informações sobre suporte a imagem anterior para endpoints de destino do AWS DMS , consulte:

Exemplos

exemplo Renomear um esquema

O exemplo a seguir renomeia um esquema de Test na origem para Test1 no 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": "rename", "rule-target": "schema", "object-locator": { "schema-name": "Test" }, "value": "Test1" } ] }
exemplo Renomeação de uma tabela

O exemplo a seguir renomeia uma tabela de Actor na origem para Actor1 no 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": "rename", "rule-target": "table", "object-locator": { "schema-name": "Test", "table-name": "Actor" }, "value": "Actor1" } ] }
exemplo Renomeação de uma coluna

O exemplo a seguir renomeia uma coluna na tabela Actor de first_name na origem para fname no 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": "4", "rule-name": "4", "rule-action": "rename", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name" : "first_name" }, "value": "fname" } ] }
exemplo Renomear um espaço de tabela da tabela do Oracle

O exemplo a seguir renomeia o espaço de tabela denominado SetSpace para uma tabela denominada Actor na origem do Oracle para SceneTblSpace no endpoint de destino do Oracle.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Play", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "Play", "table-name": "Actor", "table-tablespace-name": "SetSpace" }, "value": "SceneTblSpace" } ] }
exemplo Renomear um espaço de tabela de índice do Oracle

O exemplo a seguir renomeia o espaço de tabela de índice denominado SetISpace para uma tabela denominada Actor na origem do Oracle para SceneIdxSpace no endpoint de destino do Oracle.

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Play", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "rename", "rule-target": "table-tablespace", "object-locator": { "schema-name": "Play", "table-name": "Actor", "table-tablespace-name": "SetISpace" }, "value": "SceneIdxSpace" } ] }
exemplo Adicionar uma coluna

O exemplo a seguir adiciona uma coluna datetime à tabela Actor no esquema test.

{ "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": "actor" }, "value": "last_updated", "data-type": { "type": "datetime", "precision": 6 } } ] }
exemplo Remover uma coluna

O exemplo a seguir transforma a tabela Actor na origem para remover todas as colunas que começam com os caracteres col no 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": "remove-column", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name": "col%" } }] }
exemplo Converter para minúsculas

O exemplo a seguir converte o nome de uma tabela de ACTOR na origem em actor no 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": "convert-lowercase", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "ACTOR" } }] }
exemplo Converter em maiúsculas

O exemplo a seguir converte todas as colunas em todas as tabelas e todos os esquemas de minúsculas, na origem, para maiúsculas, no 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": "convert-uppercase", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "%" } } ] }
exemplo Adicionar um prefixo

O exemplo a seguir transforma todas as tabelas na origem para adicionar o prefixo DMS_ a elas no 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-prefix", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "%" }, "value": "DMS_" }] }
exemplo Substituir um prefixo

O exemplo a seguir transforma todas as colunas contendo o prefixo Pre_ na origem para substituí-lo por NewPre_ no 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": "replace-prefix", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%", "column-name": "%" }, "value": "NewPre_", "old-value": "Pre_" } ] }
exemplo Remover um sufixo

O exemplo a seguir transforma todas as tabelas na origem para remover o sufixo _DMS delas no 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": "remove-suffix", "rule-target": "table", "object-locator": { "schema-name": "test", "table-name": "%" }, "value": "_DMS" }] }
exemplo Definir uma chave primária

O exemplo a seguir define uma chave primária denominada ITEM-primary-key em três colunas da tabela ITEM migradas para o endpoint de destino.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "inventory", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "define-primary-key", "rule-target": "table", "object-locator": { "schema-name": "inventory", "table-name": "ITEM" }, "primary-key-def": { "name": "ITEM-primary-key", "columns": [ "ITEM-NAME", "BOM-MODEL-NUM", "BOM-PART-NUM" ] } }] }
exemplo Definir um índice exclusivo

O exemplo a seguir define um índice exclusivo denominado ITEM-unique-idx em três colunas da tabela ITEM migradas para o endpoint de destino.

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "inventory", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "define-primary-key", "rule-target": "table", "object-locator": { "schema-name": "inventory", "table-name": "ITEM" }, "primary-key-def": { "name": "ITEM-unique-idx", "origin": "unique-index", "columns": [ "ITEM-NAME", "BOM-MODEL-NUM", "BOM-PART-NUM" ] } }] }
exemplo Alterar o tipo de dados da coluna de destino

O exemplo a seguir altera o tipo de dados de uma coluna de destino chamada SALE_AMOUNT de um tipo de dados existente para int8.

{ "rule-type": "transformation", "rule-id": "1", "rule-name": "RuleName 1", "rule-action": "change-data-type", "rule-target": "column", "object-locator": { "schema-name": "dbo", "table-name": "dms", "column-name": "SALE_AMOUNT" }, "data-type": { "type": "int8" } }
exemplo Adicionar uma coluna de imagem anterior

Para uma coluna de origem chamada emp_no, a regra de transformação no exemplo a seguir adiciona uma nova coluna chamada BI_emp_no no destino.

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

Aqui, a instrução a seguir preenche uma coluna BI_emp_no na linha correspondente com 1.

UPDATE employees SET emp_no = 3 WHERE BI_emp_no = 1;

Ao escrever atualizações do CDC em AWS DMS destinos compatíveis, a BI_emp_no coluna possibilita saber quais linhas têm valores atualizados na emp_no coluna.