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;
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;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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);
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
);
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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']
);
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']
-- )
;
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
);
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"}}'
;
Práticas recomendadas¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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)
);
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"}}'
;
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;
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;
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;
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;
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 usamNUMBER(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;
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;
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
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"}}'
;
Práticas recomendadas¶
Não é necessária nenhuma ação da sua parte.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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)
);
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"}}'
;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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
);
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"}}'
;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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
);
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"}}'
;
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
);
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"}}'
;
Práticas recomendadas¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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;
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;
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);
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 ***/;
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¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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 )
);
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"}}'
;
Código de entrada Teradata:¶
CREATE TABLE TABLE1,
NO FALLBACK,
NO BEFORE JOURNAL,
NO AFTER JOURNAL
(
COL0 BYTEINT,
CONSTRAINT constraint_name CHECK (COL1 < COL2)
)
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"}}'
;
Código de entrada SqlServer¶
ALTER TABLE table_name2
ADD column_name VARCHAR(255)
CONSTRAINT constraint_name
CHECK NOT FOR REPLICATION (column_name > 1);
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)
;
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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
);
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"}}'
;
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;
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;
$$;
Práticas recomendadas¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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;
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
;
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
);
Código gerado:¶
CREATE TABLE TABLE01 (
COLNAME VARCHAR(20)
-- --** SSC-FDM-0018 - CHARACTER SET CLAUSE IS NOT SUPPORTED BY SNOWFLAKE. **
-- CHARACTER SET character_specification
);
Práticas recomendadas¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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
);
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"}}'
;
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;
);
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;
$$;
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);
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)
;
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;
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;
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;
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;
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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;
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;
$$;
Recomendações¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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
);
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"}}'
;
Recomendações¶
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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;
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()
Recomendações¶
Para obter suporte adicional, entre em contato com nossa equipe de suporte pelo e-mail snowconvert-support@snowflake.com
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;
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
;
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;
--** 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;
$$;
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;
--** 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;
$$;
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;
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;
$$;
Recomendações¶
Nenhuma ação é exigida dos usuários.
Para obter suporte adicional, entre em contato conosco pelo e-mail snowconvert-support@snowflake.com
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;
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;
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);
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);
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;
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);
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