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);
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"}}'
;
테이블 종류 절 - SET 및 MULTISET¶
Teradata의 kind 절은 중복 행이 허용되는지 여부(MULTISET) 또는 허용되지 않는지 여부(SET)를 결정합니다.
Teradata¶
-- Set semantics
CREATE SET TABLE table1 (
column1 INTEGER
);
--Multiset semantics
CREATE MULTISET TABLE table2(
column1 INTEGER
);
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"}}'
;
휘발성 및 글로벌 임시 테이블¶
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
);
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"}}'
;
데이터 포함 및 데이터 미포함 옵션¶
Teradata
-- With data
CREATE TABLE table1 AS table2 WITH DATA
-- With no data
CREATE TABLE table1 AS table2 WITH NO DATA
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"}}'
;
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)
);
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" }}'
;
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)
);
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" }}'
;
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
다음 테이블에는 Teradata의 데이터 타입, Snowflake에서 해당 유형 및 지원되는 경우 설정할 기본값이 나와 있습니다.
Teradata | Snowflake | Default Value |
---|---|---|
BLOB[(n)] | BYTE | NOT SUPPORTED |
BYTE[(n)] | BYTE | NOT SUPPORTED |
VARBYTE[(n)] | BYTE | NOT SUPPORTED |
BIGINT | BIGINT | 0 |
BYTEINT | BYTEINT | 0 |
DECIMAL [(n[,m])] | DECIMAL | 0 |
DOUBLE PRECISION | DOUBLE PRECISION | 0 |
FLOAT | FLOAT | 0 |
INTEGER | INTEGER | 0 |
NUMBER(n[,m]) | NUMBER | 0 |
NUMBER[(*[,m])] | NUMBER | 0 |
NUMERIC [(n[,m])] | NUMERIC | 0 |
REAL | REAL | 0 |
SMALLINT | SMALLINT | 0 |
DATE | DATE | CURRENT_DATE |
TIME [(n)] | TIME | CURRENT_TIME |
TIMESTAMP [(n)] | TIMESTAMP | CURRENT_TIMESTAMP |
TIMESTAMP WITH TIME ZONE | TIMESTAMP_TZ | LOCALTIMESTAMP |
INTERVAL DAY [(n)] | VARCHAR(21) | '0DAY' |
INTERVAL DAY [(n)] TO HOUR | VARCHAR(21) | '0DAY' |
INTERVAL DAY [(n)] TO MINUTE | VARCHAR(21) | '0DAY' |
INTERVAL DAY [(n)] TO SECOND | VARCHAR(21) | '0DAY' |
INTERVAL HOUR [(n)] | VARCHAR(21) | '0HOUR' |
INTERVAL HOUR [(n)] TO MINUTE | VARCHAR(21) | '0HOUR' |
INTERVAL HOUR [(n)] TO SECOND | VARCHAR(21) | '0HOUR' |
INTERVAL MINUTE [(n)] | VARCHAR(21) | '0MINUTE' |
INTERVAL MINUTE [(n)] TO SECOND [(m)] | VARCHAR(21) | '0MINUTE' |
INTERVAL MONTH | VARCHAR(21) | '0MONTH' |
INTERVAL SECOND [(n,[m])] | VARCHAR(21) | '0SECOND' |
INTERVAL YEAR [(n)] | VARCHAR(21) | '0YEAR' |
INTERVAL YEAR [(n)] TO MONTH | VARCHAR(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
);
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"}}'
;
Known Issues¶
1. Unsupported types¶
설명 테이블의 테이블에 표시된 것처럼 일부 유형은 지원되지 않으며 WITHDEFAULT
절을 변환할 때 기본값이 설정되지 않습니다.
관련 EWIs¶
SSC-EWI-0021: Snowflake에서는 지원되지 않습니다.
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);
참고
아키텍처상의 이유로 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);
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;
Known Issues¶
현재 알려진 오류가 감지되지 않았습니다.
관련 EWIs¶
SSC-FDM-0031: 기본적으로 설정된 동적 테이블 필수 매개 변수
스키마¶
설명 ¶
기본 구문은 동일하게 유지되므로 CREATE SCHEMA
문을 Teradata에서 Snowflake로 변환하는 것은 간단합니다.
샘플 소스 패턴¶
Teradata
CREATE SCHEMA IF EXISTS schema_name;
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" }}'
;
Known Issues¶
CREATE SCHEMA 의 WITH 속성¶
Teradata의 CREATE SCHEMA
문과 연결된 WITH
속성은 사용 가능한 동등한 기능이 없으므로 Snowflake에서 지원되지 않습니다.
Teradata
CREATE SCHEMA IF EXISTS schema_name
WITH ( PROPERTY1 = PROPERTYNAME, PROPERTY2 = PROPERTTYNAME, PROPERTY3 = PROPERTTYNAME);
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);
관련 EWIs¶
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
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;
사용자 지정 스키마 태그¶
사용자 정의 스키마는 뷰 지정 앞의 설명 섹션에 <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";
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";
/*<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";
/*<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";
Known Issues¶
1. Locking row for access logic difference¶
Snowflake에서 오브젝트 및 요소에 대한 액세스는 사용자 및 권한을 기반으로 합니다.
관련 EWIs¶
SSC-FDM-0007: 종속성이 누락된 요소.
SSC-FDM-0019: 의미 체계 정보를 로딩할 수 없습니다.