SnowConvert: Teradata DDL 문

테이블

참고

출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.

설명

Teradata의 TABLE 문은 Snowflake TABLE 구문으로 변환됩니다.

Teradata TABLEs 에 대한 자세한 내용은 여기 에서 확인할 수 있습니다.

샘플 소스 패턴

단순 Create​ Table

Teradata

 CREATE TABLE table1, no fallback,
no before journal,
no after journal (
  c1 INTEGER NOT NULL,
	f1 INTEGER NOT NULL,
	p1 INTEGER NOT NULL,
  DATE,
  TIME,
	FOREIGN KEY(f1) REFERENCES WITH CHECK OPTION table2 (d1)
)
UNIQUE PRIMARY INDEX(c1)
PARTITION BY COLUMN(p1);
Copy

Snowflake

 CREATE OR REPLACE TABLE table1 (
	c1 INTEGER NOT NULL,
	f1 INTEGER NOT NULL,
	p1 INTEGER NOT NULL,
	DATE,
	TIME,
	FOREIGN KEY(f1) REFERENCES table2 (d1) ,
	UNIQUE (c1)
)
--** SSC-PRF-0007 - PERFORMANCE REVIEW - CLUSTER BY **
CLUSTER BY (p1)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

테이블 종류 절 - SET 및 MULTISET

Teradata의 kind 절은 중복 행이 허용되는지 여부(MULTISET) 또는 허용되지 않는지 여부(SET)를 결정합니다.

Teradata
 -- Set semantics
CREATE SET TABLE table1 (
    column1 INTEGER
);

--Multiset semantics
CREATE MULTISET TABLE table2(
    column1 INTEGER
);
Copy
Snowflake
 -- Set semantics
--** SSC-FDM-TD0024 - SET TABLE FUNCTIONALITY NOT SUPPORTED. TABLE MIGHT HAVE DUPLICATE ROWS **
CREATE OR REPLACE TABLE table1 (
    column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

--Multiset semantics
CREATE OR REPLACE TABLE table2 (
    column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

휘발성 및 글로벌 임시 테이블

teradata의 휘발성 및 글로벌 임시 테이블은 데이터의 임시 저장소에 사용됩니다. 글로벌 임시 테이블의 테이블 정의(DDL)는 Data Dictionary에 유지되는 반면, 휘발성 테이블 정의는 저장되지 않는다는 점에서 차이가 있습니다.

Teradata
 --Global Temporary Table
CREATE MULTISET GLOBAL TEMPORARY TABLE table1 (
    column1 INTEGER
);

--Volatile Table
CREATE MULTISET VOLATILE TABLE table3 (
    column1 INTEGER
);
Copy
Snowflake
 --Global Temporary Table
--** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE table1 (
    column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

--Volatile Table
CREATE OR REPLACE TEMPORARY TABLE table3 (
    column1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

데이터 포함 및 데이터 미포함 옵션

Teradata

 -- With data
CREATE TABLE table1 AS table2 WITH DATA

-- With no data
CREATE TABLE table1 AS table2 WITH NO DATA 
Copy

Snowflake

 -- With data
CREATE OR REPLACE TABLE table1 CLONE table2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

-- With no data
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR table1. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE OR REPLACE TABLE table1 LIKE table2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

Snowflake의 예약 & 제한된 키워드

SnowConvert 는 예약된 키워드와 관련된 문제를 해결하여 Snowflake로 원활한 SQL 마이그레이션을 지원합니다. Snowflake의 예약 및 제한 키워드 설명서 에 따라 특정 키워드는 특별한 처리 없이 열 이름, 테이블 이름 또는 별칭으로 사용할 수 없습니다. SnowConvert 에는 이러한 경우 SQL 코드 호환성을 보장하는 기능이 포함되어 있습니다.

ANSI 키워드는 열 이름으로 예약됨

ANSI 또는 Snowflake 예약 키워드 와 일치하는 열 이름의 경우, SnowConvert 는 Snowflake의 구문 규칙을 준수하기 위해 열 이름을 큰따옴표(")로 자동으로 묶습니다. 이 조정은 이러한 열 이름을 가진 쿼리가 수동 개입 없이도 Snowflake에서 올바르게 컴파일되도록 합니다.

예:

 CREATE TABLE ReservedKeywords (
  "CREATE" VARCHAR(50),
  FOLLOWING VARCHAR(50),
  "ILIKE" VARCHAR(50),
  RLIKE VARCHAR(50)
);
Copy

Snowflake

 CREATE OR REPLACE TABLE ReservedKeywords (
    "CREATE" VARCHAR(50),
    "FOLLOWING" VARCHAR(50),
    "ILIKE" VARCHAR(50),
    "RLIKE" VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "11/28/2024",  "domain": "test" }}'
;
Copy

Snowflake 전용 예약 키워드

Snowflake 전용 예약 키워드 (예: CONSTRAINT, CURRENT_DATE, CURRENT_TIME)와 일치하는 열은 따옴표로 묶어도 여전히 컴파일 문제가 발생할 수 있습니다. SnowConvert 는 이러한 인스턴스를 감지하고 코드 SSC-EWI-0045가 포함된 경고를 생성하여 사용자에게 호환성을 위해 이러한 열의 이름을 확인하고 변경해야 할 수 있음을 알리는 메시지를 표시합니다.

예:

 CREATE TABLE ColumnReservedNames (
  "CONSTRAINT" VARCHAR(50),
  "CURRENT_DATE" VARCHAR(50),
  "CURRENT_TIME" VARCHAR(50)
);
Copy

Snowflake

 CREATE OR REPLACE TABLE ColumnReservedNames (
    !!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CONSTRAINT' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
    "CONSTRAINT" VARCHAR(50),
    !!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CURRENT_DATE' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
    "CURRENT_DATE" VARCHAR(50),
    !!!RESOLVE EWI!!! /*** SSC-EWI-0045 - COLUMN NAME 'CURRENT_TIME' IS A SNOWFLAKE RESERVED KEYWORD ***/!!!
    "CURRENT_TIME" VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "11/28/2024",  "domain": "test" }}'
;
Copy

Known Issues

1. Create table options not supported

“단순 Create Table” 예제에서 볼 수 있듯이 Snowflake는 Teradata 테이블 생성하기 옵션을 지원하지 않습니다. 제거됩니다.

2. Partition by performance issues

“단순 Create Table” 예제에서는 성능 고려 사항으로 인해 partition by 문이 제거되었습니다.

3. Primary Index moved

Teradata에서는 기본 인덱스 제약 조건이 create table 문 외부에 선언되지만, Snowflake에서는 “Simple Create Table” 예제에서와 같이 내부에 있어야 합니다.

4. SET semantics not supported

“테이블 종류 절 - SET 및 MULTISET” 예제에서 볼 수 있듯이, Snowflake는 Teradata의 SET 의미 체계를 지원하지 않습니다. 제거됩니다.

5. Global Temporary table option not supported

“휘발성 및 글로벌 임시 테이블” 예제에서 볼 수 있듯이, Snowflake는 Teradata의 글로벌 임시 테이블 옵션을 지원하지 않습니다. 제거됩니다.

6. Compress unsupported

COMPRESS (값1. 값2, 값3) 이 지원되지 않으므로 제거됩니다.

7. On commit unsupported

On commit 이 지원되지 않아 제거되었습니다.

8. Block compression unsupported

Block compression 이 지원되지 않아 제거되었습니다.

9. Normalize unsupported

Normalize 가 지원되지 않아 제거되었습니다.

WITH DEFAULT

참고

출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.

설명

Teradata의 WITHDEFAULT 절은 값 없이 삽입되는 열에 시스템 기본값을 설정합니다. 이 값은 일반적으로 0 또는 비어 있는 것과 같습니다.

구문:

 WITH DEFAULT
Copy

다음 테이블에는 Teradata의 데이터 타입, Snowflake에서 해당 유형 및 지원되는 경우 설정할 기본값이 나와 있습니다.

TeradataSnowflakeDefault Value
BLOB[(n)]BYTENOT SUPPORTED
BYTE[(n)]BYTENOT SUPPORTED
VARBYTE[(n)]BYTENOT SUPPORTED
BIGINTBIGINT0
BYTEINTBYTEINT0
DECIMAL [(n[,m])]DECIMAL0
DOUBLE PRECISIONDOUBLE PRECISION0
FLOATFLOAT0
INTEGERINTEGER0
NUMBER(n[,m])NUMBER0
NUMBER[(*[,m])]NUMBER0
NUMERIC [(n[,m])]NUMERIC0
REALREAL0
SMALLINTSMALLINT0
DATEDATECURRENT_DATE
TIME [(n)]TIMECURRENT_TIME
TIMESTAMP [(n)]TIMESTAMPCURRENT_TIMESTAMP
TIMESTAMP WITH TIME ZONETIMESTAMP_TZLOCALTIMESTAMP
INTERVAL DAY [(n)]VARCHAR(21)'0DAY'
INTERVAL DAY [(n)] TO HOURVARCHAR(21)'0DAY'
INTERVAL DAY [(n)] TO MINUTEVARCHAR(21)'0DAY'
INTERVAL DAY [(n)] TO SECONDVARCHAR(21)'0DAY'
INTERVAL HOUR [(n)]VARCHAR(21)'0HOUR'
INTERVAL HOUR [(n)] TO MINUTEVARCHAR(21)'0HOUR'
INTERVAL HOUR [(n)] TO SECONDVARCHAR(21)'0HOUR'
INTERVAL MINUTE [(n)]VARCHAR(21)'0MINUTE'
INTERVAL MINUTE [(n)] TO SECOND [(m)]VARCHAR(21)'0MINUTE'
INTERVAL MONTHVARCHAR(21)'0MONTH'
INTERVAL SECOND [(n,[m])]VARCHAR(21)'0SECOND'
INTERVAL YEAR [(n)]VARCHAR(21)'0YEAR'
INTERVAL YEAR [(n)] TO MONTHVARCHAR(21)'0YEAR'
CHAR[(n)]CHAR''
CHARACTER(n) CHARACTER SET GRAPHIC-NOT SUPPORTED
CLOB-NOT SUPPORTED
CHAR VARYING(n)VARCHAR''
LONG VARCHAR-NOT SUPPORTED
LONG VARCHAR CHARACTER SET GRAPHIC-NOT SUPPORTED
VARCHAR(n)VARCHAR''
VARCHAR(n) CHARACTER SET GRAPHIC-NOT SUPPORTED
PERIOD(DATE)VARCHAR(24)NOT SUPPORTED
PERIOD(TIME [(n)])VARCHAR(24)NOT SUPPORTED
PERIOD(TIMESTAMP [(n)])VARCHAR(24)NOT SUPPORTED

샘플 소스 패턴

Teradata

 CREATE TABLE SAMPLE_TABLE
(
    ID INT,

    -- Numeric Types
    big_integer_col BIGINT WITH DEFAULT,
    byteint_col BYTEINT WITH DEFAULT,
    decimal_col DECIMAL(10,2) WITH DEFAULT,
    double_precision_col DOUBLE PRECISION WITH DEFAULT,
    float_col FLOAT WITH DEFAULT,
    integer_col INTEGER WITH DEFAULT,
    number_col NUMBER WITH DEFAULT,
    numeric_col NUMERIC(10,2) WITH DEFAULT,
    real_col REAL WITH DEFAULT,
    smallint_col SMALLINT WITH DEFAULT,

    -- Character Types
    char_col CHAR(50) WITH DEFAULT,
    character_col CHARACTER(50) WITH DEFAULT,
    --clob_col CLOB,
    char_varying_col CHAR VARYING(100) WITH DEFAULT,
    --long_varchar_col LONG VARCHAR WITH DEFAULT,
    --long_varchar_graphic_col LONG VARCHAR CHARACTER SET GRAPHIC WITH DEFAULT,
    varchar_col VARCHAR(255) WITH DEFAULT,
    --varchar_graphic_col VARCHAR(255) CHARACTER SET GRAPHIC WITH DEFAULT,

    -- Date and Time Types
    date_col DATE WITH DEFAULT,
    time_col TIME WITH DEFAULT,
    time_precision_col TIME(6) WITH DEFAULT,
    timestamp_col TIMESTAMP WITH DEFAULT,
    timestamp_precision_col TIMESTAMP(6) WITH DEFAULT,
    tz_timestamp_col TIMESTAMP WITH TIME ZONE WITH DEFAULT,
    tz_timestamp_precision_col TIMESTAMP(6) WITH TIME ZONE WITH DEFAULT,    
    interval_col INTERVAL DAY(4) WITH DEFAULT,
    interval_day_to_hour_col INTERVAL DAY(4) TO HOUR WITH DEFAULT,
    interval_hour_col INTERVAL HOUR(2) WITH DEFAULT,
    interval_minute_col INTERVAL MINUTE(2) WITH DEFAULT,
    interval_month_col INTERVAL MONTH WITH DEFAULT,
    interval_second_col INTERVAL SECOND(2) WITH DEFAULT,
    interval_year_col INTERVAL YEAR(4) WITH DEFAULT,

    -- Binary Types
    -- blob_col BLOB(1000),
    byte_col BYTE(1000) WITH DEFAULT,
    varbyte_col VARBYTE(1000) WITH DEFAULT
);
Copy
Snowflake
 CREATE OR REPLACE TABLE SAMPLE_TABLE
(
    ID INT,
    -- Numeric Types
    big_integer_col BIGINT DEFAULT 0,
    byteint_col BYTEINT DEFAULT 0,
    decimal_col DECIMAL(10,2) DEFAULT 0,
    double_precision_col DOUBLE PRECISION DEFAULT 0,
    float_col FLOAT DEFAULT 0,
    integer_col INTEGER DEFAULT 0,
    number_col NUMBER(38, 18)
--                              WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'NUMBER' NOT SUPPORTED IN SNOWFLAKE ***/!!!
                                                                                                      ,
    numeric_col NUMERIC(10,2) DEFAULT 0,
    real_col REAL DEFAULT 0,
    smallint_col SMALLINT DEFAULT 0,
    -- Character Types
    char_col CHAR(50) DEFAULT '',
    character_col CHARACTER(50)
--                                WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'CHARACTER(50)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
                                                                                                             ,
    --clob_col CLOB,
    char_varying_col CHAR VARYING(100)
--                                       WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'CHAR VARYING(100)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
                                                                                                                 ,
    --long_varchar_col LONG VARCHAR WITH DEFAULT,
    --long_varchar_graphic_col LONG VARCHAR CHARACTER SET GRAPHIC WITH DEFAULT,
    varchar_col VARCHAR(255) DEFAULT '',
    --varchar_graphic_col VARCHAR(255) CHARACTER SET GRAPHIC WITH DEFAULT,

    -- Date and Time Types
    date_col DATE DEFAULT CURRENT_DATE,
    time_col TIME DEFAULT CURRENT_TIME,
    time_precision_col TIME(6) DEFAULT CURRENT_TIME(6),
    timestamp_col TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    timestamp_precision_col TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6),
    tz_timestamp_col TIMESTAMP_TZ DEFAULT LOCALTIMESTAMP,
    tz_timestamp_precision_col TIMESTAMP_TZ(6) DEFAULT LOCALTIMESTAMP(6),
    interval_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY(4) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0DAY',
    interval_day_to_hour_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY(4) TO HOUR DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0DAY',
    interval_hour_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL HOUR(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0HOUR',
    interval_minute_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MINUTE(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0MINUTE',
    interval_month_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0MONTH',
    interval_second_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL SECOND(2) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0SECOND',
    interval_year_col VARCHAR(21) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR(4) DATA TYPE CONVERTED TO VARCHAR ***/!!! DEFAULT '0YEAR',
    -- Binary Types
    -- blob_col BLOB(1000),
    byte_col BINARY
--                    WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'BYTE(1000)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
                                                                                                          ,
    varbyte_col BINARY(1000)
--                             WITH DEFAULT
--    !!!RESOLVE EWI!!! /*** SSC-EWI-0021 - WITH DEFAULT FOR 'VARBYTE(1000)' NOT SUPPORTED IN SNOWFLAKE ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Known Issues

1. Unsupported types

설명 테이블의 테이블에 표시된 것처럼 일부 유형은 지원되지 않으며 WITHDEFAULT 절을 변환할 때 기본값이 설정되지 않습니다.

관련 EWIs

  1. SSC-EWI-0021: Snowflake에서는 지원되지 않습니다.

  2. SSC-EWI-0036: 데이터 타입이 다른 데이터 타입으로 변환되었습니다.

인덱스

경고

현재 _ Create Index _ 문은 변환되지 않지만, 구문 분석 중입니다. 또한 소스 코드에 Create index 문이 있는 경우 _ Assessment Report _에서 이를 설명합니다.

Create Index의 예

 CREATE INDEX (col1, col2, col3) ORDER BY VALUES (col2) ON table1;

CREATE INDEX my_index_name ON my_table (column1, column2);
Copy

참고

아키텍처상의 이유로 Snowflake는 인덱스를 지원하지 않으므로 SnowConvert 에서 인덱스 생성과 관련된 모든 코드를 제거합니다. Snowflake는 DML 작업의 성능 속도를 높이는 데 도움이 되는 모든 테이블에 대해 자동으로 마이크로 파티션을 생성하므로 사용자는 이러한 마이크로 파티션을 생성하거나 관리하는 것에 대해 걱정할 필요가 없습니다.

일반적으로는 이 정도만으로도 쿼리 성능이 매우 우수하지만, 데이터 클러스터링 키를 생성하여 성능을 향상시킬 수 있는 방법이 있습니다. 마이크로 파티션과 데이터 클러스터링에 대한 자세한 내용은 Snowflake의 공식 페이지 에서 확인할 수 있습니다.

조인 인덱스

설명

Snowconvert에서 Teradata 조인 인덱스는 Snowflake 동적 테이블로 변환됩니다. 동적 테이블을 올바르게 구성하려면 2개의 필수 매개 변수 TARGET_LAG 및 WAREHOUSE 를 정의해야 합니다. 구성 옵션에서 이러한 매개 변수를 지정하지 않으면 아래 예시와 같이 변환 중에 기본값이 미리 지정된 값으로 설정됩니다.

조인 인덱스에 대한 자세한 내용을 보려면 여기 를 클릭하십시오.

동적 테이블에 필요한 매개 변수에 대한 자세한 내용을 보려면 여기 를 클릭하십시오.

샘플 소스 패턴

Teradata

 CREATE JOIN INDEX Employee
AS   
SELECT 
  Employee_Id,
  First_Name,
  Last_Name,
  BirthDate,
  DepartmentNo   
FROM Employee   
PRIMARY INDEX (First_Name); 
Copy

Snowflake

 CREATE OR REPLACE DYNAMIC TABLE Employee
--** SSC-FDM-0031 - DYNAMIC TABLE REQUIRED PARAMETERS SET BY DEFAULT **
TARGET_LAG='1 day'
WAREHOUSE=UPDATE_DUMMY_WAREHOUSE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
AS
SELECT
  Employee_Id,
  First_Name,
  Last_Name,
  BirthDate,
  DepartmentNo
FROM 
  Employee;
Copy

Known Issues

현재 알려진 오류가 감지되지 않았습니다.

관련 EWIs

  1. SSC-FDM-0031: 기본적으로 설정된 동적 테이블 필수 매개 변수

스키마

설명

기본 구문은 동일하게 유지되므로 CREATE SCHEMA 문을 Teradata에서 Snowflake로 변환하는 것은 간단합니다.

샘플 소스 패턴

Teradata

 CREATE SCHEMA IF EXISTS schema_name;
Copy

Snowflake

 CREATE SCHEMA IF EXISTS schema_name
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/23/2024" }}'
;
Copy

Known Issues

CREATE SCHEMA 의 WITH 속성

Teradata의 CREATE SCHEMA 문과 연결된 WITH 속성은 사용 가능한 동등한 기능이 없으므로 Snowflake에서 지원되지 않습니다.

Teradata

 CREATE SCHEMA IF EXISTS schema_name
WITH ( PROPERTY1 = PROPERTYNAME, PROPERTY2 = PROPERTTYNAME, PROPERTY3 = PROPERTTYNAME);
Copy

Snowflake

 CREATE SCHEMA IF EXISTS schema_name
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/23/2024" }}'
!!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'SCHEMA WITH' NODE ***/!!!
WITH ( PROPERTY1 = PROPERTYNAME, PROPERTY2 = PROPERTTYNAME, PROPERTY3 = PROPERTTYNAME);
Copy

관련 EWIs

  1. SSC-EWI-0073: 보류 중 함수 동등성 검토.

참고

출력 코드의 일부 부분은 명확성을 위해 생략되었습니다.

설명

Teradata의 VIEW 문은 Snowflake VIEW 구문으로 변환됩니다.

Teradata VIEW 에 대한 자세한 내용은 여기 에서 확인할 수 있습니다.

샘플 소스 패턴

뷰 변환 생성하기

Teradata

 CREATE VIEW view1 (someTable.col1, someTable.col2) AS locking row for access
    SELECT
    my_table.col1, my_table.col2
    FROM table1 AS my_table
    WHERE my_table.col1 = 'SpecificValue'
    UNION ALL
    SELECT other_table.col2
    FROM table2 AS other_table
    WHERE my_table.col2 = other_table.col2
Copy

Snowflake

 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECTS "table1", "table2" **
CREATE OR REPLACE VIEW view1
(
    col1,
    col2)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
    my_table.col1,
    my_table.col2
    FROM
    table1 AS my_table
    WHERE my_table.col1 = 'SpecificValue'
    UNION ALL
    SELECT
    other_table.col2
       FROM
    table2 AS other_table
       WHERE my_table.col2 = other_table.col2;
Copy

사용자 지정 스키마 태그

사용자 정의 스키마는 뷰 지정 앞의 설명 섹션에 <sc-view>SCHEMANAME.VIEWNAME</sc-view> 같이 스키마 값과 뷰 이름만 마침표 ‘.’로 구분된 “sc-view”라는 XML 태그를 사용하여 지정합니다.

사용자 지정 스키마가 뷰 한정자로 사용되며, 뷰의 이름과 FROM 쿼리 및 내부 쿼리에서 참조되는 모든 오브젝트가 해당 사용자 지정 스키마를 사용합니다. 따라서 이름은 같지만 사용자 지정 태그가 다른 여러 개의 뷰가 있을 수 있습니다. : 이름이 같은 2개의 뷰는 사용자 지정 스키마 태그 정보를 사용하여 변환을 수행합니다.

Teradata
 /*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
REPLACE VIEW EMPLOYEEB AS
SELECT * FROM EMPLOYEE
WHERE AREA = "AREAB";

/*<sc-view>Views.EMPLOYEEB</sc-view>*/
REPLACE VIEW EMPLOYEEB AS
SELECT * FROM EMPLOYEE
WHERE AREA = "AREAB";
Copy
Snowflake

사용자 정의 스키마 이름 MySchema, 사용자 정의 데이터베이스 이름 MyDatabase 또는 변환 설정에서 사용자 정의 데이터베이스 또는 스키마를 선택하지 않은 경우에 따라 Snowflake에 대한 변환이 달라집니다.

 /*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "EMPLOYEE" **
CREATE OR REPLACE VIEW RMSviews.EMPLOYEEB
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
* FROM
RMSviews.EMPLOYEE
WHERE AREA = "AREAB";

/*<sc-view>Views.EMPLOYEEB</sc-view>*/
--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "EMPLOYEE" **
--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR Views.EMPLOYEEB. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE OR REPLACE VIEW Views.EMPLOYEEB
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
AS
SELECT
* FROM
Views.EMPLOYEE
 WHERE AREA = "AREAB";
Copy
 /*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW MyDatabase.RMSviews.EMPLOYEEB
AS
   SELECT * FROM MyDatabase.RMSviews.EMPLOYEE
   WHERE AREA = "AREAB";

/*<sc-view>Views.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW MyDatabase.Views.EMPLOYEEB
AS
   SELECT * FROM MyDatabase.Views.EMPLOYEE
   WHERE AREA = "AREAB";
Copy
 /*<sc-view>RMSviews.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW RMSviews.PUBLIC.EMPLOYEEB
AS
   SELECT * FROM RMSviews.PUBLIC.EMPLOYEE
   WHERE AREA = "AREAB";

/*<sc-view>Views.EMPLOYEEB</sc-view>*/
CREATE OR REPLACE VIEW Views.PUBLIC.EMPLOYEEB
AS
   SELECT * FROM Views.PUBLIC.EMPLOYEE
   WHERE AREA = "AREAB";
Copy

Known Issues

1. Locking row for access logic difference

Snowflake에서 오브젝트 및 요소에 대한 액세스는 사용자 및 권한을 기반으로 합니다.

관련 EWIs

  1. SSC-FDM-0007: 종속성이 누락된 요소.

  2. SSC-FDM-0019: 의미 체계 정보를 로딩할 수 없습니다.