SnowConvert: Teradata DDL ステートメント¶
テーブル¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
Teradataの TABLE ステートメントはSnowflake TABLE 構文に翻訳されます。
Teradata TABLEs に関する詳細情報については、 こちら をご覧ください。
サンプルソースパターン¶
シンプルなテーブルの作成¶
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"}}'
;
Table Kind句 - 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"}}'
;
VolatileテーブルとGlobal Temporaryテーブル¶
TeradataのVolatileテーブルとGlobal Temporaryテーブルは、データの仮ストレージに使用されます。両者の違いは、Global Temporaryテーブルのテーブル定義(DDL)がData Dictionaryに保存されるのに対し、Volatileテーブルの定義は保存されない点にあります。
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" }}'
;
既知の問題¶
1.テーブル作成オプションがサポートされていません¶
「シンプルなテーブルの作成」の例に示すように、SnowflakeはTeradataのテーブル作成オプションをサポートしていません。それらは削除されました。
2.パフォーマンスの問題によるパーティション¶
「シンプルなテーブルの作成」の例では、パフォーマンスを考慮し、 partition by
ステートメントを削除しています。
3.プライマリインデックスの移動¶
Teradataでは、プライマリインデックス制約は create table
ステートメントの外側で宣言されますが、Snowflakeでは「シンプルなテーブルの作成」の例に示すように、内側で宣言する必要があります。
4.SET セマンティクスがサポートされていません¶
例「Table Kind句 - SET および MULTISET」に示すように、SnowflakeはTeradataの SET セマンティクスをサポートしていません。それらは削除されました。
5.Global Temporaryテーブルオプションはサポートされていません¶
例「VolatileテーブルとGlobal Temporaryテーブル」に示すように、SnowflakeはTeradataのGlobal Temporaryテーブルオプションをサポートしていません。削除されます。
6.Compressがサポートされていません¶
COMPRESS (value1. value2, value3)
はサポートされていないため削除されました。
7.On commitがサポートされていません¶
On commit
はサポートされていないため削除されました。
8.Block compressionがサポートされていません¶
Block compression
はサポートされていないため削除されました。
9.Normalizeがサポートされていません¶
Normalize
はサポートされていないため削除されました。
WITH DEFAULT¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
Teradataの WITH DEFAULT
句は、値がない状態で挿入された列にシステムデフォルト値をセットします。この値は通常、ゼロまたは空に相当します。
構文:¶
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"}}'
;
既知の問題¶
1.サポートされていない型¶
説明テーブルのテーブルに示されているように、いくつかの型はサポートされておらず、 WITH DEFAULT
句を変換してもデフォルト値はセットされません。
関連 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。これらのパラメーターが構成オプションで指定されないままになっている場合、以下の例に示すように、Snowconvertは変換中にデフォルト値として事前に割り当てられた値を使用します。
結合インデックスの詳細情報は こちら をご覧ください。
動的テーブルに必要なパラメーターについては、 こちら をご覧ください。
サンプルソースパターン¶
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;
既知の問題¶
現在、既知のエラーは検出されていません。
関連 EWIs¶
SSC-FDM-0031: デフォルトで設定されている動的テーブルの必須パラメーター
スキーマ¶
説明¶
TeradataからSnowflakeへの CREATE SCHEMA
ステートメントの変換は、基本構文が変わらないので簡単です。
サンプルソースパターン¶
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" }}'
;
既知の問題¶
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」という名前の XML タグで指定します。このタグには、以下のようにスキーマの値とビュー名をピリオド「.」で区切ったもののみを記述します: <sc-view>SCHEMANAME.VIEWNAME</sc-view>
カスタムスキーマはビュー修飾子として使用され、ビューの名前と、 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¶
Snowflakeの変換は、カスタマイズされたスキーマ名 MySchema
、カスタマイズされたデータベース名 MyDatabase
、または変換設定でカスタマイズされたデータベースまたはスキーマを選択しないかによって異なります。
/*<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";
既知の問題¶
1.アクセスロジックの違いで行をロック¶
Snowflakeでは、オブジェクトや要素へのアクセスはユーザーと権限に基づいて行われます。
関連 EWIs¶
SSC-FDM-0007: 依存関係のない要素。
SSC-FDM-0019: セマティック情報をロードできませんでした。