SnowConvert AI – Problemas com o Teradata¶
SSC-EWI-TD0001¶
Erro de alias de encaminhamento recursivo.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Low
Descrição¶
Este EWI é exibido sempre que o SnowConvert AI detecta recursão em expressões com alias; portanto, não é possível executar a transformação de alias de encaminhamento necessária para o funcionamento correto dos aliases no ambiente Snowflake.
Um alias recursivo ocorre quando uma expressão com alias contém outro alias, e a segunda expressão com alias contém o primeiro alias. Isso pode não ser tão trivial quanto o exemplo mostra, já que a recursão pode ocorrer mais adiante na linha de forma transitiva.
Exemplo de código¶
Observação: aliases recursivos não são compatíveis com o Snowflake; porém, algumas instâncias simples são.
Nota
Observe que aliases recursivos não são compatíveis com o Snowflake; porém, algumas instâncias simples são. Confira os exemplos abaixo.
O seguinte código de exemplo funciona no Snowflake após a migração:
Teradata:¶
Snowflake Scripting:¶
No entanto, o seguinte código de exemplo não funciona:
Teradata:¶
Snowflake Scripting:¶
Práticas recomendadas¶
Revise seu código e certifique-se de que não haja aliases de encaminhamento recursivos. O EWI mostra o nome da primeira instância de um alias que tem referências recursivas, mas isso não significa que ele seja o único que as tem em seu código.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0002¶
Tipo de intervalo não compatível.
Este EWI está obsoleto desde a versão SnowConvert AI 28.1.100
Severity
High
Description
When the selector of a column in a SQL statement is type INTERVAL, the EWI will be added and a Stub function will be created too. This is a type that is not supported in Snowflake and therefore implies pending work after SnowConvert AI finishes.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0003
Agrupamento não é compatível com funções de remoção de caracteres; adicione o agrupamento original ao resultado da função para preservá-la.
Severity
Low
Description
No Snowflake, as funções de remoção de caracteres (LTRIM, RTRIM, ou TRIM) não são compatíveis com agrupamento, a menos que os caracteres a serem removidos estejam vazios ou sejam espaços em branco.
Se o SnowConvertAI detectar uma função LTRIM, RTRIM ou TRIM LEADING, TRAILING, ou ambas com o cenário mencionado acima, a função COLLATE será gerada automaticamente para criar uma cópia sem agrupamento da coluna de entrada. Este EWI é gerado para indicar que o agrupamento da coluna foi removido antes da função de remoção de caracteres, o que significa que o resultado da função não terá agrupamento e que isso poderá alterar os resultados de comparações posteriores usando o resultado.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Para evitar diferenças funcionais durante as comparações, adicione a ordenação original da coluna à cadeia de caracteres de resultado da função
TRIM. Isso pode ser feito usando a funçãoCOLLATEe especificando a ordenação original da coluna como segundo argumento. Esse argumento deve ser uma cadeia de caracteres literal com o valor do agrupamento.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0004
Exceção SQL não compatível com o manipulador Continue.
Severity
Low
Description
Nos procedimentos do Snowflake, não existe uma transformação equivalente para o manipulador Continue do Teradata. Para alguns códigos de exceção compatíveis, o SnowConvert AI realiza algum tratamento para emular esse comportamento. Este EWI é adicionado às instruções do manipulador Continue que têm um código de exceção não compatível.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Verifique as possíveis instruções que podem gerar o código de exceção e encapsule-as em um bloco de código semelhante ao visto em Referência de tradução do manipulador Continue.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0005
A instrução foi convertida, mas a funcionalidade dela ainda não foi implementada.
Severity
Crítico
Description
A instrução foi reconhecida e convertida, mas o código convertido não terá a funcionalidade esperada porque a implementação ainda não foi concluída.
O aviso foi adicionado para que o usuário esteja ciente de que, quando o script usar esta instrução, ele não terá a equivalência funcional esperada.
Exemplo de fonte
Código de entrada BTEQ:
Código de saída Python:
Best Practices
Para mais informações, consulte a especificação de tradução de BTEQ para Python.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0006
Valor padrão inválido.
Severity
Low
Description
As especificações de coluna DEFAULT TIME / DEFAULT DATE / DEFAULT CURREN_DATE / DEFAULT DEFAULT CURRENT_TIME / DEFAULT CURRENT_TIMESTAMP não são compatíveis com o tipo de dados FLOAT.
Example Code
Teradata:
CREATE TABLE T_2004
(
-- In the output code all of these columns will be FLOAT type
-- and will include the SSC-EWI-TD0006 message.
COL1 FLOAT DEFAULT TIME,
COL2 FLOAT DEFAULT DATE,
COL3 FLOAT DEFAULT CURRENT_DATE,
COL4 FLOAT DEFAULT CURRENT_TIME,
COL5 FLOAT DEFAULT CURRENT_TIMESTAMP
);
Snowflake Scripting:
Best Practices
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0007
Cláusula GROUP BY não compatível no modo Teradata para comparação de cadeias de caracteres.
Severity
Low
Description
Esta mensagem de erro indica um possível problema ao migrar consultas SQL do Teradata para o Snowflake, particularmente relacionado a diferenças em como a cláusula GROUP BY lida com a diferenciação de maiúsculas e minúsculas na comparação de cadeias de caracteres no modo Teradata.
No modo Teradata, as comparações de cadeias de caracteres nas cláusulas GROUP BY não diferenciam maiúsculas e minúsculas por padrão (NOT CASESPECIFIC), enquanto o Snowflake diferencia, a menos que as colunas sejam definidas explicitamente com uma cláusula COLLATE que não diferencia maiúsculas de minúsculas. Essa diferença pode fazer com que consultas que dependem de agrupamentos que não diferenciam maiúsculas de minúsculas no Teradata produzam resultados diferentes no Snowflake.
Example Code
Teradata:
Snowflake Scripting:
Diferenças de comportamento esperadas
Plataforma |
Comportamento de agrupamento |
Exemplo de linhas de resultado |
|---|---|---|
Modo Teradata |
Agrupa «John», «JOHN» e «john» |
|
Snowflake |
Trata «John», «JOHN» e «john» como separados |
|
Best Practices
Revise as cláusulas GROUP BY que envolvem colunas de cadeia de caracteres ao migrar do modo Teradata para garantir o comportamento de agrupamento esperado.
Observação: ao usar expressões como RTRIM(UPPER(first_name)) ou RTRIM(first_name) na cláusula GROUP BY para obter agrupamento sem distinção entre maiúsculas e minúsculas ou agrupamento truncado, você deve aplicar a mesma expressão de forma consistente em todas as partes da consulta em que a coluna é referenciada. Por exemplo:
Isso garante que a filtragem, a seleção e o agrupamento usem a mesma lógica, evitando incompatibilidades ou resultados inesperados.
Defina colunas com COLLATE durante a criação da tabela se for necessário um comportamento consistente sem distinção entre maiúsculas e minúsculas:
Habilite o sinalizador –UseCollateForCaseSpecification CLI ou a configuração de conversão para usar COLLATE para especificação de maiúsculas e minúsculas durante a conversão. Essa opção garante que a especificação de maiúsculas e minúsculas (como CASESPECIFIC ou NOT CASESPECIFIC) seja tratada com o uso de funções COLLATE em vez de UPPER. Para obter detalhes, consulte a documentação da CLI ou as configurações de conversão.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0008
A função para comparar cadeias de caracteres não é compatível.
Severity
Low
Description
Atualmente, não há equivalência para algumas funções de comparação de cadeias de caracteres no Snowflake.
Este EWI é adicionado sempre que o tipo de comparação é jaro, n_gram, LD, LDWS, OSA, DL, hamming, LCS, jaccard, cosine e soundexcode.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0009
Coluna TEMPORAL não compatível.
Severity
Low
Description
O Teradata oferece suporte a tabelas temporais no nível da coluna usando colunas de período derivadas. Essas colunas não são compatíveis com o Snowflake.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0010
UPPERCASE não é compatível com o Snowflake.
Severity
Low
Description
O atributo de coluna UPPERCASE não é compatível com o Snowflake.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Como a cláusula
UPPERCASEindica que os caracteres digitados como «aaa» são armazenados como «AAA», uma possível solução alternativa seria adicionar a função UPPER a todas as referências de inserção. No entanto, o carregamento de dados externos por processos ETL também teria que ser modificado.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0012
Binário não é compatível com o padrão.
Severity
Low
Description
Este EWI é exibido quando o SnowConvert AI encontra um tipo de dados BINARY juntamente com uma especificação de valor DEFAULT. Como valores padrão não são permitidos em colunas BINARY, isso é removido.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0017
A funcionalidade de rastreamento de tabela temporária global não é compatível.
Severity
Low
Description
Este EWI é exibido quando o SnowConvert AI encontra uma criação de tabela com a opção GLOBAL TEMPORARY TRACE. Consulte a seguinte documentação da Teradata sobre a funcionalidade TRACE. Como isso não é compatível com o Snowflake, foi removido.
Example Code
Teradata:
Snowflake Scripting:
Best Practices
Nota: Pode ser possível replicar algumas funcionalidades de rastreamento no Snowflake usando um
EVENT TABLE. Consulte a seguinte documentação do Snowflake sobre registro e rastreamento.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0020
A função Regexp_Substr só é compatível com expressões regulares POSIX.
Nota
Esta EWI está obsoleta. Consulte a documentação SSC-EWI-0009.
Gravidade¶
Low
Descrição¶
Atualmente, o Snowflake não é compatível com expressões regulares estendidas além da sintaxe básica de expressões regulares POSIX.
This EWI is added every time a function call to REGEX_SUBSTR, REGEX_REPLACE, or REGEX_INSTR is transformed to Snowflake to warn the user about possible unsupported regular expressions. Some of the features not supported are lookahead, lookbehind, and non-capturing groups.
Exemplo de código¶
Teradata:¶
Snowflake Scripting:¶
Práticas recomendadas¶
Check the regular expression used in each case to determine whether it needs manual intervention. More information about expanded regex support and alternatives in Snowflake can be found here.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0023¶
ACTIVITY_COUNT dentro de SELECT/SET INTO VARIABLE requer correção manual.
Gravidade¶
Low
Descrição¶
The ACTIVITY_COUNT status variable returns the number of rows affected by an SQL DML statement in an embedded SQL or stored procedure application. For more information, see the Teradata ACTIVITY_COUNT documentation.
Conforme explicado em sua especificação de tradução, existe uma solução alternativa para emular o comportamento de ACTIVITY_COUNT através de:
Ao usar ACTIVITY_COUNT em uma instrução SELECT/SET INTO VARIABLE, ela não pode ser simplesmente substituída pela solução alternativa mencionada acima.
Exemplo de código¶
Teradata¶
REPLACE PROCEDURE InsertEmployeeSalaryAndLog_4 ()
BEGIN
DECLARE rowCount INT;
DECLARE message VARCHAR(100);
INSERT INTO employees (employee_id, first_name, last_name, department_id, salary)
VALUES (101, 'Alice', 'Smith', 10, 70000.00);
SELECT ACTIVITY_COUNT INTO rowCount;
SET message = 'ROWS INSERTED: ' || rowCount;
-- Insert the ACTIVITY_COUNT into the activity_log table
INSERT INTO activity_log (operation, row_count)
VALUES (message, rowCount);
END;
Snowflake¶
Correção manual¶
Parte da solução alternativa apresentada acima pode ser utilizada para ainda obter o número de linhas inseridas/atualizadas/excluídas da seguinte forma:
Em vez de usar a consulta completa, ela precisa ser adaptada manualmente à sintaxe SELECT INTO VARIABLE do Snowflake.
Além disso, se RESULT_SCAN(LAST_QUERY_ID()) estiver fornecendo resultados incorretos, verifique SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033) para saber como lidar com possíveis limitações do uso de LAST_QUERY_ID.
Práticas recomendadas¶
Adapte manualmente a solução alternativa proposta.
Consulte SSC-FDM-TD0033(../functional-difference/teradataFDM.md#ssc-fdm-td0033) para saber como lidar com possíveis limitações do uso de
LAST_QUERY_ID.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0024¶
A instrução abort não é compatível devido a uma função agregada.
Gravidade¶
Low
Descrição¶
Este EWI aparece quando uma função AGGREGATE faz parte de uma instrução ABORT dentro de um procedimento armazenado. A instrução é transformada em comentário.
Exemplo de código¶
Teradata:¶
Snowflake Scripting:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0025¶
Formato de saída não compatível.
Gravidade¶
Low
Descrição¶
Este EWI aparece quando uma função CAST especifica um formato de saída não compatível com o Snowflake Scripting.
Exemplo de código¶
Teradata:¶
Snowflake Scripting:¶
Práticas recomendadas¶
Verifique se o código de saída tem equivalência funcional com o código original.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0027¶
O Snowflake não é compatível com as opções de coluna de dimensões de tempo integradas do Teradata.
Gravidade¶
Low
Descrição¶
O EWI é gerado porque o Snowflake não é compatível com os atributos de dimensões de tempo integrados do Teradata, como VALIDTIME ou TRANSACTIONTIME.
Exemplo de código¶
Entrada Teradata:¶
Saída do Snowflake:¶
Práticas recomendadas¶
Crie manualmente colunas TIMESTAMP com valores padrão, como CURRENT_TIMESTAMP.
Aproveite o uso de fluxos de tabela; eles podem registrar alterações de manipulação de dados feitas nas tabelas, bem como metadados sobre cada alteração. (Guia)
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0029¶
A funcionalidade de tabela de fila não é compatível.
Gravidade¶
Low
Descrição¶
Este aviso aparece quando uma TABLE com o atributo QUEUE é migrada. A palavra-chave QUEUE foi removida porque não é compatível com o Snowflake.
Exemplo de código¶
Entrada:¶
Saída:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0031¶
O resultado pode variar devido ao tipo char ter um comprimento fixo no Teradata.
Gravidade¶
Low
Descrição¶
Como o tipo de dados CHAR do Teradata tem um comprimento fixo, algumas funções, como LIKE, tentarão corresponder à coluna inteira em vez da palavra inserida na coluna, resultando em falsos positivos. No entanto, no Snowflake, o tipo CHAR tem tamanho variável, o que significa que as funções LIKE sempre tentarão corresponder aos valores inseridos. Considere o seguinte código como exemplo:
Exemplo de código¶
Entrada:¶
Saída:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0034¶
SQL com várias instruções não é compatível.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Low
Descrição¶
A execução de SQL com várias instruções não é compatível. A solicitação foi tratada como uma transação.
Nota
O seguinte EWI só é gerado quando o sinalizador de linguagem de destino PL está definido como Javascript, assim: «–PLTargetLanguage Javascript»
Exemplo de código¶
Entrada:¶
-- Additional Params: --PLTargetLanguage Javascript
REPLACE PROCEDURE proc1()
BEGIN
BEGIN REQUEST;
SELECT* FROM TABLE1;
END REQUEST;
END;
Saída:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0039¶
Formato de entrada não compatível.
Gravidade¶
Medium
Descrição¶
O formato de entrada especificado não é compatível com o Snowflake.
Exemplo de código¶
Entrada:¶
Saída:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0040¶
O formato em uma tabela não é compatível.
Gravidade¶
Low
Descrição¶
O formato especificado não é compatível.
Exemplo de código¶
Entrada:¶
Saída:¶
SSC-EWI-TD0041¶
A função trunc foi adicionada para garantir a compatibilidade com números inteiros.
Gravidade¶
Low
Descrição¶
Ao migrar do Teradata para o Snowflake, você pode encontrar diferenças na forma como as conversões numéricas são tratadas. No Teradata, converter um valor para INTEGER truncará implicitamente qualquer parte decimal, mesmo que o valor original seja um número de ponto flutuante ou uma representação em cadeia de caracteres de um número. No entanto, no Snowflake, converter um valor numérico não inteiro ou uma cadeia de caracteres diretamente para INTEGER poderá resultar em erros ou resultados inesperados se o valor ainda não for um número inteiro.
Para garantir a compatibilidade, a função TRUNC() é aplicada antes da conversão para INTEGER. Isso remove qualquer parte decimal, permitindo a conversão segura para um número inteiro. No entanto, se o valor de origem não for numérico ou for uma cadeia de caracteres não numérica, ainda poderão ocorrer erros e uma intervenção manual poderá ser necessária. Por exemplo, se o SnowConvertAI não conseguir determinar o tipo da coluna devido à falta de referências, você pode precisar ajustar a conversão manualmente.
Exemplo de código¶
Entrada:¶
Saída:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0046¶
Referências internas não são compatíveis com o Snowflake.
Gravidade¶
Medium
Descrição¶
Este erro ocorre quando há uma referência a uma tabela DBC e a coluna selecionada não tem equivalência no Snowflake.
Exemplo de código¶
Entrada:¶
Saída:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0049¶
Instrução TPT não processada.
Gravidade¶
High
Descrição¶
Uma instrução DML em TPT não pôde ser processada e convertida pela ferramenta. Isso pode ocorrer por motivos como o uso de concatenação com variáveis de script ou o uso de aspas de escape dentro da instrução DML.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Para este problema, você pode digitar a instrução de inserção manualmente e/ou, como a instrução DML ainda não é compatível, solicitar à equipe do SnowConvert AI que adicione suporte para esse caso específico.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0051¶
Os resultados da função BYTES do Teradata diferem da função LENGTH do Snowflake para colunas de bytes.
Gravidade¶
Low
Descrição¶
Como o tipo de dados byte do Teradata tem um comprimento fixo, a função BYTES sempre contará os zeros à direita inseridos para ajustar valores menores do tipo byte à coluna, retornando o tamanho da coluna em vez do tamanho do valor inserido originalmente. No entanto, o tipo binário do Snowflake tem tamanho variável, o que significa que a função LENGTH sempre retornará o tamanho dos valores inseridos. Considere o seguinte código como exemplo:
Teradata:
Código equivalente no Snowflake:
Exemplo de código:¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Analise o uso dado aos resultados da função BYTES, se o comportamento da função LENGTH do Snowflake era o desejado desde o início e se nenhuma alteração é necessária.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0052¶
A conversão implícita do Snowflake para numérico difere do Teradata e pode falhar para cadeias de caracteres não literais.
Gravidade¶
Low
Descrição¶
Tanto o Teradata quanto o Snowflake permitem que valores de cadeia de caracteres funcionem com parâmetros que esperam valores numéricos; essas cadeias de caracteres são então analisadas e convertidas para seus equivalentes numéricos.
No entanto, existem diferenças sobre o que as duas linguagens consideram uma cadeia de caracteres numérica válida. O Teradata é mais permissivo e analisa com sucesso casos como cadeias de caracteres vazias/apenas com espaços em branco, hifens incorporados, ausência de dígitos na mantissa ou no expoente, símbolos de moeda, separadores de dígitos ou especificação do sinal do número após os dígitos. Por exemplo, as seguintes cadeias de caracteres são válidas:
'1-2-3-4-5' -> 12345'$50' -> 50'5000-' -> -5000'1,569,284.55' -> 1569284.55
O Snowflake aplica conversão automática otimista de cadeia de caracteres, esperando que as cadeias de caracteres correspondam aos formatos TM9 ou TME; portanto, a conversão falha na maioria dos casos mencionados. Para resolver essas diferenças, o SnowConvert AI processa literais de cadeia de caracteres passados para funções que fazem uma conversão implícita para numérico e gera cadeias de caracteres equivalentes que correspondem a TM9 ou TME para que possam ser analisadas pelo Snowflake. Isso só se aplica a valores de cadeia de caracteres literais, o que significa que não há garantia de que valores não literais serão analisados pelo Snowflake.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Não são necessárias ações adicionais do usuário.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0053¶
O Snowflake não é compatível com o tipo de dados de período; todos os períodos são tratados como varchar.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Nota
Este EWI está obsoleto. Consulte a documentação SSC-FDM-TD0036.
Precisão das representações varchar geradas¶
PERIOD_UDF gera a representação varchar de um período usando os formatos padrão para carimbos de data/hora e tempo especificados no Snowflake. Isso significa que os carimbos de data/hora terão três dígitos de precisão e as variáveis de tempo terão zero. Por causa disso, você pode notar que os resultados têm uma precisão maior ou menor do que a esperada. Existem duas opções para modificar quantos dígitos de precisão são incluídos na cadeia de caracteres resultante:
Use a versão de três parâmetros de PERIOD_UDF: Essa sobrecarga da função usa o parâmetro
PRECISIONDIGITS, um número inteiro entre 0 e 9, para controlar quantos dígitos da parte fracionária do tempo serão incluídos no resultado. Observe que, mesmo que o Snowflake seja compatível com até nove dígitos de precisão, o máximo no Teradata é seis. Exemplo:
Chamada |
Resultado |
|---|---|
|
|
|
|
|
|
Altere os parâmetros de sessão
TIMESTAMP_NTZ_OUTPUT_FORMATeTIME_OUTPUT_FORMAT: Os comandosALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = <format>eALTER SESSION SET TIME_OUTPUT_FORMAT = <format>podem ser utilizados para modificar os formatos que o Snowflake usa por padrão para a sessão atual. Modificá-los para incluir o número desejado de dígitos de precisão altera o resultado de execuções futuras de PERIOD_UDF para a sessão atual.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Como o comportamento de
PERIODe as funções relacionadas são emulados usando varchar, recomendamos revisar os resultados obtidos para garantir que tudo esteja correto.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0055¶
Os formatos compatíveis com o Snowflake para TO_CHAR diferem do Teradata e podem falhar ou apresentar comportamento diferente.
Nota
Este EWI está obsoleto. Consulte a documentação SSC-FDM-TD0029.
Elementos de formato que dependem dos parâmetros da sessão¶
Alguns elementos de formato do Teradata são mapeados para funções do Snowflake que dependem do valor dos parâmetros de sessão. Para evitar diferenças funcionais nos resultados, você deve definir esses parâmetros de sessão com os mesmos valores que eles têm no Teradata. Os elementos de formato identificados que são mapeados para esse tipo de função são:
D: mapeado para a função
DAYOFWEEK, os resultados dessa função dependem do parâmetro de sessãoWEEK_START. Por padrão, o Teradata considera o domingo como o primeiro dia da semana, enquanto no Snowflake o primeiro dia é a segunda-feira.WW: mapeado para a função
WEEK, essa função depende do parâmetro de sessãoWEEK_OF_YEAR_POLICY, que por padrão está configurado para usar o padrão ISO (a primeira semana do ano é a primeira a conter pelo menos quatro dias de janeiro), mas, no Teradata, isso está configurado para considerar o primeiro dia de janeiro como o início da primeira semana.
To modify session parameters, use ALTER SESSION SET parameter_name = value. For more information, see the Snowflake session parameters reference.
Versão com um único parâmetro de TO_CHAR¶
A versão com um único parâmetro de TO_CHAR(Datetime) utiliza os formatos padrão especificados nos parâmetros de sessão TIMESTAMP_LTZ_OUTPUT_FORMAT, TIMESTAMP_NTZ_OUTPUT_FORMAT, TIMESTAMP_TZ_OUTPUT_FORMAT e TIME_OUTPUT_FORMAT. Para evitar diferenças de comportamento, defina-os com os mesmos valores utilizados no Teradata.
Para TO_CHAR(Numeric), o Snowflake gera a representação varchar usando os formatos TM9 ou TME para obter uma representação compacta do número. O Teradata também gera representações compactas dos números; portanto, nenhuma ação é necessária.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Ao usar FF, tente usar tipos DateTime com a mesma precisão que você usa no Teradata ou adicione uma precisão ao elemento de formato para evitar comportamentos diferentes.
Ao usar elementos de formato relacionados a fusos horários, use o primeiro parâmetro do tipo
TIMESTAMP_TZpara evitar comportamentos diferentes. Lembre-se também de que o tipoTIMEnão pode conter informações de fuso horário no Snowflake.Defina os parâmetros de sessão necessários com os valores padrão do Teradata para evitar comportamentos diferentes.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0057¶
Dados binários em NEW JSON não são compatíveis.
Gravidade¶
Low
Descrição¶
A função NEW JSON aceita os dados JSON representados como uma cadeia de caracteres ou em formato binário. Quando os dados estão na representação binária, a função não é transformada, pois esse formato binário não é válido no Snowflake, já que ele não consegue interpretar os metadados sobre o objeto JSON. Para mais informações, consulte a documentação sobre NEW JSON do Teradata.
Exemplo de código¶
Código de entrada¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0059¶
O fuso horário padrão do usuário do Snowflake pode exigir configuração para corresponder ao valor do Teradata.
Gravidade¶
Low
Descrição¶
Assim como no Teradata, definir um valor de fuso horário padrão para o usuário fará com que as sessões comecem a usar esse fuso horário até que um novo valor seja definido para a sessão.
Este aviso é gerado para lembrar que o mesmo fuso horário definido para o usuário no Teradata deve ser definido para o usuário do Snowflake. Para fazer isso, use a seguinte consulta no Snowflake: ALTER SESSION SET TIMEZONE = 'equivalent_timezone'. Lembre-se de que o Snowflake aceita apenas fusos horários padrão do Banco de Dados de Fusos Horários IANA.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Lembre-se de definir o fuso horário padrão do usuário para um fuso horário equivalente ao definido para o usuário do Teradata.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0060¶
JSON_TABLE não transformado, os nomes das colunas não puderam ser recuperados das informações semânticas.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Low
Descrição¶
A função JSON_TABLE pode ser transformada pelo SnowConvert AI; no entanto, essa transformação requer o conhecimento do nome das colunas que estão sendo selecionadas na subconsulta JSON_TABLE ON.
Esta mensagem é gerada para alertar o usuário de que os nomes das colunas não foram explicitamente inseridos na subconsulta (por exemplo, foi utilizado SELECT *) e as informações semânticas das tabelas referenciadas não foram encontradas, o que significa que os nomes das colunas não puderam ser extraídos.
Se você deseja saber como carregar dados JSON em uma tabela, consulte esta página.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Verifique se o código fornecido para o SnowConvert AI está completo. Se você não forneceu a definição da tabela, execute o código novamente com a definição da tabela presente.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0061¶
A transformação TD_UNPIVOT requer informações de coluna que não puderam ser encontradas, resultando em colunas ausentes no resultado.
Gravidade¶
Low
Descrição¶
O SnowConvert AI não suporta e transforma a função TD_UNPIVOT, que pode ser utilizada para representar colunas de uma tabela como linhas.
Entretanto, essa transformação requer informações sobre as colunas da tabela/tabelas para funcionar, mais especificamente os nomes das colunas. Quando essas informações não estão presentes, a transformação pode ficar incompleta, com colunas ausentes no resultado. Este EWI é gerado nesses casos.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Existem duas maneiras de fornecer informações sobre as colunas para a ferramenta de conversão: colocar a especificação da tabela no mesmo arquivo que a chamada TD_UNPIVOT ou especificar uma lista de colunas na consulta SELECT da expressão ON em vez de SELECT * ou o nome da tabela.
Esse problema poderá ser ignorado com segurança se ALL as colunas da tabela/tabelas de entrada forem desempilhadas; caso contrário, o resultado terá colunas ausentes.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0063¶
O caminho JSON não foi reconhecido.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI não consegue desserializar um caminho JSON porque a cadeia de caracteres não tem o formato JSON esperado.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Verifique se o caminho JSON contém um caractere inesperado ou não tem o formato correto.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0066¶
O identificador a seguir tem um ou mais caracteres de escape Unicode inválidos no Snowflake.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Low
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI transforma um identificador delimitado Unicode do Teradata com caracteres inválidos no Snowflake.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Use identificadores com caracteres Unicode válidos no Snowflake.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0068¶
O Snowflake não é compatível com perfis; em vez disso, utiliza a função como referência.
Gravidade¶
Medium
Descrição¶
Os perfis do Teradata permitem a definição de vários parâmetros comuns relacionados ao gerenciamento de espaço de armazenamento e restrições de senha.
No entanto, o Snowflake funciona com arquitetura em nuvem e automaticamente gerencia e otimiza o armazenamento, o que significa que nenhuma personalização de armazenamento é feita pelo usuário. Além disso, o Snowflake tem atualmente uma política de senhas definida que se aplica a todas as senhas de usuário e não pode ser modificada.
Esse erro é gerado quando uma referência a um perfil do Teradata indica que ele foi alterado para uma referência à função do usuário, que é a maior aproximação de um perfil no Snowflake, embora possa haver diferenças nos resultados da consulta, a menos que os nomes do perfil e da função de um usuário sejam os mesmos.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Evite fazer referência a perfis de usuário, pois eles não são compatíveis e os resultados da consulta serão diferentes, a menos que o usuário tenha o mesmo nome tanto no perfil quanto na função.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0069¶
Os resultados de ST_DISTANCE são ligeiramente diferentes dos de ST_SPHERICALDISTANCE
Nota
Esta EWI está obsoleta. Consulte a documentação SSC-FDM-TD0031.
Gravidade¶
Low
Descrição¶
A função ST_SPHERICALDISTANCE do Teradata calcula a distância entre duas coordenadas esféricas no planeta usando a fórmula de Haversine, enquanto a função ST_DISTANCE do Snowflake não utiliza a fórmula de Haversine para calcular a distância mínima entre dois pontos geográficos.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0070¶
Uma instrução de retorno foi adicionada no fim da seção do rótulo para garantir o mesmo fluxo de execução
Nota
Esta EWI está obsoleta. Consulte a documentação SSC-FDM-TD0030.
Gravidade¶
Medium
Descrição¶
Quando uma instrução Goto é substituída por uma seção de rótulo e não contém uma instrução de retorno, uma é adicionada no fim da seção para garantir o mesmo fluxo de execução.
BTEQ após a execução de um comando Goto, as instruções entre o comando goto e o comando de rótulo com o mesmo nome são ignoradas. Portanto, para evitar que essas instruções sejam executadas, a seção de rótulo deve conter uma instrução de retorno.
Além disso, vale a pena mencionar que o comando Goto ignora todas as outras instruções, exceto o rótulo com o mesmo nome, que é quando a execução é retomada. Portanto, a execução nunca será retomada em uma seção de rótulo definida antes do comando Goto.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0076¶
O uso de tabelas estrangeiras não é compatível com o Snowflake.
Gravidade¶
Medium
Descrição¶
Tabelas estrangeiras permitem o acesso a dados em armazenamento de objetos externo, como dados semiestruturados e não estruturados no Amazon S3, Azure Blob Storage e Google Cloud Storage. Essa sintaxe não é compatível com o Snowflake. No entanto, existem outras alternativas no Snowflake que podem ser utilizadas, como tabelas externas, tabelas Iceberg e tabelas padrão.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Em vez das tabelas estrangeiras no Teradata, você pode usar tabelas externas do Snowflake. Tabelas externas fazem referência a arquivos de dados localizados em um data lake de armazenamento em nuvem (Amazon S3, Google Cloud Storage ou Microsoft Azure). Isso permite consultar dados armazenados em arquivos de um data lake como se ele estivesse em um banco de dados. Tabelas externas podem acessar dados armazenados em qualquer formato compatível com instruções COPY INTO <table>.
Outra alternativa são as tabelas Iceberg do Snowflake. Portanto, você pode pensar nas tabelas Iceberg como tabelas que usam formatos abertos e armazenamento em nuvem fornecido pelo cliente. Esses dados são armazenados em arquivos Parquet.
Por fim, existem as tabelas padrão do Snowflake, que podem ser uma opção para cobrir a funcionalidade de tabelas estrangeiras no Teradata.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0077¶
A cláusula RESET WHEN não é compatível com este cenário devido à sua condição.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
Atualmente, o SnowConvert AI é compatível apenas com cláusulas RESET WHEN com condições binárias (<=, >= ou =). Com qualquer outro tipo de condição, como IS NOT NULL, a cláusula RESET WHEN será removida e uma mensagem de erro será adicionada, pois isso não é compatível com o Snowflake.
Esta mensagem de erro também aparece quando a condição RESET WHEN faz referência a uma expressão cuja definição não foi encontrada pela ferramenta de migração. Atualmente, a ferramenta é compatível com referências de alias para uma coluna que foi definida na mesma consulta.
Exemplo de código¶
A condição não é binária¶
Código de entrada:¶
Código gerado¶
A expressão da condição não foi encontrada¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0079¶
A coluna de tipo de período necessária não foi encontrada.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Low
Descrição¶
Este aviso é exibido porque a coluna de período necessária para replicar a funcionalidade da cláusula Normalize não foi encontrada.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Para corrigir este aviso manualmente, basta encontrar qual era a primeira coluna de período e remover todas as referências dela, exceto onde ela é definida, e então substituir PeriodColumn pela coluna encontrada.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0082¶
A função Translate com o uso da codificação atual não é compatível.
Gravidade¶
Medium
Descrição¶
O uso da função Translate com os argumentos de codificação atuais não é compatível com o Snowflake. A função é transformada em comentário durante a tradução.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0083¶
Não é possível transformar duas ou mais cláusulas Select complexas de uma só vez.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
O SnowConvert AI não consegue transformar duas ou mais cláusulas SELECT complexas, pois é necessário mapeá-las para uma cláusula FROM composta ou CTE, o que faz com que o código mapeado não seja compilado ou entre em um ciclo lógico.
O que consideramos uma cláusula SELECT complexa?¶
Aquelas que precisam ser mapeadas para uma cláusula FROM composta ou CTE, como NORMALIZE, EXPAND ON ou RESET WHEN.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0087¶
A instrução GOTO foi removida devido à inversão da instrução if.
Nota
Esta EWI está obsoleta. Consulte a documentação SSC-FDM-TD0026
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
É comum usar o comando GOTO com os comandos IF e LABEL para replicar a funcionalidade de uma instrução SQL if. Quando utilizados dessa forma, é possível transformá-los diretamente em uma instrução if, if-else ou até mesmo if-elseif-else. No entanto, nesses casos, os comandos GOTO tornam-se desnecessários e devem ser removidos para evitar que sejam substituídos por uma seção LABEL.
Exemplo de código¶
Código de entrada:¶
-- Additional Params: --scriptsTargetLanguage SnowScript
.If ActivityCount = 0 THEN .GOTO endIf
DROP TABLE TABLE1;
.Label endIf
SELECT A FROM TABLE1;
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0091¶
Expressão convertida como cast com possíveis erros devido a dependências ausentes.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Gravidade¶
Medium
Descrição¶
Em scripts do Teradata, você pode usar a seguinte sintaxe para expressões CAST:
Infelizmente, essa sintaxe gera ambiguidade ao tentar converter CAST em DATE ou TIME, já que essas palavras-chave também se comportam como as funções CURRENT_DATE e CURRENT_TIME, respectivamente.
Assim, sem contexto sobre a expressão a ser CAST, não há como diferenciar com certeza quando estamos lidando com um caso real de CAST ou com uma função que aceita DATE ou TIME como parâmetros.
Em outras palavras, é necessário saber se <expression> é uma coluna ou uma função definida pelo usuário (UDF). Para conseguir isso, ao converter o código, é preciso adicionar CREATE TABLE ou CREATE FUNCTION dos quais <expression> depende.
Por exemplo, verifique a seguinte instrução SELECT. Sem contexto sobre AMBIGUOUS_EXPR, não temos como determinar se estamos lidando com uma chamada de função ou com CAST para DATE. No entanto, sabemos que COL1 (DATE) é de fato uma CAST, já que COL1 é uma coluna da tabela TAB.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0092¶
A tradução para tabela/exibição integrada do Teradata não é compatível atualmente.
Gravidade¶
Low
Descrição¶
Este EWI é adicionado quando o SnowConvert AI encontra uma tabela de sistema do Teradata que não está traduzida no momento.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Pesquise por equivalentes nas tabelas internas do Snowflake, como
Information_SchemaouSNOWFLAKE.ACCOUNT_USAGE.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0093¶
Formato não compatível; deve ser atualizado em todos os usos de conversão varchar.
Gravidade¶
High
Descrição¶
Este EWI é adicionado quando a função CAST é utilizada para converter uma expressão numérica para outro tipo numérico com um formato especificado. Embora o formato não afete o valor numérico em si, se o resultado for posteriormente convertido para uma cadeia de caracteres, o formato pretendido não será aplicado corretamente. Portanto, é necessário atualizar todas as instâncias em que o resultado é convertido para VARCHAR, garantindo que o formato definido no EWI seja utilizado.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0094¶
The IMPORT command was not converted.
Gravidade¶
High
Descrição¶
This issue indicates that an .IMPORT command was not converted because it uses unsupported features. The original MLoad layout, DML, and import statements are commented out and each line is annotated with this EWI.
Features pending translation:
BINARYformatFASTLOADformat.TABLEtype layoutINMODoptionAXSMODoptionNon
INSERT-VALUESDML statements
Missing required definitions:
.LAYOUTdefinition was not found in the script.DML LABELwas not found in the script
Exemplo de código¶
Teradata:¶
Snowflake Scripting:¶
Práticas recomendadas¶
Convert the source file to a supported format (
VARTEXT,TEXT, orUNFORMAT) before running SnowConvert AI.Manually rewrite the load using Snowflake stages and
COPY INTO.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0095¶
DML statement in IMPORT command is pending translation.
Gravidade¶
Medium
Descrição¶
This issue happens when a .IMPORT command uses a DML label that includes statements other than a basic INSERT ... VALUES (for example, UPDATE, DELETE, or more complex INSERT logic). In these cases, the converter will only transform the simple INSERT ... VALUES part into a COPY INTO statement for Snowflake. Any other DML statements are left in the output with a warning annotation, and are not automatically converted. This means that important logic—like updates or deletes—will not be migrated, which can affect your results. Please review and update your script to handle these cases, such as by using a MERGE statement for upserts.
Exemplo de código¶
Teradata:¶
Snowflake Scripting:¶
Práticas recomendadas¶
Implement the equivalent upsert logic in Snowflake using
MERGE.Load data into a staging table first, then merge into the target table.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0096¶
COPY INTO requires an explicit target file name.
Gravidade¶
Medium
Descrição¶
When the .IMPORT INFILE path consists solely of a bash variable (for example, ${FILE_PATH}) and no explicit file name can be inferred, this EWI is raised for the COPY INTO source. The converter cannot determine the file name to use in the stage path.
Exemplo de código¶
Teradata:¶
Snowflake Scripting:¶
Práticas recomendadas¶
Adjust the original MLoad script so that the file name is explicit (separate directory and file name).
Use a literal file name with variable directory, for example,
.IMPORT INFILE ${DATA_DIR}/employees.csv ...Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-EWI-TD0097¶
Local variables not supported in PUT or COPY INTO.
Gravidade¶
Medium
Descrição¶
This issue indicates the use of local MLoad variables, such as &FILE_NAME, defined with .SET in INFILE paths. These cannot be resolved in the generated PUT or COPY INTO statements because Snowflake’s PUT command only supports literal paths or SnowSQL session variables (&{VAR}), not Snowflake Scripting variables (:var).
Exemplo de código¶
Teradata:¶
Snowflake Scripting:¶
Práticas recomendadas¶
Replace local variables with bash variables (resolved by SnowSQL before execution).
Alternatively, hard-code the file name directly.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com