SnowConvert : Instructions DDL Teradata

Tables

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

L’instruction TABLE de Teradata est traduite en syntaxe Snowflake TABLE.

Pour plus d’informations sur Teradata TABLEs, cliquez ici.

Modèles d’échantillons de sources

Create Table simple

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

Clause relative au type de table - SET et MULTISET

La clause de type de Teradata détermine si les lignes dupliquées sont autorisées (MULTISET) ou non (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

Tables temporaires volatiles et globales

Les tables temporaires volatiles et globales de Teradata sont utilisées pour le stockage temporaire des données. La différence réside dans le fait que la définition de la table (DDL) des tables temporaires globales est conservée dans le Data Dictionary, alors que la définition des tables volatiles n’est pas stockée.

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

Option avec données et sans données

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

Mots-clés limités et réservés de Snowflake

SnowConvert facilite les migrations transparentes de SQL vers Snowflake en résolvant les problèmes liés aux mots-clés réservés. Conformément à la documentation des mots-clés réservés et limités de Snowflake, certains mots-clés ne peuvent pas être utilisés comme noms de colonnes, noms de tables ou alias sans traitement particulier. SnowConvert comprend une fonctionnalité permettant d’assurer la compatibilité du code SQL dans de tels cas.

Mots-clés réservés ANSI comme noms de colonne

Pour les noms de colonnes qui correspondent à ANSI ou aux mots-clés réservés Snowflake, SnowConvert, le nom de la colonne est automatiquement placé entre guillemets doubles (") afin de respecter les règles de syntaxe de Snowflake. Cet ajustement permet de s’assurer que les requêtes avec ces noms de colonnes se compilent correctement dans Snowflake sans nécessiter d’intervention manuelle.

Exemple :

 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

Mots-clés réservés spécifiques à Snowflake

Les colonnes qui correspondent aux mots-clés réservés spécifiques à Snowflake (par exemple, CONSTRAINT, CURRENT_DATE, CURRENT_TIME) peuvent encore causer des problèmes de compilation, même si elles sont entre guillemets. SnowConvert détecte ces instances et génère un avertissement avec le code SSC-EWI-0045, invitant les utilisateurs à revoir et éventuellement à renommer ces colonnes pour des raisons de compatibilité.

Exemple :

 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

Problèmes connus

1. Create table options not supported

Comme le montre l’exemple « Simple Create Table », Snowflake ne prend pas en charge les options de création de table de Teradata. Elles sont supprimées.

2. Partition by performance issues

Dans l’exemple « Simple Create Table », l’instruction partition by est supprimée pour des raisons de performance.

3. Primary Index moved

Dans Teradata, la contrainte d’index primaire est déclarée à l’extérieur de l’instruction create table, mais dans Snowflake, elle est exigée à l’intérieur, comme le montre l’exemple « Simple Create Table ».

4. SET semantics not supported

Comme le montre l’exemple « Table Kind Clause - SET et MULTISET », Snowflake ne prend pas en charge la sémantique SET de Teradata. Elles sont supprimées.

5. Global Temporary table option not supported

Comme le montre l’exemple « Table temporaire volatile et globale », Snowflake ne prend pas en charge l’option de table temporaire globale de Teradata. Elle sera supprimée.

6. Compress unsupported

COMPRESS (value1. value2, value3) est supprimé car il n’est pas pris en charge.

7. On commit unsupported

On commit est supprimé parce qu’il n’est pas pris en charge.

8. Block compression unsupported

Block compression est supprimée car elle n’est pas prise en charge.

9. Normalize unsupported

Normalize est supprimé car il n’est pas pris en charge.

WITH DEFAULT

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

La clause WITH DEFAULT de Teradata définit une valeur par défaut du système pour les colonnes qui sont insérées sans valeur. Cette valeur est généralement l’équivalent de zéro ou de vide.

Syntaxe :

 WITH DEFAULT
Copy

Le tableau suivant présente les types de données de Teradata, leur type correspondant dans Snowflake et la valeur par défaut à définir en cas de prise en charge.

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

Modèles d’échantillons de sources

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

Problèmes connus

1. Unsupported types

Comme le montre la table de description, certains types ne sont pas pris en charge et aucune valeur par défaut ne sera définie lors de la transformation de la clause WITH DEFAULT.

EWIs connexes

  1. SSC-EWI-0021 : Non pris en charge dans Snowflake.

  2. SSC-EWI-0036 : Type de données converti en un autre type de données.

Index

Avertissement

Actuellement, l’instruction _ Create Index _ n’est pas convertie mais elle est analysée. De même, si votre code source comporte des instructions create index, celles-ci seront prises en compte dans le _ rapport d’évaluation. _

Exemple de Create Index

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

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

Note

Pour des raisons architecturales, Snowflake ne prend pas en charge les index. Par conséquent, SnowConvert supprimera tout le code lié à la création d’index. Snowflake crée automatiquement des micro-partitions pour chaque table afin d’accélérer les performances des opérations DML. L’utilisateur n’a pas à se préoccuper de la création ou de la gestion de ces micro-partitions.

En général, cela suffit pour obtenir de très bonnes performances de requête, mais il est possible de les améliorer en créant des clés de clustering de données. La page officielle de Snowflake fournit plus d’informations sur les micro-partitions et le clustering de données.

Index de la jointure

Description

Dans Snowconvert, les index de jointure Teradata sont transformés en tables dynamiques Snowflake. Pour configurer correctement les tables dynamiques, deux paramètres essentiels doivent être définis : TARGET\LAG et WAREHOUSE. Si ces paramètres ne sont pas spécifiés dans les options de configuration, Snowconvert utilisera par défaut des valeurs prédéfinies lors de la conversion, comme le montre l’exemple ci-dessous.

Pour plus d’informations sur les index de jointure, cliquez ici.

Pour plus de détails sur les paramètres nécessaires pour les tables dynamiques, cliquez ici.

Modèles d’échantillons de sources

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

Problèmes connus

Aucune erreur connue n’a été détectée pour le moment.

EWIs connexes

  1. SSC-FDM-0031 : Paramètres requis de la table dynamique définis par défaut

Schéma

Description

La traduction de l’instruction CREATE SCHEMA de Teradata à Snowflake est simple, car la syntaxe de base reste la même.

Modèles d’échantillons de sources

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

Problèmes connus

Propriétés WITH de CREATE SCHEMA

Les propriétés WITH associées à l’instruction CREATE SCHEMA dans Teradata ne sont pas prises en charge dans Snowflake, car il n’existe pas de fonctionnalité équivalente.

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 connexes

  1. SSC-EWI-0073 : En attente de l’examen de l’équivalence fonctionnelle.

Vues

Note

Certaines parties du code de sortie sont omises pour des raisons de clarté.

Description

L’instruction VIEW de Teradata est traduite en syntaxe Snowflake VIEW.

Pour plus d’informations sur Teradata VIEW, cliquez ici.

Modèles d’échantillons de sources

Créer une transformation de vue

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

Balise de schéma personnalisé

Le schéma personnalisé est spécifié dans la section commentaire avant la spécification de la vue, avec une balise XML nommée « sc-view » qui contient uniquement la valeur du schéma et le nom de la vue séparés par un point « . » comme indiqué ci-dessous : <sc-view>SCHEMANAME.VIEWNAME</sc-view>

Le schéma personnalisé sera utilisé comme qualificatif de vue, puis le nom de la vue et tous les objets auxquels il est fait référence dans les requêtes FROM et les requêtes internes utiliseront ce schéma personnalisé. Il peut donc y avoir plusieurs vues portant le même nom, mais avec des balises personnalisées différentes. Exemple : deux vues portant le même nom prendront les informations de la balise du schéma personnalisé pour effectuer la performance.

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

La transformation pour Snowflake dépendra du nom du schéma personnalisé MySchema, du nom de la base de données personnalisée MyDatabase ou de la non-sélection d’une base de données ou d’un schéma personnalisé dans les paramètres de conversion.

 /*<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

Problèmes connus

1. Locking row for access logic difference

Dans Snowflake, l’accès aux objets et aux éléments est basé sur les utilisateurs et les privilèges.

EWIs connexes

  1. SSC-FDM-0007 : Élément avec des dépendances manquantes.

  2. SSC-FDM-0019 : L’information sémantique n’a pas pu être chargée.