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:

참고

이 기능은 Teradata 및 Redshift ONLY 에서 지원됩니다.

  • 테이블

  • 구체화된 뷰

  • 프로시저

  • 함수

  • 매크로

참고

이름 바꾸기 기능은 오브젝트 정의와 오브젝트의 용도 모두에 적용됩니다.

이러한 오브젝트는 일반적으로 스키마 또는 데이터베이스 내에서 한정되므로 데이터베이스 플랫폼에 따라 Table1 오브젝트는 Table1, MySchema.Table1 또는 MyDatabase.MySchema.Table1 로 간단히 참조될 수 있습니다. 모호함을 피하기 위해 이름 바꾸기 파일에서 각 오브젝트를 완전히 지정하는 것이 필수 입니다.

새 오브젝트 이름은 다음 형식의 .json 파일을 통해 지정됩니다.

참고

이 예제에는 “Macros” 섹션이 포함되어 있고, 이는 Teradata 특정 요소이며 지정된 언어에 따라 달라질 수 있습니다.

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

사용법

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”

모드 이름 바꾸기

각 종류의 오브젝트에 대해 "Tables""TablesRegex", "Views""ViewsRegex" 등 2개의 필드가 있음을 알 수 있습니다. 이는 이름 바꾸기을 지정할 수 있는 두 가지 방법이 있기 때문입니다.

오브젝트별(라인별)

이 모드에서 각 라인은 오브젝트를 나타내며, 원래 정규화된 이름과 새 이름을 포함해야 합니다. 따라서 스키마 “OriginalSchema” 내부의 “Table1”이라는 오브젝트를 스키마 _”SchemaSF”_로 이동하려면 다음과 같이 라인을 작성해야 합니다.

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

또한 이름을 “Table2”로 변경하려면 다음과 같이 라인을 작성해야 합니다.

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

이 정보는 .json 파일의 "Tables", "Views", "Procedures", "Macros" "Functions" 섹션에 지정해야 하며 각 줄은 쉼표로 구분해야 합니다. 한 가지 예를 살펴보겠습니다.

TableExample1

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

위의 샘플은 전체 워크로드에서 이름을 변경해야 하는 테이블은 “Table1”, “Table2”, “Table3”라는 3개뿐이며, 모두 “Schema1” 스키마 내에 위치한다는 것을 말하고 있습니다. 각각 “SF_Table1”, “SF_Table2” and “SF__Table3”,_로 이름을 변경해야 하며, 최종적으로는 Snowflake의 “SF_Schema1” 스키마 아래에 위치하게 됩니다.

정규식

여러 오브젝트의 이름을 같은 방식으로 변경해야 하는 경우, 이 기능을 사용하면 정규식으로 같은 종류의 오브젝트에 적용할 패턴을 정의할 수도 있습니다. 각 이름 변경을 지정하려면 두 줄이 필요하며, 첫 번째 줄은 일치하는 식인 "RegexExpr", 두 번째 줄은 바꾸는 식인 "RegexReplace" 입니다. 이 정보는 .json 파일의 "TablesRegex", "ViewsRegex", "ProceduresRegex", "MacrosRegex""FunctionsRegex" 섹션에 제공해야 합니다. 따라서 앞의 예제는 정규식 기능을 사용하여 다음과 같은 방식으로 작성할 수도 있습니다.

TableExample2

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

유일한 차이점은 이 방식이 “Schema1” 스키마 내에 위치한 모든 테이블에 적용된다는 점입니다. 이 정규식 식은 “Schema1” 스키마에 정의된 모든 테이블과 일치하며 점 뒤에 오는 모든 항목이 포함된 캡처 그룹을 생성합니다. 정규식 바꾸기는 테이블을 “SF_Schema1” 스키마로 이동하고 정규식 식에서 생성된 첫 번째 그룹($1)을 참조하는 모든 테이블에 “SF_” 접두사를 추가합니다.

우선순위 이름 바꾸기

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

다음과 같은 입력 코드가 있다고 가정해 보겠습니다.

Input Code

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

및 다음과 같은 이름 변경 정보

파일 이름 바꾸기(.JSON)

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

이는 이름 바꾸기이 있는 경우와 없는 경우의 출력 코드입니다.

Snowflake 출력 코드

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

“CLIENT”에 대한 모든 참조가 “USER “로 이름이 변경된 것을 확인합니다