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"
}
]
}
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"
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¶
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",
},
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"
}
],
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.