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"
}
]
}
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"
Wenn wir sie zudem in „Table2“ umbenennen wollen, sollte die Zeile so aussehen:
"OriginalSchema.Table1": "SchemaSF.Table2"
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"
},
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"
}
],
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",
},
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"
}
],
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;
Und die folgenden Umbenennungsinformationen
Umbenennungsdatei (.JSON)
{
"Tables": {
"CLIENT": "USER"
}
}
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;
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;
Beachten Sie, dass alle Referenzen auf „CLIENT“ in „USER“ umbenannt werden.