SnowConvert: Diferenças funcionais gerais

SSC-FDM-0001

Nota

Para facilitar a leitura, simplificamos os exemplos de código mostrando apenas as partes mais relevantes.

Descrição

Exibições que selecionam todas as colunas de uma única tabela sem nenhuma condição de filtragem (cláusula WHERE) são desnecessárias no Snowflake e podem afetar negativamente o desempenho da consulta.

Exemplo de código

Código de entrada (Oracle):
 CREATE OR REPLACE VIEW simpleView1
AS
SELECT
*
FROM
simpleTable;

CREATE OR REPLACE VIEW simpleView2
AS
SELECT
*
FROM
simpleTable GROUP BY col1;
Copy
Código gerado:
 CREATE OR REPLACE VIEW simpleView1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable;

CREATE OR REPLACE VIEW simpleView2
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
*
FROM
simpleTable
GROUP BY col1;
Copy

Práticas recomendadas

SSC-FDM-0002

Descrição

Essa mensagem aparece quando é detectada uma Correlated Subquery. Uma subconsulta correlacionada faz referência a uma coluna da consulta externa. Ao migrar para o Snowflake, essas subconsultas podem se comportar de forma diferente em alguns casos. Para obter mais detalhes, consulte Trabalho com subconsultas.

Exemplo de código

Código de entrada:
 CREATE TABLE schema1.table1(column1 NVARCHAR(50), column2 NVARCHAR(50));
CREATE TABLE schemaA.tableA(columnA NVARCHAR(50), columnB NVARCHAR(50));

--Correlated Subquery
SELECT columnA FROM schemaA.tableA ta WHERE columnA = (SELECT SUM(column1) FROM schema1.table1 t1 WHERE t1.column1 = ta.columnA);
Copy
Código gerado:
 CREATE OR REPLACE TABLE schema1.table1 (
column1 VARCHAR(50),
column2 VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "10/11/2024",  "domain": "test" }}'
;

CREATE OR REPLACE TABLE schemaA.tableA (
columnA VARCHAR(50),
columnB VARCHAR(50))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "transact",  "convertedOn": "10/11/2024",  "domain": "test" }}'
;

--Correlated Subquery
SELECT
columnA
FROM
schemaA.tableA ta
WHERE
columnA =
          --** SSC-FDM-0002 - CORRELATED SUBQUERIES MAY HAVE SOME FUNCTIONAL DIFFERENCES. **
          (SELECT
          SUM(column1) FROM
          schema1.table1 t1
          WHERE
          t1.column1 = ta.columnA
          );
Copy

Práticas recomendadas

SSC-FDM-0003

Descrição

Esse aviso aparece quando há uma incompatibilidade nas taxas de conversão para o campo de avaliação especificado. O SC resolve automaticamente essas inconsistências, portanto, esta mensagem é apenas para fins informativos.

Nota

Essa mensagem de aviso aparece apenas nos documentos de avaliação e não será exibida no código de saída.

Práticas recomendadas

  • Se encontrar algum problema, mesmo que o SnowConvert possa corrigi-lo automaticamente, você ainda poderá entrar em contato com a equipe de suporte SnowConvert pelo e-mail snowconvert-support@snowflake.com para obter assistência.

SSC-FDM-0004

Descrição

Esse aviso aparece nas cláusulas relacionadas ao manuseio externo porque o Snowflake gerencia o armazenamento de dados de forma diferente. Ao contrário de outros bancos de dados, o Snowflake não requer tabelas externas, pois todos os dados devem ser armazenados no sistema de armazenamento interno do Snowflake. Para obter mais detalhes sobre esse tópico, consulte Considerações sobre armazenamento de dados.

Exemplo de código

Código de entrada:
 CREATE OR REPLACE EXTERNAL TABLE external_table_test1
(
  col1 INTEGER
)
OPTIONS (
  format = 'CSV',
  uris = ['gs://my_bucket/file.csv']
);
Copy
Código gerado:
 --** SSC-FDM-0004 - EXTERNAL TABLE TRANSLATED TO REGULAR TABLE **
CREATE OR REPLACE TABLE external_table_test1 (
   col1 INTEGER
 )
-- OPTIONS (
--   format = 'CSV',
--   uris = ['gs://my_bucket/file.csv']
-- )
  ;
Copy

Práticas recomendadas

  • Os dados de arquivos de tabelas externas precisam ser importados para o banco de dados do Snowflake.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0005

Descrição

O tipo de dados TIME no Snowflake armazena apenas o componente de tempo sem nenhuma informação de fuso horário.

TIME armazena valores de hora do relógio e executa todas as operações sem considerar os fusos horários. Para obter mais detalhes, consulte TIME.

Exemplo de código

Código de entrada:
 CREATE TABLE TABLE_TIME_TYPE (
    COLNAME TIME (9) WITH TIME ZONE
);
Copy
Código gerado:
 CREATE OR REPLACE TABLE TABLE_TIME_TYPE (
    COLNAME TIME(9) /*** SSC-FDM-0005 - TIME ZONE NOT SUPPORTED FOR TIME DATA TYPE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

Práticas recomendadas

SSC-FDM-0006

Descrição

Essa mensagem aparece ao criar uma coluna com o tipo de dados NUMBER em uma tabela. Ela avisa sobre possíveis diferenças aritméticas no Snowflake ao trabalhar com escalas decimais em cálculos intermediários. Essas diferenças podem causar falhas em algumas operações. Para obter mais detalhes, consulte a postagem do Snowflake sobre números intermediários no Snowflake e Número fora da faixa representável.

Para evitar problemas de cálculo aritmético, recomendamos que você execute primeiro os testes de amostragem de dados. Isso o ajudará a determinar a precisão correta e os valores de escala necessários para suas operações.

Códigos de exemplo

Tabela simples com colunas de números

Código de entrada (Oracle):
 CREATE TABLE table1
(
column1 NUMBER,
column2 NUMBER (20, 4)
);
Copy
Código gerado:
 CREATE OR REPLACE TABLE table1
(
column1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
column2 NUMBER(20, 4) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Copy

Exemplos de problemas de aritmética

Os exemplos a seguir demonstram como as operações aritméticas podem levar a resultados inesperados ao trabalhar com colunas Number:

Código Snowflake com erro de divisão:
 CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 19) );

INSERT INTO number_table VALUES (1);

SELECT column1 / column1 FROM number_table;
Copy
Código Snowflake com erro de multiplicação:
 CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 20) );

INSERT INTO number_table VALUES (1);

SELECT column1 * column1 FROM number_table;
Copy

Ao executar os comandos SELECT no Snowflake, será exibida uma mensagem de erro.

Number exceeds the allowed range for data type FIXEDSB16 (nullable). The value 1.0000000000000000000 cannot be stored in this data type.

Esse erro ocorre quando o resultado do cálculo excede a capacidade máxima de armazenamento do Snowflake. Para resolver esse problema, reduza a escala (número de casas decimais) em 1 em cada exemplo. Isso permitirá que a operação seja concluída com êxito.

Código Snowflake com divisão:
 CREATE OR REPLACE TABLE number_table( column1 NUMBER(38, 18) );

INSERT INTO number_table VALUES (1);

SELECT column1 / column1 FROM number_table;
Copy
Código Snowflake com Multiplicação:
 CREATE OR REPLACE TABLE numbertable( column1 NUMBER(38, 19) );

INSERT INTO number_table VALUES (1);

SELECT column1 * column1 FROM number_table;
Copy

Para minimizar os erros de migração, o SnowConvert define automaticamente a escala padrão de Numbers para 18.

Práticas recomendadas

  • Verifique se os valores intermediários em suas operações não excedem a escala máxima de 37 do Snowflake.

  • Analise as amostras de dados para confirmar a precisão necessária e as configurações de escala antes de executar as operações.

  • Muitas vezes, após a amostragem de dados ou discussões comerciais, você pode achar que configurações de precisão diferentes são mais apropriadas. Por exemplo, as colunas MONEY normalmente usam NUMBER(20,4). Como a alteração dos tipos de dados de coluna no Snowflake não é simples, você pode consultar esta postagem em nosso fórum para obter orientação sobre como modificar os tipos de dados de coluna e, ao mesmo tempo, preservar os dados.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0007

Nota

Os trechos de código foram simplificados para se concentrar nos conceitos principais

Descrição

Pode ocorrer um erro de implementação quando o SnowConvert não consegue encontrar uma dependência necessária ou resolver determinados tipos de dados. Isso pode ocorrer quando o objeto dependente não está presente no código-fonte.

Exemplo de código

Código de entrada:
 CREATE VIEW VIEW01 AS SELECT * FROM TABLE1;
Copy
Código gerado:
 --** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE VIEW VIEW01
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT
* FROM
TABLE1;
Copy

Nota

A definição de TABLE1 não foi fornecida neste exemplo.

Práticas recomendadas

  • Verifique se todas as dependências de objetos estão incluídas em seu código-fonte.

  • Analise todas as referências a objetos no código para garantir que elas sejam tratadas adequadamente.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0008

Nota

Para facilitar a leitura, simplificamos algumas seções do código neste exemplo.

Descrição

Ao criar tabelas no Snowflake, a cláusula ON COMMIT só pode ser usada com tabelas temporais. Se você incluir uma cláusula ON COMMIT em uma definição de tabela não temporal, ela será comentada no código convertido. Além disso, como o Snowflake não é compatível com ON COMMIT DELETE, essa opção também será comentada durante a conversão.

Exemplo de código

Código de entrada
 CREATE TABLE TABLE01 (COLNAME VARCHAR(20)) ON COMMIT PRESERVE ROWS
CREATE TEMPORARY TABLE TABLE02 (COLNAME VARCHAR(20)) ON COMMIT DELETE ROWS
Copy
Código gerado
 CREATE OR REPLACE TABLE TABLE01 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT PRESERVE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;

CREATE OR REPLACE TEMPORARY TABLE TABLE02 (
COLNAME VARCHAR(20))
----** SSC-FDM-0008 - ON COMMIT NOT SUPPORTED **
--ON COMMIT DELETE ROWS
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
;
Copy

Práticas recomendadas

SSC-FDM-0009

Descrição

As tabelas temporárias globais são complexas porque podem ser criadas de diferentes maneiras, conforme mostrado na documentação do Snowflake.

Exemplo de código

Código de entrada
 CREATE OR REPLACE GLOBAL TEMPORARY TABLE GLOBAL_TEMP_TABLE
(
    col3 INTEGER,
    col4 VARCHAR(50)
);
Copy
Código gerado
 --** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE GLOBAL_TEMP_TABLE
    (
        col3 INTEGER,
        col4 VARCHAR(50)
    )
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Copy

Práticas recomendadas

SSC-FDM-0010

Descrição

Essa mensagem aparece quando o SnowConvert detecta uma cláusula DEFAULT SYSDATE em que o tipo de dados da coluna não é DATE ou TIMESTAMP. Nesses casos, o SnowConvert converte automaticamente o tipo de dados para DATE.

Exemplo de código

Código de entrada
 CREATE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1"( 
 "COLUMN1" VARCHAR2(30 BYTE) DEFAULT SYSDATE
);
Copy
Código gerado
 CREATE OR REPLACE TABLE "SYSDATE_DEFAULT_TEST_TABLE_1" (
  "COLUMN1" TIMESTAMP DEFAULT CURRENT_TIMESTAMP() /*** SSC-FDM-0010 - CONVERTED FROM VARCHAR2 TO DATE FOR CURRENT_DATE DEFAULT ***/
 )
 COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
 ;
Copy

Práticas recomendadas

SSC-FDM-0011

Nota

Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-0045.

Descrição

Nomes de colunas que são palavras-chave reservadas no Snowflake, mas que são válidas no banco de dados de origem.

Exemplo de código

Código de entrada (Oracle):
 CREATE TABLE T1
(
    LOCALTIME VARCHAR,
    CURRENT_USER VARCHAR
);
Copy
Código gerado:
 CREATE OR REPLACE TABLE T1
    (
    --** SSC-FDM-0011 - COLUMN NAME 'LOCALTIME' IS A SNOWFLAKE RESERVED KEYWORD **
    "LOCALTIME" VARCHAR,
    --** SSC-FDM-0011 - COLUMN NAME 'CURRENT_USER' IS A SNOWFLAKE RESERVED KEYWORD **
    "CURRENT_USER" VARCHAR
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
    ;
Copy

Práticas recomendadas

  • Renomeie todas as colunas que tenham nomes não suportados no Snowflake.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0012

Descrição

Esse aviso aparece quando uma Constraint constraintName é usada em uma expressão padrão da coluna. Como o Snowflake não oferece suporte a restrições em expressões padrão, a restrição e seu constraintName são automaticamente removidos, e uma mensagem de aviso é gerada.

Exemplo de código

Código de entrada
 CREATE TABLE TABLE1 ( 
COL1 VARCHAR (10) CONSTRAINT constraintName DEFAULT ('0') NOT NULL 
);
Copy
Código gerado
 CREATE OR REPLACE TABLE TABLE1 (
COL1 VARCHAR(10)
                 --** SSC-FDM-0012 - CONSTRAINT IN DEFAULT EXPRESSION IS NOT SUPPORTED IN SNOWFLAKE **
                 DEFAULT ('0') NOT NULL
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Copy

Práticas recomendadas

SSC-FDM-0013

Descrição

Foi adicionada uma mensagem de aviso para destacar os casos em que as expressões de fuso horário não podem ser avaliadas durante a conversão. Embora o SnowConvert possa mapear com êxito cadeias de caracteres literais de fuso horário para seus equivalentes no Snowflake, ele não pode determinar valores de fuso horário especificados por meio de expressões. Essa limitação significa que os resultados do tempo de execução no Snowflake podem ser diferentes do sistema de origem quando são usadas expressões dinâmicas de fuso horário.

Exemplo de código

Código de entrada (Oracle)
 SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE FROM DUAL;
SELECT TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE Expression FROM DUAL;
Copy
Código gerado
 SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
TO_TIMESTAMP_LTZ( TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;

SELECT
--** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT **
CONVERT_TIMEZONE(Expression, TIMESTAMP '1998-12-25 09:26:50.12')
FROM DUAL;
Copy
Código-fonte (Teradata)
 select TIMESTAMP '1998-12-25 09:26:50.12' AT TIME ZONE SESSIONTIMEZONE;
select current_timestamp at time zone CONCAT(' America ', ' Pacific'); 
select current_timestamp at time zone (SELECT COL1 FROM TABLE1 WHERE COL2 = 2);
Copy
Código de saída
 SELECT
CONVERT_TIMEZONE(SESSIONTIMEZONE, TIMESTAMP '1998-12-25 09:26:50.12') /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;

SELECT
CONVERT_TIMEZONE(CONCAT(' America ', ' Pacific'), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;

SELECT
CONVERT_TIMEZONE((
SELECT
COL1 FROM
TABLE1
WHERE COL2 = 2), CURRENT_TIMESTAMP) /*** SSC-FDM-0013 - TIMEZONE EXPRESSION COULD NOT BE MAPPED, RESULTS MAY BE DIFFERENT ***/;
Copy

Compatibilidade de fuso horário com Oracle

A maioria dos nomes de fuso horário da Oracle é diretamente compatível com o Snowflake, permitindo uma migração tranquila. No entanto, algumas expressões de fuso horário não são atualmente compatíveis com o Snowflake e gerarão uma mensagem de diferença funcional durante a migração.

  • Africa/Douala

  • Asia/Ulaanbaatar

  • Asia/Yekaterinburg

  • Canada/Saskatchewan

  • Central Standard Time (CST)

  • Pacific Standard Time (PST)

  • US/Pacific

Práticas recomendadas

SSC-FDM-0014

Nota

Este FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-0035.

Descrição

A restrição _ CHECK _ não é compatível com o Snowflake, mas essa limitação não afeta a funcionalidade do seu banco de dados.

Exemplo de código

Código de entrada Oracle:
 CREATE TABLE "Schema"."BaseTable"(
  "COLUMN1" VARCHAR2(255),
  CHECK ( COLUMN1 IS NOT NULL )
);
Copy
Código gerado:
 CREATE OR REPLACE TABLE "Schema"."BaseTable" (
    "COLUMN1" VARCHAR(255)
--                          ,
--    --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
--    CHECK ( COLUMN1 IS NOT NULL )
  )
  COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
  ;
Copy
Código de entrada Teradata:
 CREATE TABLE TABLE1,
    NO FALLBACK,
    NO BEFORE JOURNAL,
    NO AFTER JOURNAL
(
    COL0 BYTEINT,
    CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
Copy
Código gerado:
 CREATE TABLE TABLE1
(
    COL0 BYTEINT
--                ,
--    --** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
--    CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy
Código de entrada SqlServer
 ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name 
CHECK NOT FOR REPLICATION (column_name > 1);
Copy
Código gerado:
 ALTER TABLE IF EXISTS table_name2
ADD column_name VARCHAR(255)
----** SSC-FDM-0014 - CHECK STATEMENT NOT SUPPORTED **
--CONSTRAINT constraint_name
--CHECK NOT FOR REPLICATION (column_name > 1)
                                           ;
Copy

Práticas recomendadas

SSC-FDM-0015

Descrição

Esse erro ocorre quando o SnowConvert não consegue encontrar nenhum dos dois:

  • Uma definição de Custom Type definida pelo usuário

  • Um tipo de dados Oracle incorporado reconhecido

Exemplo de código

Código de entrada (Oracle):
 --Type was never defined
--CREATE TYPE type1;

CREATE TABLE table1
(
column1 type1
);
Copy
Código gerado:
 --Type was never defined
--CREATE TYPE type1;

CREATE OR REPLACE TABLE table1
(
column1 VARIANT /*** SSC-FDM-TS0015 - DATA TYPE TYPE1 IS NOT SUPPORTED IN SNOWFLAKE ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
;
Copy

Práticas recomendadas

  • Confirme se o tipo de dados foi definido corretamente em seu código-fonte.

  • Analise os tipos de dados do Snowflake documentation para encontrar um tipo de dados correspondente.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0016

Descrição

O Snowflake Scripting não oferece suporte a valores constantes. Quando o recurso Snowflake Scripting está ativado, todas as constantes dentro dos procedimentos são automaticamente convertidas em variáveis.

Exemplo de código

Oracle:
 CREATE OR REPLACE PROCEDURE p_constants
AS
my_const1 CONSTANT NUMBER := 40;
my_const2 CONSTANT NUMBER NOT NULL := 40;
BEGIN
NULL;
END;
Copy
Script Snowflake
 CREATE OR REPLACE PROCEDURE p_constants ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
my_const1 NUMBER(38, 18) := 40;
--** SSC-FDM-0016 - CONSTANTS ARE NOT SUPPORTED BY SNOWFLAKE SCRIPTING. IT WAS TRANSFORMED TO A VARIABLE **
--** SSC-FDM-OR0025 - NOT NULL CONSTRAINT IS NOT SUPPORTED BY SNOWFLAKE **
my_const2 NUMBER(38, 18) := 40;
BEGIN
NULL;
END;
$$;
Copy

Práticas recomendadas

SSC-FDM-0017

Descrição

O controle de versão do sistema, ativado pela cláusula WITH SYSTEM VERSIONING em ANSI SQL, rastreia as alterações históricas nos dados da tabela. No entanto, esse recurso não está disponível atualmente no Snowflake.

Exemplo de código

Código de entrada:
 CREATE TABLE t1 (
    ID INT PRIMARY KEY,
    Name VARCHAR(50),
    SysStartTime TIMESTAMP,
    SysEndTime TIMESTAMP
) WITH SYSTEM VERSIONING;
Copy
Código gerado:
 CREATE TABLE t1 (
    ID INT PRIMARY KEY,
    Name VARCHAR(50),
    SysStartTime TIMESTAMP,
    SysEndTime TIMESTAMP
)
----** SSC-FDM-0017 - WITH SYSTEM VERSIONING CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
--WITH SYSTEM VERSIONING
                      ;
Copy

Práticas recomendadas

  • O recurso Time Travel do Snowflake permite que você acesse dados históricos, inclusive dados alterados ou excluídos, dentro de um período de tempo específico. Esse recurso permite:

    • Recuperar objetos de dados excluídos acidentalmente ou intencionalmente (tabelas, esquemas e bancos de dados)

    • Criar cópias e backups de dados de pontos específicos no tempo

    • Rastrear e analisar como os dados foram usados ou modificados ao longo do tempo

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0018

Descrição

A opção de coluna CHARACTER SET, que define os caracteres permitidos que podem ser armazenados em uma coluna, não é compatível com o Snowflake.

Exemplo de código

Código de entrada:
 CREATE TABLE TABLE01(
    COLNAME VARCHAR(20) CHARACTER SET character_specification
);
Copy
Código gerado:
 CREATE TABLE TABLE01 (
    COLNAME VARCHAR(20)
--                        --** SSC-FDM-0018 - CHARACTER SET CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
--                        CHARACTER SET character_specification
);
Copy

Práticas recomendadas

SSC-FDM-0019

Descrição

Esse aviso indica que o SnowConvert não pôde acessar as informações semânticas de um objeto específico. Isso geralmente ocorre quando há vários objetos com nomes idênticos em seu código. Quando isso acontece, o SnowConvert não consegue analisar adequadamente as informações semânticas do objeto.

Exemplo de código

Código de entrada:
 CREATE TABLE T1
(
    COL1 INTEGER
);


CREATE TABLE T1
(
    COL2 INTEGER
);
Copy
Código gerado:
 CREATE OR REPLACE TABLE T1
(
    COL1 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

--** SSC-FDM-0019 - SEMANTIC INFORMATION COULD NOT BE LOADED FOR T1. CHECK IF THE NAME IS INVALID OR DUPLICATED. **
CREATE TABLE T1
(
    COL2 INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;
Copy

Práticas recomendadas

  • Verifique se há objetos duplicados em seu código de entrada, pois eles podem interferir no carregamento adequado das informações semânticas.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0020

Descrição

Um procedimento do Snowflake Scripting só pode retornar um conjunto de resultados quando executado.

Quando um procedimento precisa retornar vários conjuntos de resultados (semelhante ao comportamento do Teradata), os resultados são armazenados em tabelas temporárias. O procedimento Snowflake Scripting retorna uma matriz que contém os nomes dessas tabelas temporárias.

Exemplo de código

Código de entrada (Teradata):
 REPLACE MACRO sampleMacro AS 
(
    SELECT CURRENT_DATE AS DT;
    SELECT CURRENT_DATE AS DT_TWO;
);
Copy
Código gerado:
 CREATE OR REPLACE PROCEDURE sampleMacro ()
RETURNS ARRAY
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"teradata"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        return_arr ARRAY := array_construct();
        tbl_nm VARCHAR;
    BEGIN
        tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
        CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
            SELECT
                CURRENT_DATE() AS DT;
        return_arr := array_append(return_arr, :tbl_nm);
        tbl_nm := 'RESULTSET_' || REPLACE(UPPER(UUID_STRING()), '-', '_');
        CREATE OR REPLACE TEMPORARY TABLE IDENTIFIER(:tbl_nm) AS
            SELECT
                CURRENT_DATE() AS DT_TWO;
        return_arr := array_append(return_arr, :tbl_nm);
        --** SSC-FDM-0020 - MULTIPLE RESULT SETS ARE RETURNED IN TEMPORARY TABLES **
        RETURN return_arr;
    END;
$$;
Copy

Práticas recomendadas

  • Execute uma consulta SELECT usando os nomes de tabelas temporárias retornados pelo procedimento para visualizar os resultados.

  • Mantenha os procedimentos simples, fazendo-os retornar um único conjunto de resultados em vez de vários. Isso facilita o manuseio dos resultados.

  • Para obter ajuda adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0021

Descrição

O Snowflake não usa índices de banco de dados tradicionais. Em vez disso, ele cria e gerencia automaticamente as micropartições de todas as tabelas para otimizar o desempenho das consultas. Ao usar o SnowConvert, qualquer código relacionado à criação de índices será comentado, pois não é necessário no Snowflake. Essas micropartições aumentam automaticamente a velocidade das operações do DML sem exigir nenhum gerenciamento manual.

Embora essa configuração normalmente ofereça um bom desempenho de consulta, você pode otimizá-la ainda mais implementando chaves de clustering de dados. Para obter mais detalhes sobre micropartições e clustering de dados, consulte Micropartições e clustering de dados.

Exemplo de código

Código de entrada (Oracle):
 CREATE INDEX index1
ON table1(column1);
Copy
Código gerado:
 ----** SSC-FDM-0021 - CREATE INDEX IS NOT SUPPORTED BY SNOWFLAKE **
----** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "table1" **
--CREATE INDEX index1
--ON table1(column1)
                  ;
Copy

Práticas recomendadas

  • O clustering de dados pode melhorar o desempenho da consulta, organizando os dados em tabelas de forma mais eficiente.

  • Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0022

Gravidade

Ruim

Descrição

Um aviso aparece quando uma unidade de quadro de janela não suportada foi convertida em linhas, o que pode causar diferenças na saída. Por exemplo, o Snowflake não é compatível com a unidade GROUPS, portanto, ela deve ser convertida em linhas.

Observe que essa mensagem aparece quando uma unidade de quadro de janela não é totalmente compatível ou precisa ser modificada. Isso inclui casos em que a unidade RANGE requer alterações.

Exemplo de código

Aqui está um exemplo de conjunto de dados que usaremos para explicar o conceito.

C_NAME

C_BIRTH_DAY

USA

1

USA

4

Polônia

9

Canadá

10

USA

5

Canadá

12

Costa Rica

3

Polônia

4

USA

2

Costa Rica

7

Costa Rica

10

Oracle:
SELECT
    C_NAME,
    SUM(C_BIRTH_DAY)
    OVER (ORDER BY C_BIRTH_DAY
    RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS MAX1
FROM WINDOW_TABLE;
Copy

C_NAME

MAX1

USA

-

USA

1

Costa Rica

3

USA

6

Polônia

6

USA

14

Costa Rica

19

Polônia

26

Canadá

35

Costa Rica

35

Canadá

55

Snowflake:
 SELECT
    C_NAME,
    SUM(C_BIRTH_DAY)
    OVER (ORDER BY C_BIRTH_DAY ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING /*** SSC-FDM-0022 - WINDOW FRAME UNIT 'RANGE' WAS CHANGED TO ROWS ***/) AS MAX1
    FROM
WINDOW_TABLE;
Copy

C_NAME

MAX1

USA

-

USA

1

Costa Rica

3

USA

6

Polônia

10

USA

14

Costa Rica

19

Polônia

26

Canadá

35

Costa Rica

45

Canadá

55

Recomendações

  • Adicione uma cláusula ORDER BY às suas consultas para garantir uma ordenação consistente das linhas ao executar no Snowflake.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0023

Gravidade

Intermediário

Descrição

O SnowConvert converte as tabelas Global Temporary em comandos Create Table padrão. Observe que quaisquer referências a essas tabelas transformadas podem não funcionar como originalmente planejado.

Exemplo de código

Entrada
 create global temporary table t1 
    (col1 varchar); 
create view view1 as 
    select col1 from t1;
Copy
Saída
 --** SSC-FDM-0009 - GLOBAL TEMPORARY TABLE FUNCTIONALITY NOT SUPPORTED. **
CREATE OR REPLACE TABLE t1
    (col1 varchar)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE VIEW view1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
AS
select col1 from
    --** SSC-FDM-0023 - A Global Temporary Table is being referenced **
    t1;
Copy

Recomendações

SSC-FDM-0024

Nota

Esse recurso FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-0058.

Descrição

Esse erro ocorre quando você tenta usar uma instrução não suportada em um comando CREATE PROCEDURE no Snowflake Scripting.

Exemplo de código

Código de entrada (Oracle):
 CREATE OR REPLACE PROCEDURE PROC01
IS
  number_variable INTEGER;
BEGIN
  EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL' INTO number_variable;
END;
Copy
Código gerado:
 CREATE OR REPLACE PROCEDURE PROC01 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    number_variable INTEGER;
  BEGIN
    EXECUTE IMMEDIATE 'SELECT 1 FROM DUAL'
--                                           --** SSC-FDM-0024 - FUNCTIONALITY FOR 'EXECUTE IMMEDIATE RETURNING CLAUSE' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING **
--                                           INTO number_variable
                                                               ;
  END;
$$;
Copy

Recomendações

SSC-FDM-0026

Nota

Esse recurso FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-0028.

Descrição

Esse erro ocorre quando você tenta usar um tipo de dados que não é compatível com o Snowflake.

Exemplo

Código de entrada (Oracle):
 CREATE TABLE MYTABLE
(
    COL1 SYS.ANYDATASET
);
Copy
Código gerado:
 CREATE OR REPLACE TABLE MYTABLE
    (
    --** SSC-FDM-0026 - TYPE NOT SUPPORTED BY SNOWFLAKE **
        COL1 SYS.ANYDATASET
    )
    COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
    ;
Copy

Recomendações

SSC-FDM-0027

Nota

Para facilitar a leitura, simplificamos algumas seções do código de saída.

Descrição

Essa mensagem indica que uma instrução do código-fonte não pode ser convertida para o Snowflake porque não há funcionalidade equivalente no Snowflake. A instrução não é mais necessária e será removida do código convertido. No entanto, o SC preserva a instrução original como um comentário para referência.

Exemplo de código

Código de entrada:
 .LOGTABLE tduser.Employee_log;  
   .BEGIN MLOAD TABLES Employee_Stg;  
      .LAYOUT Employee;  
      .FIELD in_EmployeeNo * VARCHAR(10);  
      .FIELD in_FirstName * VARCHAR(30); 
      .FIELD in_LastName * VARCHAR(30);  
      .FIELD in_BirthDate * VARCHAR(10); 
      .FIELD in_JoinedDate * VARCHAR(10);  
      .FIELD in_DepartmentNo * VARCHAR(02);

      .dml label EmpLabel
  IGNORE DUPLICATE INSERT ROWS; 
      INSERT INTO Employee_Stg (
         EmployeeNo,
         FirstName,
         LastName,
         BirthDate,
         JoinedDate,
         DepartmentNo
      )  
      VALUES (
         :in_EmployeeNo,
         :in_FirstName,
         :in_Lastname,
         :in_BirthDate,
         :in_JoinedDate,
         :in_DepartmentNo
      );
      .IMPORT INFILE employee.txt  
      FORMAT VARTEXT ','
      LAYOUT Employee
      APPLY EmpLabel;  
   .END MLOAD;  
LOGOFF;
Copy
Código gerado:
 #*** Generated code is based on the SnowConvert Python Helpers version 2.0.6 ***
// SnowConvert Helpers Code section is omitted.
 
import os
import sys
import snowconvert.helpers
from snowconvert.helpers import Export
from snowconvert.helpers import exec
from snowconvert.helpers import BeginLoading
con = None
def main():
  snowconvert.helpers.configure_log()
  con = snowconvert.helpers.log_on()
  #** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE.  **
  #.LOGTABLE tduser.Employee_log
   
  #** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE.  **
  #.BEGIN MLOAD TABLES Employee_Stg
   
  Employee_TableName = "Employee_TEMP_TABLE"
  Employee_Columns = """in_EmployeeNo VARCHAR(10), 
in_FirstName VARCHAR(30), 
in_LastName VARCHAR(30), 
in_BirthDate VARCHAR(10), 
in_JoinedDate VARCHAR(10), 
in_DepartmentNo VARCHAR(02)"""
  Employee_Conditions = """in_EmployeeNo AS in_EmployeeNo, in_FirstName AS in_FirstName, in_LastName AS in_LastName, in_BirthDate AS in_BirthDate, in_JoinedDate AS in_JoinedDate, in_DepartmentNo AS in_DepartmentNo"""
  def EmpLabel(tempTableName, queryConditions = ""):
    exec(f"""INSERT INTO Employee_Stg (EmployeeNo, FirstName, LastName, BirthDate, JoinedDate, DepartmentNo)
SELECT
   SRC.in_EmployeeNo,
   SRC.in_FirstName,
   :in_Lastname,
   SRC.in_BirthDate,
   SRC.in_JoinedDate,
   SRC.in_DepartmentNo
FROM {tempTableName} SRC {queryConditions}""")
  #** SSC-FDM-0027 - REMOVED NEXT STATEMENT, NOT APPLICABLE IN SNOWFLAKE. TRANSLATED BELOW **
  #.IMPORT INFILE employee.txt FORMAT VARTEXT ',' LAYOUT Employee APPLY EmpLabel
   
  snowconvert.helpers.import_file_to_temptable(fr"employee.txt", Employee_TableName, Employee_Columns, Employee_Conditions, ',')
  EmpLabel(Employee_TableName)
  exec(f"""DROP TABLE {Employee_TableName}""")

  if con is not None:
    con.close()
    con = None
  snowconvert.helpers.quit_application()

if __name__ == "__main__":
  main()
Copy

Recomendações

SSC-FDM-0028

Nota

Esse recurso FDM não é mais suportado. Para obter mais informações, consulte SSC-EWI-0021.

Descrição

Esse erro ocorre quando seu código-fonte contém um nó ou instrução que não é compatível com a funcionalidade do Snowflake.

Exemplo de código

Código de entrada:
 WITH my_av ANALYTIC VIEW AS
(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 )))) 
SELECT aValue from my_av;
Copy
Código de saída:
 ----** SSC-FDM-0028 - SubavFactoring NOT SUPPORTED IN SNOWFLAKE **
--WITH my_av ANALYTIC VIEW AS
--(USING sales_av HIERARCHIES(time_hier) ADD MEASURES(lag_sales AS (LAG(sales) OVER (HIERARCHY time_hier OFFSET 1 ))))
--SELECT aValue from my_av
                        ;
Copy

Recomendações

  • Esse erro ocorre quando não há funcionalidade equivalente do Snowflake para o código-fonte que está sendo convertido.

  • Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0029

Gravidade

Mínimo

Descrição

As funções definidas pelo usuário do Snowflake têm recursos diferentes em comparação com o Oracle ou o SQL Server. Ao migrar essas funções para o Snowflake, elas são convertidas em procedimentos armazenados para manter a mesma funcionalidade. Essa conversão mudará a forma como você os utiliza em suas consultas.

Exemplo de código

SQL Server:
 CREATE OR ALTER FUNCTION PURCHASING.FOO()
RETURNS INT
AS
BEGIN
    DECLARE @i int = 0, @p int;
    Select @p = COUNT(*) FROM PURCHASING.VENDOR
    
    WHILE (@p < 1000)
    BEGIN
        SET @i = @i + 1
        SET @p = @p + @i
    END
        
    IF (@i = 6)
        RETURN 1
    
    RETURN @p
END;
Copy
 --** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE PURCHASING.FOO ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"transact"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        I INT := 0;
        P INT;
    BEGIN
         
        Select
            COUNT(*)
        INTO
            :P
 FROM
            PURCHASING.VENDOR;
        WHILE (:P < 1000) LOOP
            I := :I + 1;
            P := :P + :I;
        END LOOP;
        IF ((:I = 6)) THEN
            RETURN 1;
        END IF;
        RETURN :P;
    END;
$$;
Copy
Oracle:
 CREATE FUNCTION employee_function (param1 in NUMBER) RETURN NUMBER is
  var1    employees.employee_ID%TYPE;
  var2    employees.manager_ID%TYPE;
  var3    employees.title%TYPE;
BEGIN
  SELECT employee_ID, manager_ID, title
  INTO var1, var2, var3
  FROM employees
    START WITH manager_ID = param1
    CONNECT BY manager_ID = PRIOR employee_id;
  RETURN var1;
EXCEPTION
   WHEN no_data_found THEN RETURN param1;
END employee_function;
Copy
 --** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **
CREATE OR REPLACE PROCEDURE employee_function (param1 NUMBER(38, 18))
RETURNS NUMBER(38, 18)
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "11/14/2024",  "domain": "test" }}'
EXECUTE AS CALLER
AS
$$
  DECLARE
    var1    employees.employee_ID%TYPE;
    var2    employees.manager_ID%TYPE;
    var3    employees.title%TYPE;
  BEGIN
    SELECT employee_ID, manager_ID, title
    INTO
      :var1,
      :var2,
      :var3
    FROM
      employees
      START WITH manager_ID = :param1
    CONNECT BY
      manager_ID = PRIOR employee_id;
    RETURN :var1;
  EXCEPTION
     WHEN no_data_found THEN
      RETURN :param1;
  END;
$$;
Copy

Práticas recomendadas

  • Dividir consultas complexas em consultas menores e individuais, preservando a lógica original.

  • Reestruture o código-fonte para alinhar-se com as funções definidas pelo usuário do Snowflake approach.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0030

Descrição

O identificador contém caracteres que não são compatíveis com o idioma de saída. Esses caracteres foram substituídos por seus códigos correspondentes em UTF-8.

Exemplo de código

Código de entrada (Oracle):
 CREATE PROCEDURE PROC1
AS
    "VAR0" INT;
    "VAR`/1ͷ" VARCHAR(20);
    "o*/o" FLOAT;
    " . " INT;
    ". ." INT;
    "123Name" INT;
    "return" INT;
    yield INT;
    ident#10 INT;
BEGIN
    NULL;
END;
Copy
Código de saída:
 CREATE OR REPLACE PROCEDURE PROC1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        "VAR0" INT;
        --** SSC-FDM-0030 - IDENTIFIER '"VAR`/1ͷ"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
        VAR_u60_u2F1_uCD_B7 VARCHAR(20);
        --** SSC-FDM-0030 - IDENTIFIER '"o*/o"' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
        o_u2A_u2Fo FLOAT;
        --** SSC-FDM-0030 - IDENTIFIER '" . "' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
        _u20_u2E_u20 INT;
        --** SSC-FDM-0030 - IDENTIFIER '". ."' HAS INVALID CHARACTERS. CHARACTERS WERE REPLACED WITH THEIR UTF-8 CODES **
        _u2E_u20_u2E INT;
        "123Name" INT;
        "return" INT;
        yield INT;
        IDENT_HASHTAG_10 INT;
    BEGIN
        NULL;
    END;
$$;
Copy

Recomendações

SSC-FDM-0031

Descrição

O Snowflake converte exibições materializadas (e índices de junção do Teradata) em tabelas dinâmicas. Ao criar tabelas dinâmicas no Snowflake, você deve especificar dois parâmetros obrigatórios:

  • TARGET_LAG: Define o tempo máximo de atraso permitido

  • WAREHOUSE: Especifica o warehouse virtual a ser usado

Se você não especificar esses parâmetros nas opções de configuração, o sistema aplicará automaticamente os valores padrão durante o processo de conversão.

Leia mais sobre os parâmetros necessários para as tabelas dinâmicas aqui.

Exemplo de código

Código de entrada (Oracle):
 CREATE MATERIALIZED VIEW mv1
AS SELECT * FROM table1;
Copy
Código de saída:
 CREATE OR REPLACE DYNAMIC TABLE mv1
--** 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":"oracle"}}'
AS
--** SSC-FDM-0001 - VIEWS SELECTING ALL COLUMNS FROM A SINGLE TABLE ARE NOT REQUIRED IN SNOWFLAKE AND MAY IMPACT PERFORMANCE. **
SELECT * FROM
table1;
Copy

Recomendações

  • Configure os parâmetros da tabela dinâmica com base em seus requisitos específicos.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0032

Descrição

Ao realizar várias transformações, o SnowConvert precisa verificar os valores dos parâmetros. Esse processo de verificação só pode ser concluído quando os parâmetros contêm valores reais (literais) em vez de variáveis ou expressões.

Esse aviso aparece quando o SnowConvert não consegue determinar o valor de um parâmetro porque ele foi passado por referência. Como resultado, a função ou instrução não pode ser totalmente transformada.

Exemplo de código

Código de entrada (Redshift):
 SELECT TO_CHAR(DATE '2001-01-01', 'YYY/MM/DD'),
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
Copy
Código de saída:
 SELECT
PUBLIC.YEAR_PART_UDF(DATE '2001-01-01', 3) || TO_CHAR(DATE '2001-01-01', '/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(DATE '2001-01-01', f)
FROM (SELECT 'YYY/MM/DD' as f);
Copy

Recomendações

  • Sempre que possível, use um valor literal para o parâmetro especificado.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com

SSC-FDM-0033

Descrição

Esta mensagem explica as diferenças no comportamento de amostragem de linhas entre o Teradata e o Snowflake. Enquanto o Teradata retorna um número consistente de linhas em sua amostragem não determinística, o Snowflake pode retornar um pouco mais ou menos linhas. Essa variação na contagem de linhas é normal e esperada no Snowflake devido à sua abordagem de amostragem baseada em probabilidade.

Para garantir resultados consistentes e reproduzíveis ao recuperar dados do Snowflake, é recomendável usar um valor de semente em sua consulta. Isso gerará um resultado determinístico, o que significa que você obterá os mesmos valores e a mesma quantidade de resultados sempre que executar a consulta.

Exemplo de código

Código de entrada (Teradata):
 SELECT * FROM Employee SAMPLE 2;
SELECT * FROM Employee SAMPLE 0.25;
Copy
Código de saída:
 SELECT
    * FROM
    Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(2 ROWS);

SELECT
    * FROM
    Employee
--** SSC-FDM-0033 - SAMPLE CLAUSE BEHAVES DIFFERENTLY IN SNOWFLAKE **
SAMPLE(25);
Copy

Recomendações

  • Para obter resultados determinísticos, inclua a parte da semente de sua consulta.

  • Para obter assistência adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com