SnowConvert AI – Feature zur Umbenennung

Die Umbenennung von Objekten während eines Datenbankmigrationsprozesses ist eine Aufgabe, die viele Benutzende erledigen müssen. Deshalb ermöglicht es SnowConvert AI dem Feature „Umbenennen“, die Definition neuer Namen für die folgenden Typen von benutzerdefinierten Objekten zuzulassen:

Bemerkung

Dieses Feature wird ONLY für Teradata, SQL Server und Redshift unterstützt.

  • Schemas

  • 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.

{
  "Schemas": {
    "SchemaName": "NewSchema"
  },
  "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

Um die Umbenennungsfunktion zu verwenden, müssen Sie die CLI-Version von SnowConvert AI mit dem Argument --RenamingFile ausführen und den Pfad zur JSON-Datei angeben, die die Umbenennungsinformationen enthält. Ein Beispiel für den Befehl kann wie folgt aussehen:

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

Es kann sein, dass es Umbenennungen gibt, die für dasselbe Objekt gelten, von denen aber nur eine ausgewählt wird. Innerhalb desselben Abschnitts wendet SnowConvert AI die erste Umbenennung an, die mit dem Namen des aktuellen Objekts übereinstimmt, und unterbricht den Versuch, dieses Objekt umzubenennen. Im folgenden Beispiel gibt der Abschnitt "Tables" also die Umbenennung von „Table1“ in „Table1-a“ und auch in „Table1-b“ an, SnowConvert AI benennt sie jedoch nur in „Table1-a“ um.

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

Außerdem versucht SnowConvert AI, ein Objekt umzubenennen, indem es zuerst den Abschnitt „Objekt umbenennen“ überprüft, bevor es den Abschnitt „Reguläre Ausdrücke“ ausprobiert. Im folgenden Beispiel wird also trotz der Tatsache, dass beide Umbenennungen auf dasselbe Objekt „Schema1.Table1“ angewendet werden können, nur die im Abschnitt "Tables" definierte Umbenennung angewendet.

"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.