Operazioni e regole di trasformazione - AWS Servizio di migrazione del Database

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Operazioni e regole di trasformazione

Puoi utilizzare le operazioni di trasformazione per specificare le trasformazioni che desideri applicare alla tabella selezionata, allo schema selezionato o alla vista selezionata. Le regole di trasformazione sono opzionali.

Limitazioni

  • Non è possibile applicare più di un'azione della regola di trasformazione allo stesso oggetto (schema, tabella, colonna, table-tablespace o index-tablespace). È possibile applicare diverse azioni delle regole di trasformazione a qualsiasi livello, purché ogni azione di trasformazione venga applicata a un oggetto diverso.

  • I nomi di tabella e di colonna nelle regole di trasformazione rispettano la distinzione tra maiuscole e minuscole. Ad esempio, è necessario specificare in maiuscolo i nomi delle tabelle e delle colonne per un database Oracle o Db2.

  • Le trasformazioni non sono supportate per i nomi di colonna nelle lingue con scrittura sinistrorsa.

  • Le trasformazioni non possono essere eseguite su colonne che includono nel nome caratteri speciali (ad esempio #, \, /, -).

  • L'unica trasformazione supportata per le colonne mappate a tipi di dati BLOB/CLOB consiste nel rilasciare la colonna sulla destinazione.

  • AWS DMS non supporta la replica di due tabelle di origine in un'unica tabella di destinazione. AWS DMS replica i record da una tabella all'altra e da una colonna all'altra, in base alle regole di trasformazione dell'attività di replica. I nomi degli oggetti devono essere univoci per evitare sovrapposizioni.

    Ad esempio, una tabella di origine ha una colonna denominata ID e la tabella di destinazione corrispondente ha una colonna preesistente denominata id. Se una regola utilizza un'istruzione ADD-COLUMN per aggiungere una nuova colonna chiamata id e un'istruzione SQLite per popolare la colonna con valori personalizzati, si crea un oggetto duplicato e ambiguo denominato id che non è supportato.

Valori

Per le regole di mappatura delle tabelle che utilizzano il tipo di regola di trasformazione, sono applicabili i seguenti valori.

Parametro Valori possibili Descrizione
rule-type transformation Un valore che applica la regola a ogni oggetto specificato dalla regola di selezione. Usa transformation a meno che non sia indicato altrimenti.
rule-id Un valore numerico. Un valore numerico univoco per identificare la regola. Se si specificano più regole di trasformazione per lo stesso oggetto (schema, tabella, colonna, spazio tra tabelle o spazio tabellare indicizzato), AWS DMS applica la regola di trasformazione con l'id della regola inferiore.
rule-name Un valore alfanumerico. Un nome univoco per identificare la regola.
object-locator Un oggetto con i seguenti parametri:
  • schema-name: il nome dello schema. Per gli endpoint MongoDB e Amazon DocumentDB, questo è il nome del database che contiene un set di raccolte.

  • table-name: il nome della tabella, della vista o della raccolta.

  • table-tablespace-name: il nome di uno spazio di tabella di una tabella esistente.

  • index-tablespace-name: il nome di uno spazio di tabella di un indice esistente.

  • column-name: il nome di una colonna esistente.

  • data-type: il nome di un tipo di dati di colonna esistente.

Il nome di ogni schema, tabella o vista, spazio tabella di tabella e spazio tabella di indice e di colonna a cui si applica la regola. È possibile utilizzare il simbolo di percentuale "%" come carattere jolly per tutto o parte del valore di ciascun parametro object-locator, eccetto data-type. Pertanto, è possibile mettere in corrispondenza questi elementi:

  • Una singola tabella o una singola vista in un singolo schema

  • Una singola tabella o una singola vista in alcuni o tutti gli schemi

  • Alcune o tutte le tabelle e tutte le viste in un singolo schema

  • Alcune o tutte le tabelle e tutte le viste in alcuni o tutti gli schemi

  • Una o più colonne nella tabella o nelle tabelle, nella vista o nelle viste e nello schema o negli schemi specificati.

  • Le colonne con un dato data-type quando vengono specificate più colonne. Per i possibili valori di data-type, consulta data-type descritto di seguito in questa tabella.

Inoltre, il parametro table-tablespace-name o index-tablespace-name è disponibile solo per la corrispondenza con un endpoint di origine Oracle. In una singola regola puoi specificare table-tablespace-name o index-tablespace-name, ma non entrambi. Pertanto, puoi mettere in corrispondenza ciascuno dei seguenti formati:

  • Uno, alcuni o tutti gli spazi tabella delle tabelle

  • Uno, alcuni o tutti gli spazi tabella degli indici

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

La trasformazione che desideri applicare all'oggetto. Tutte le operazioni delle regole di trasformazione prevedono una distinzione tra lettere maiuscole e minuscole.

Il valore add-column del parametro rule-action aggiunge una colonna a una tabella. Tuttavia, non è possibile aggiungere una nuova colonna con lo stesso nome di una colonna esistente della stessa tabella.

Se utilizzato con i parametri expression e data-type, add-column specifica il valore dei nuovi dati di colonna.

Il valore change-data-type per rule-action è disponibile solo per le destinazioni della regola column.

Il valore include-column del parametro rule-action modifica la modalità della tabella in modo da eliminare tutte le colonne per impostazione predefinita e includere le colonne specificate. Nella destinazione vengono incluse più colonne richiamando più volte la regola include-column.

Non puoi usare una regola define-primary-key quando include un carattere jolly (%) in un nome di schema o di tabella.

Per un'attività esistente, le azioni delle regole di trasformazione che alterano lo schema della tabella di destinazione, ad esempio remove-column, rename o add-prefix non avranno effetto finché l'attività non viene riavviata. Se riprendi l'attività dopo aver aggiunto la regola di trasformazione, potresti notare un comportamento imprevisto della colonna alterata, come i dati mancanti nella colonna. È necessario il riavvio dell'attività per garantire il corretto funzionamento della regola di trasformazione.

rule-target schema, table, column, table-tablespace, index-tablespace Il tipo di oggetto che stai trasformando.

I valori table-tablespace e index-tablespace sono disponibili solo per un endpoint di destinazione Oracle.

Assicurarsi di specificare un valore per il parametro specificato come parte del object-locator: il nome table-tablespace-name o index-tablespace-name.

value Un valore alfanumerico che segue le regole di denominazione per il tipo di destinazione. Il nuovo valore per operazioni che richiedono input, ad esempio rename.
old-value Un valore alfanumerico che segue le regole di denominazione per il tipo di destinazione. Il vecchio valore per operazioni che richiedono la sostituzione, ad esempio replace-prefix.
data-type

type: il tipo di dati da utilizzare se rule-action è add-column o il tipo di dati sostitutivo se rule-action è change-data-type.

In alternativa, il nome del tipo di dati sostitutivo quando rule-action è change-data-type, il valore di column-name è "%" e un parametro data-type aggiuntivo per identificare il tipo di dati esistente è incluso in object-locator.

AWS DMS supporta le trasformazioni dei tipi di dati delle colonne per i seguenti tipi di dati 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 la colonna aggiunta o il tipo di dati di sostituzione ha una precisione, un valore intero per specificare la precisione.

scale: se la colonna aggiunta o il tipo di dati di sostituzione ha una scala, un valore intero o un valore di data e ora per specificare la scala.

length: la lunghezza dei dati della nuova colonna (se utilizzata con add-column).

Di seguito è riportato un esempio di un parametro data-type per specificare il tipo di dati esistente da sostituire.

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

Qui, la colonna col10 della tabella table_t viene modificata in base al tipo di dati string.

expression Valore alfanumerico che segue la sintassi SQLite.

Se utilizzato con rule-action impostato su rename-schema, il parametro expression specifica un nuovo schema. Se utilizzato con il rule-action impostato su rename-table, expression specifica una nuova tabella. Se utilizzato con rule-action impostato su rename-column, expression specifica un nuovo valore del nome di colonna.

Se utilizzato con rule-action impostato su add-column, expression specifica i dati che costituiscono una nuova colonna.

Tieni presente che per questo parametro sono supportate solo le espressioni. Gli operatori e i comandi non sono supportati.

Per ulteriori informazioni sull'utilizzo delle espressioni per le regole di trasformazione, consulta Utilizzo delle espressioni delle regole di trasformazione per definire il contenuto delle colonne.

Per ulteriori informazioni sulle espressioni SQLite, consulta Utilizzo delle funzioni SQLite per creare espressioni.

primary-key-def

Un oggetto con i seguenti parametri:

  • name: il nome di una nuova chiave primaria o di un indice univoco per la tabella o la vista.

  • (Facoltativo) origin: il tipo di chiave univoca per definire primary-key (l'impostazione predefinita) oppure unique-index.

  • columns: una matrice di stringhe che elenca i nomi delle colonne nell'ordine in cui vengono visualizzati nella chiave primaria o nell'indice univoco.

Questo parametro può definire il nome, il tipo e il contenuto di una chiave univoca sulla tabella o sulla vista trasformata. Lo fa quando rule-action è impostato su define-primary-key e rule-target su table. Per impostazione predefinita, la chiave univoca viene definita come chiave primaria.
before-image-def

Un oggetto con i seguenti parametri:

  • column-prefix: valore anteposto al nome di una colonna. Il valore predefinito è BI_.

  • column-suffix: valore aggiunto al nome della colonna. L'impostazione predefinita è vuota.

  • column-filter: richiede uno dei seguenti valori: pk-only (predefinito), non-lob (facoltativo) e all (facoltativo).

Questo parametro definisce una convenzione di denominazione per identificare le colonne immagine precedente e specifica un filtro per identificare quali colonne di origine possono avere colonne immagine precedente create per esse sulla destinazione. È possibile specificare questo parametro quando rule-action è impostato su add-before-image-columns e rule-target su column.

Non impostare sia column-prefix sia column-suffix sull'opzione per svuotare le stringhe.

Per column-filter, selezionare:

  • pk-only: per aggiungere solo colonne che fanno parte delle chiavi primarie della tabella.

  • non-lob: per aggiungere solo colonne non di tipo LOB.

  • all: per aggiungere qualsiasi colonna con un valore dell'immagine precedente.

Per ulteriori informazioni sul supporto dell'immagine precedente per gli endpoint di destinazione AWS DMS , consulta:

Esempi

Esempio Assegnazione di un nuovo nome a uno schema

Nell'esempio seguente viene rinominato uno schema da Test nell'origine a Test1 nella destinazione.

{ "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" } ] }
Esempio Rinominare una tabella

Nell'esempio seguente viene rinominata una tabella da Actor nell'origine a Actor1 nella destinazione.

{ "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" } ] }
Esempio Ridenominazione di una colonna

Nell'esempio seguente viene rinominata una colonna nella tabella Actor da first_name nell'origine a fname nella destinazione.

{ "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" } ] }
Esempio Rinominare uno spazio tabella di tabella Oracle

L'esempio seguente rinomina lo spazio tabella di tabella denominato SetSpace per una tabella denominata Actor nell'origine Oracle in SceneTblSpace nell'endpoint Oracle di destinazione.

{ "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" } ] }
Esempio Rinominare uno spazio tabella di indice Oracle

L'esempio seguente rinomina lo spazio tabella di indice denominato SetISpace per una tabella denominata Actor nell'origine Oracle in SceneIdxSpace nell'endpoint Oracle di destinazione.

{ "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" } ] }
Esempio Aggiungere una colonna

Nell'esempio seguente viene aggiunta una colonna datetime alla tabella Actor nello schema 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 } } ] }
Esempio Rimozione di una colonna

Nell'esempio seguente viene trasformata la tabella denominata Actor nell'origine per rimuovere da essa tutte le colonne che iniziano con i caratteri col nella destinazione.

{ "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%" } }] }
Esempio Conversione in minuscolo

Nell'esempio seguente viene convertito un nome di tabella da ACTOR nell'origine a actor nella destinazione.

{ "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" } }] }
Esempio Conversione in caratteri maiuscoli

Nell'esempio seguente vengono convertite tutte le colonne in tutte le tabelle e tutti gli schemi da caratteri minuscoli nell'origine a caratteri maiuscoli nella destinazione.

{ "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": "%" } } ] }
Esempio Aggiunta di un prefisso

Nell'esempio seguente tutte le tabelle nell'origine vengono trasformate con l'aggiunta del prefisso DMS_ nella destinazione.

{ "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_" }] }
Esempio Sostituzione di un prefisso

Nell'esempio seguente tutte le colonne contenenti il prefisso Pre_ nell'origine vengono trasformate mediante la sostituzione del prefisso con NewPre_ nella destinazione.

{ "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_" } ] }
Esempio Rimozione di un suffisso

Nell'esempio seguente tutte le tabelle nell'origine vengono trasformate con la rimozione del suffisso _DMS nella destinazione.

{ "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" }] }
Esempio Definire una chiave primaria

L'esempio seguente definisce una chiave primaria denominata ITEM-primary-key su tre colonne della tabella ITEM migrata nell'endpoint di destinazione.

{ "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" ] } }] }
Esempio Definire un indice univoco

L'esempio seguente definisce un indice univoco denominato ITEM-unique-idx su tre colonne della tabella ITEM migrata verso l'endpoint di destinazione.

{ "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" ] } }] }
Esempio Modifica del tipo di dati della colonna di destinazione

Nell'esempio seguente viene modificato il tipo di dati di una colonna di destinazione denominata SALE_AMOUNT da un tipo di dati esistente su 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" } }
Esempio Aggiungere una colonna dell'immagine precedente

Per una colonna di origine denominata emp_no, la regola di trasformazione nell'esempio seguente aggiunge una nuova colonna denominata BI_emp_no nella destinazione.

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

Qui, l'istruzione seguente popola una colonna BI_emp_no nella riga corrispondente con 1.

UPDATE employees SET emp_no = 3 WHERE BI_emp_no = 1;

Quando si scrivono aggiornamenti CDC su AWS DMS destinazioni supportate, la BI_emp_no colonna consente di indicare quali righe hanno valori aggiornati nella colonna. emp_no