SnowConvert AI - Renaming feature

Renaming objects during a database migration process is something that a lot of users need to do. For this reason, SnowConvert AI enables the Renaming feature to allow defining new names for the following types of user-defined objects:

Bemerkung

Dieses Feature wird NUR für Teradata und Redshift unterstützt.

  • Tabellen

  • Ansichten

  • Materialisierte Ansichten

  • Prozeduren

  • Funktionen

  • Makros

Bemerkung

Das Umbenennungsfeature gilt sowohl für die Objektdefinition als auch für die Verwendung des Objekts.

Diese Objekte werden normalerweise innerhalb eines Schemas oder einer Datenbank qualifiziert, sodass je nach Datenbankplattform das Objekt Table1 einfach als Table1, als MySchema.Table1 oder als MyDatabase.MySchema.Table1 referenziert werden kann. Es ist wichtig, jedes Objekt in der Umbenennungsdatei vollständig zu qualifizieren, um Mehrdeutigkeit zu vermeiden.

Die neuen Objektnamen werden über eine .json-Datei mit dem folgenden Format angegeben.

Bemerkung

Beachten Sie, dass dieses Beispiel einen Abschnitt „Macros“ enthält. Dies ist ein Teradata-spezifisches Element und kann je nach der angegebenen Sprache variieren.

{
  "Tables": {
    "SchemaName.TableName": "NewSchema.TableNameChanged",
    "Table1": "Table2"
  },
  "TablesRegex": [
    {
      "RegexExpr": "(Schema1)\\.(.*)",
      "RegexReplace": "Prefix_$1.$2"
    }
  ],
  
  "Views": {
    "ViewName": "ViewNameChanged",
    "MaterializedViewName": "MaterializedViewNameChanged",
  },
  "ViewsRegex": [
    {
      "RegexExpr": "(Schema1)\\.(.*)",
      "RegexReplace": "$2.$1"
    }
  ],
  
  "Procedures": {
    "ProcedureName": "ProcedureNameChanged"
  },
  "ProceduresRegex": [
    {
      "RegexExpr": "(Schema1)\\.(.*)",
      "RegexReplace": "$2.$1"
    }
  ],
  
  "Macros": {
    "SchemaName.MacroName": "MacroNameChanged",
    "SimpleMacro": "SimpleMacroSf"
  },
  "MacrosRegex": [
    {
      "RegexExpr": "(Schema1)\\.(.*)",
      "RegexReplace": "$2.$1"
    }
  ],
  
  "Functions": {
    "SchemaName.FunctionName": "FunctionNameChanged",
    "SimpleFunction": "SimpleFunctionSf"
  },
  "FunctionsRegex": [
    {
      "RegexExpr": "(Schema1)\\.(.*)",
      "RegexReplace": "$2.$1"
    }
  ]
}
Copy

Verwendung

In order to use the renaming feature you have to execute the CLI version of SnowConvert AI with the following argument --RenamingFile and provide the path to the .json file containing the renaming information. An example of the command can look like this:

snowct.exe -i „somePath/input“ -o „somePath/output“ –RenamingFile „somePath/renamings.json“

Umbenennungsmodi

Beachten Sie, dass es zwei Felder für jeden Typ von Objekt gibt: "Tables" und "TablesRegex", "Views" und "ViewsRegex" usw. Es gibt nämlich zwei Möglichkeiten, wie Umbenennungen angegeben werden können.

Objekt für Objekt (Zeile für Zeile)

In diesem Modus steht jede Zeile für ein Objekt und muss den ursprünglichen vollqualifizierten Namen und den neuen Namen enthalten. Wenn wir also ein Objekt namens „Table1“ innerhalb des Schemas „OriginalSchema“ in das Schema „SchemaSF“ verschieben möchten, muss die Zeile wie folgt aussehen:

"OriginalSchema.Table1": "SchemaSF.Table1"
Copy

Wenn wir sie zudem in „Table2“ umbenennen wollen, sollte die Zeile so aussehen:

"OriginalSchema.Table1": "SchemaSF.Table2"
Copy

Diese Informationen müssen in den Abschnitten „Tables“, _ „Views", _ „Procedures“_, _ „Macros“ und „Functions“ der .json-Datei angegeben werden, und jede Zeile muss mit einem Komma getrennt werden. Schauen wir uns ein Beispiel an:

TableExample1

"Tables": {
    "Schema1.Table1": "SF_Schema1.SF_Table1",
    "Schema1.Table2": "SF_Schema1.SF_Table2",
    "Schema1.Table3": "SF_Schema1.SF_Table3"
  },  
Copy

Das obige Beispiel besagt, dass die einzigen drei Tabellen in der gesamten Workload, die umbenannt werden müssen, die Tabellen Table1, Table2 und Table3 sind, die sich alle innerhalb des Schemas „Schema1“ befinden; sie müssen in SF_Table1, SF__Table2 und SF_Table3 umbenannt werden und befinden sich schließlich unter dem Schema SF_Schema1 in Snowflake.

Reguläre Ausdrücke

Wenn mehrere Objekte auf die gleiche Weise umbenannt werden müssen, ermöglicht das Feature auch die Definition von Mustern mit regulären Ausdrücken, die auf Objekte der gleichen Art angewendet werden können. Für jede Umbenennung sind zwei Zeilen erforderlich. Die erste Zeile ist "RegexExpr", der übereinstimmende Ausdruck, und die zweite Zeile ist "RegexReplace", der ersetzende Ausdruck. Diese Informationen müssen in den Abschnitten "TablesRegex", _ "ViewsRegex", _ "ProceduresRegex"_, _ "MacrosRegex" und "FunctionsRegex" der .json-Datei angegeben werden. Das vorherige Beispiel kann also auch auf folgende Weise geschrieben werden, indem Sie das Regex-Feature verwenden.

TableExample2

"TablesRegex": [
    {
      "RegexExpr": "Schema1\\.(.*)",
      "RegexReplace": "SF_Schema1.SF_$1"
    }
  ],
Copy

Der einzige Unterschied besteht darin, dass dieses Verfahren auf alle Tabellen im Schema „Schema1“ angewendet wird. Der Regex-Ausdruck vergleicht alle Tabellen, die im Schema „Schema1“ definiert sind, und erstellt eine Erfassungsgruppe, die alle Elemente nach dem Punkt enthält. Die Regex-Ersetzung verschiebt die Tabellen in das Schema „SF_Schema1“ und fügt das Präfix „SF_“ zu allen gefundenen Tabellen hinzu, die die erste erstellte Gruppe ($1) im Regex-Ausdruck referenzieren.

Umbenennungspriorität

There might be renamings that apply to the same object and only one of them is chosen. Within the same section, SnowConvert AI will apply the first renaming that matches the current object’s name, and it will stop trying to rename that object. So in the following example, despite the fact that "Tables" section specifies renaming „Table1“ to „Table1-a“ and also to „Table1-b“, SnowConvert AI will only rename it to „Table1-a“.

"Tables": {
    "Schema1.Table1": "Schema1.Table1-a",
    "Schema1.Table1": "Schema1.Table1-b",
  }, 
Copy

Also, SnowConvert AI will try to rename an object first checking the object by object renaming section before trying the regular expressions section. So, in the following example despite the fact that both renamings can apply to the same object „Schema1.Table1“, only the one defined in the "Tables" section is applied.

"Tables": {
    "Schema1.Table1": "Schema1.TableA",
  }, 
  "TablesRegex": [
    {
      "RegexExpr": "Schema1\\.(.*)",
      "RegexReplace": "Schema1.SF_$1"
    }
  ],
Copy

Beispiel

Nehmen wir an, wir haben den folgenden Eingabecode.

Eingabecode

CREATE TABLE CLIENT ( 
    ID INTEGER, 
    NAME varchar(20));
    
CREATE TABLE TICKET ( 
    CLIENT_ID INTEGER,
    FOREIGN KEY (CLIENT_ID_FK) REFERENCES CLIENT(ID));
    
SELECT * FROM CLIENT;
Copy

Und die folgenden Umbenennungsinformationen

Umbenennungsdatei (.JSON)

{
  "Tables": {
    "CLIENT": "USER"
  }
}
Copy

Dies wäre der Ausgabecode mit und ohne Umbenennung.

Snowflake-Ausgabecode

CREATE OR REPLACE TABLE CLIENT (
    ID INTEGER,
    NAME varchar(20))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "11/13/2024",  "domain": "test" }}'
;

CREATE OR REPLACE TABLE TICKET (
    CLIENT_ID INTEGER,
       FOREIGN KEY (CLIENT_ID_FK) REFERENCES CLIENT (ID))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "11/13/2024",  "domain": "test" }}'
;

SELECT
    * FROM
    CLIENT;
Copy
CREATE OR REPLACE TABLE USER (
    ID INTEGER,
    NAME varchar(20))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "11/13/2024",  "domain": "test" }}'
;

CREATE OR REPLACE TABLE TICKET (
    CLIENT_ID INTEGER,
       FOREIGN KEY (CLIENT_ID_FK) REFERENCES USER (ID))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "11/13/2024",  "domain": "test" }}'
;

SELECT
    * FROM
    USER;
Copy

Beachten Sie, dass alle Referenzen auf „CLIENT“ in „USER“ umbenannt werden.