SnowConvert AI – Diferenças funcionais do Teradata¶
SSC-FDM-TD0001¶
Coluna convertida do tipo de dados Blob.
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI encontra um tipo de dados BLOB. Como BLOB não é compatível com o Snowflake, o tipo é alterado para Binary.
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-FDM-TD0002¶
Coluna convertida do tipo de dados Clob.
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI encontra um tipo de dados CLOB. Como CLOB não é compatível com o SnowConvert AI, o tipo é alterado para VARCHAR.
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-FDM-TD0003¶
Variáveis Bash encontradas; o uso do SnowSQL com a substituição de variáveis ativada é necessário para executar este script.
Descrição¶
Quando o código-fonte de um arquivo de script migrado para o Snowflake Scripting contém espaços reservados para variáveis Bash ($variable ou ${variable}), o SnowConvert AI os transforma em variáveis SnowSQL (&variable ou &{variable}).
Este aviso é gerado para indicar que a execução do script migrado agora depende do SnowSQL para funcionar. Considere o seguinte ao executar o script no SnowSQL:
A substituição de variáveis deve estar habilitada.
Todas as variáveis devem ser definidas.
Execute o arquivo como um script em lote.
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-FDM-TD0004¶
Os tipos de período são tratados como dois campos de dados.
Descrição¶
Teradata has a period data type used to represent a time interval, with instances of this type having a beginning and ending bound of the same type (time, date or timestamp) along with a set of functions that allow initializing and manipulating period data such as PERIOD, BEGIN, END, and OVERLAPS.
Como o tipo de período não é compatível com o Snowflake, o SnowConvert AI transforma esse tipo e as funções relacionadas usando as seguintes regras:
Qualquer declaração de tipo de período em tabelas de colunas é migrada como duas colunas do mesmo tipo.
A função do construtor de valor de período é migrada para dois construtores diferentes do subtipo de período, um com o valor inicial e o outro com o final.
As funções compatíveis que esperam parâmetros de tipo de período também foram migradas para UDFs. Estas UDFs esperam quase dois parâmetros para o valor inicial e o final.
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-FDM-TD0005¶
Deslocamentos de fuso horário não padrão não são compatíveis com o Snowflake; arredondados para o fuso horário válido mais próximo.
Descrição¶
Embora o Teradata ofereça a flexibilidade de definir qualquer deslocamento de fuso horário entre -12:59 e +14:00 usando a consulta SET TIME ZONE, o Snowflake é compatível exclusivamente com os fusos horários listados no Banco de dados de fusos horários IANA.
Se o deslocamento especificado na consulta SET TIME ZONE não estiver alinhado com um fuso horário padrão IANA, o Snowflake o arredondará automaticamente para o fuso horário padrão mais perto com o deslocamento mais próximo. Nesse caso, uma mensagem de aviso será gerada.
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-FDM-TD0006¶
Exibição With Check Option não é compatível.
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI encontra uma exibição com a cláusula WITH CHECK OPTION. Essa cláusula não é compatível com o Snowflake; portanto, foi transformada em comentário no código.
Essa cláusula funciona com exibições atualizáveis que podem ser utilizadas para executar comandos INSERT e UPDATE sobre a exibição e atualizar internamente a tabela associada à exibição.
A cláusula é utilizada para restringir as linhas que serão afetadas pelo comando usando a cláusula WHERE na exibição.
Para mais detalhes, consulte a documentação sobre a funcionalidade da cláusula.
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-FDM-TD0007¶
A coluna Variant não é compatível com agrupamento.
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI utiliza um tipo de dados Variant na transformação de um código que tem uma cláusula COLLATE. Como COLLATE não é compatível com o tipo de dados VARIANT, ele será removido e uma mensagem será adicionada.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
O tipo de dados JSON é convertido para VARIANT, enquanto NOT CASESPECIFIC é convertido para uma cláusula COLLATE.
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-FDM-TD0008¶
Quando o quarto parâmetro NVP_UDF não é literal e contém uma barra invertida, essa barra precisa ter um caractere de escape.
Descrição¶
Non-literal delimiters with spaces need their backslash escaped in Snowflake.
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-FDM-TD0009¶
Convertido de inteiro para varchar para o padrão da sessão atual.
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI encontra um DEFAULT SESSION e o tipo de dados é NOT ou VARCHAR. Nesse caso, o tipo de dados é alterado para VARCHAR e uma mensagem é adicionada.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Vejamos o exemplo. Observe que ColumnExample tem um tipo de dados INTEGER com DEFAULT SESSION. Como o tipo de dados não é VARCHAR, na saída ele é transformado em VARCHAR.
O tipo de dados de ColumnExample2 não foi alterado, pois já é VARCHAR.
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-FDM-TD0010¶
Table columns between tables (Teradata) DBC.COLUMNSV and INFORMATION_SCHEMA.COLUMNS (Snowflake). But some columns might not have an exact match in Snowflake.
Descrição¶
Uses of the table DBC.COLUMNSV in Teradata are converted to INFORMATION_SCHEMA.COLUMNS, but some columns might not have an exact match in Snowflake. That means there are some columns in Teradata for which there is no equivalent in Snowflake, and there are others that do have a matching column but the content is not exactly the same.
.png)
An example of the contents of DBC.COLUMNSV table in Teradata
.png)
An example of the contents of INFORMATION_SCHEMA.COLUMNS table in Snowflake
Notice, for example, that there is no equivalent column for «ColumnFormat» in Snowflake and notice also that «DATA_TYPE» seems to be the match for the column «ColumnType» in Teradata, but their content greatly differ.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Review what columns were used in Teradata and check if the available content in Snowflake matches your needs.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0011¶
O escape Unicode BMP não é compatível.
Descrição¶
Snowflake doesn’t support Unicode BMP, so this message is shown when SnowConvert AI transforms Teradata Unicode Delimited Character Literal with Unicode BMP escape to Snowflake.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Verifique se existe um equivalente Unicode.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0012¶
Valor padrão inválido.
Nota
Esta FDM está obsoleta. Consulte a documentação SSC-EWI-TD0006.
Descrição¶
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.
Exemplo de código¶
Teradata:¶
Snowflake Scripting:¶
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-FDM-TD0013¶
The Snowflake error code doesn’t match the original Teradata error code.
Descrição¶
This message is shown because the error code saved in the BTEQ ERRORCODE built-in variable could not be the same in Snowflake Scripting.
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-FDM-TD0014¶
Inconsistência na execução de arquivos
Descrição¶
Este EWI aparece quando o código migrado é uma sentença BTEQ que executa um arquivo de ambiente com instruções SQL. Por exemplo, $(<$INPUT_SQL_FILE). A diferença entre a execução BTEQ e o código gerado pelo Python é que BTEQ continua com as outras instruções no arquivo quando uma delas falha, mas a execução do Python é interrompida sempre que ocorre um erro.
Exemplo de código¶
Teradata BTEQ:¶
Python¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0015¶
A função Regexp_Substr só é compatível com expressões regulares POSIX.
Nota
Esta FDM está obsoleta. Consulte a documentação SSC-EWI-0009.
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-FDM-TD0016¶
O valor «l» para o parâmetro «match_arg» não é compatível com o Snowflake.
Descrição¶
Em funções Teradata como REGEX_SUBSTR, REGEX_REPLACE ou REGEX_INSTR, existe um parâmetro chamado «match_arg», um argumento de caractere com os seguintes valores válidos:
'i': correspondência sem distinção entre maiúsculas e minúsculas.'c': correspondência com distinção entre maiúsculas e minúsculas.'n': o caractere de ponto (corresponde a qualquer caractere) pode corresponder ao caractere de nova linha.'m': a cadeia de caracteres de origem é tratada como várias linhas em vez de uma única linha.'l': se source_string exceder o tamanho máximo permitido atual (atualmente 16 MB), NULL será retornado em vez de um erro.'x': ignora espaços em branco (afeta apenas a cadeia de caracteres do padrão).
O argumento pode conter mais de um caractere.
No Snowflake, o argumento equivalente para essas funções é _regexp_parameters._Uma cadeia de um ou mais caracteres que especifica os parâmetros da expressão regular utilizados para buscar correspondências. Os valores aceitos são:
c: diferencia maiúsculas de minúsculas.i: não diferencia maiúsculas de minúsculas.m: modo multilinhas.e: extrair subcorrespondências.s: o caractere curinga “.” também corresponde ao caractere de nova linha.
Conforme mostrado, os valores 'i', 'c', 'm' são os mesmos em ambos os idiomas, e o valor 'n' no Teradata é mapeado para 's'. No entanto, os valores 'l', 'x' não têm contraparte equivalente.
For the 'x' value, the functionality is replicated by generating a call to the REGEXP_REPLACE function. However, the 'l' parameter can not be replicated so this warning is generated for these cases.
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-FDM-TD0017¶
O uso de tabelas estrangeiras não é compatível com o Snowflake.
Nota
Esta FDM está obsoleta. Consulte a documentação SSC-EWI-TD0076.
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 em um data lake como se estivessem dentro de 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-FDM-TD0018¶
O caminho JSON não foi reconhecido.
Nota
Esta FDM está obsoleta. Consulte a documentação SSC-EWI-TD0063.
Descrição¶
This message is shown when SnowConvert AI cannot deserialize a JSON path, because the string does not have the expected format or is not supported in Snowflake.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Check if the JSON path have an unexpected character, or do not have the right format.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0019¶
Tags de consulta de nível de transação e perfil não são compatíveis com o Snowflake. Em vez disso, é feita referência à tag de consulta de sessão.
Descrição¶
O Teradata permite que os usuários definam bandas de consulta em níveis de transação, sessão e perfil, além de consultá-las com funções como GetQueryBandValue.
O equivalente no Snowflake para bandas de consulta é o parâmetro query_tag, que pode ser definido para sessão, usuário ou conta. Além disso, o Snowflake não tem perfis.
Due to these differences, this FDM is added to warn the user that transaction or profile-level query tags can not be defined nor consulted in Snowflake and that session-level query tags will be used as a replacement, which may cause functional differences in some cases.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
Modifique a lógica do seu código para usar bandas de consulta no nível da sessão.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0020¶
O valor JSON não foi reconhecido devido a um formato inválido.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Esta mensagem é exibida quando o SnowConvert AI precisa desserializar dados JSON para um contexto de transformação, mas o valor JSON não tem o formato esperado ou não é um JSON válido.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Certifique-se de que o JSON tenha o formato esperado de acordo com a gramática do Teradata.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0021¶
A referência integrada a {0} não é compatível com o Snowflake.
Nota
Este EWI está obsoleto. Consulte a documentação SSC-EWI-TD0046.
Descrição¶
Este erro ocorre quando uma consulta que referencia a tabela DBC.DATABASES é executada e a coluna selecionada não tem equivalente 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-FDM-TD0022¶
Variáveis de shell encontradas, é necessário executar este código em um script do shell.
Descrição¶
Em scripts do Teradata, as variáveis de shell são utilizadas para armazenar valores temporários que podem ser acessados e manipulados em todo o script. As variáveis de shell são definidas com o cifrão ($) seguido por um nome (que pode ser delimitado por chaves), e os valores podem ser definidos com o uso do operador de atribuição (=).
Você pode pensar nas variáveis de shell como tendo a mesma função ou uma função semelhante à interpolação de cadeias de caracteres. Portanto, é importante manter essa funcionalidade após a transformação.\ \ Ao converter scripts para Python, as variáveis de shell mantêm a funcionalidade executando o código convertido em um script de shell (arquivo .sh). Por esse motivo, essas variáveis de shell devem manter o mesmo formato do código de entrada.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
A execução do código convertido em um script de shell é obrigatória.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0023¶
A similaridade de cadeias de caracteres pode ter um comportamento diferente.
Descrição¶
Esta FDM é mostrada quando o SnowConvert AI transforma a função de similaridade do Teradata para o Snowflake. Isso indica que os resultados podem ter um comportamento diferente.
Exemplo de código¶
Considere os seguintes dados como exemplo:
Id |
a |
b |
|---|---|---|
1 |
||
2 |
Gute nacht |
Ich weis nicht |
3 |
Ich weiß nicht |
Ich wei? nicht |
4 |
Ich weiß nicht |
Ich wei? nicht |
5 |
Ich weiß nicht |
Ich weiss nicht |
6 |
Snowflake |
Oracle |
7 |
święta |
swieta |
8 |
NULL |
|
9 |
NULL |
NULL |
Código de entrada:¶
Consulta¶
Resultado¶
| Id | sim_fn |
|---|---|
| 1 | 0 |
| 2 | 0.565079365 |
| 3 | 1 |
| 4 | 0.959047619 |
| 5 | 0 |
| 6 | 0.611111111 |
| 7 | 0.7777777777777777 |
| 8 | 0 |
| 9 | 0 |
Código gerado¶
Consulta¶
Resultado¶
ID |
SIM_FN |
|---|---|
1 |
0,000000 |
2 |
0,560000 |
3 |
0,970000 |
4 |
0,950000 |
5 |
0,000000 |
6 |
0,610000 |
7 |
0,770000 |
8 |
0,000000 |
9 |
0,000000 |
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0024¶
A funcionalidade de tabela definida não é compatível.
Descrição¶
Este EWI é mostrado quando o SnowConvert AI encontra uma criação de tabela com a opção SET. Como SET TABLE não é compatível com o Snowflake, isso foi removido.
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-FDM-TD0025¶
A tabela temporal do banco de dados do Teradata não é compatível com o Snowflake.
Descrição¶
O Suporte temporal do banco de dados do Teradata envolve a criação de tabelas temporais e objetos DDL e DML temporais. O suporte para tabelas e dados temporais (com reconhecimento de tempo) não é compatível com o Snowflake, pois não existe um equivalente absoluto.
Todas essas instruções são reconhecidas (analisadas) pelo SnowConvert AI, mas, para executar as consultas no Snowflake, esses elementos são removidos no processo de tradução.
Vale ressaltar que, nos casos em que uma instrução abort é encontrada, ela é transformada em um comando Delete para manter a funcionalidade de equivalência. Isso permite desfazer operações realizadas durante uma transação e restaurar o banco de dados ao estado em que se encontrava no início.
Exemplo de código¶
O exemplo a seguir mostra uma Select em formato temporal sendo traduzida para uma Select comum.
Código de entrada:¶
Código gerado:¶
Caso em que o comando Abort é utilizado no contexto de uma transação.
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-FDM-TD0026¶
A instrução GOTO foi removida devido à inversão da instrução if.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
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.
Código de exemplo ¶
Código de entrada:
Código de saída
Práticas recomendadas ¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0027¶
A transformação TD_UNPIVOT requer informações de coluna que não puderam ser encontradas, resultando em colunas ausentes no resultado.
Nota
Esta FDM está obsoleta. Consulte a documentação SSC-EWI-TD0061.
Descrição¶
O SnowConvert AI 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-FDM-TD0028¶
JSON_TABLE não transformado, os nomes das colunas não puderam ser recuperados das informações semânticas.
Nota
Esta FDM está obsoleta; consulte a documentação SSC-EWI-TD0060.
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.
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-FDM-TD0029¶
Os formatos compatíveis com o Snowflake para TO_CHAR diferem do Teradata e podem falhar ou apresentar comportamento diferente.
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 de parâmetro único 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-FDM-TD0030¶
Uma instrução de retorno foi adicionada no fim da seção do rótulo para garantir o mesmo fluxo de execução
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-FDM-TD0031¶
Os resultados de ST_DISTANCE são ligeiramente diferentes dos de ST_SPHERICALDISTANCE
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:¶
Saída do Teradata¶
location1 |
location2 |
Distance_In_Km |
|---|---|---|
POINT (-73.989308 40.741895) |
POINT (40.741895 34.053691) |
9351139,978062356 |
Código gerado¶
Saída do Snowflake¶
LOCATION1 |
LOCATION2 |
DISTANCE_IN_KM |
|---|---|---|
{ «coordinates»: [ -73.989308, 40.741895 ], «type»: «Point» } |
{ «coordinates»: [ 40.741895, 34.053691 ], «type»: «Point» } |
9351154,65572674 |
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0032¶
A cláusula CASESPECIFIC foi removida da expressão LIKE
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Este erro ocorre quando a expressão LIKE é acompanhada pela cláusula [NOT] CASESPECIFIC.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
O comportamento por caso de TERADATA depende da configuração do sistema TMODE.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0033¶
A transformação ACTIVITY_COUNT pode exigir ajustes manuais.
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:
No entanto, isso apresenta algumas limitações listadas abaixo.
Limitações ¶
Primeiro caso¶
Se ACTIVITY_COUNT for chamada duas ou mais vezes antes da execução de outra instrução DML, a transformação poderá não retornar os valores esperados.
Teradata¶
Snowflake¶
Em ambos os procedimentos, ACTIVITY_COUNT é chamada duas vezes antes de outra instrução DML ser chamada. No Teradata, ACTIVITY_COUNT retornará o número de linhas na instrução INSERT acima, mesmo quando chamada duas vezes. No entanto, como a transformação Snowflake usa LAST_QUERY_ID(), o resultado depende do conjunto de resultados mantido por LAST_QUERY_ID().
InsertEmployeeSalaryAndLog_1() não requer ajustes manuais. Verifique o histórico de consultas (de baixo para cima):
.png)
Query History when calling InsertEmployeeSalaryAndLog_1()
A instrução
INSERTé executada.LAST_QUERY_ID()apontará para essa instrução.SELECT(primeiroACTIVITY_COUNT) é executado e$1será1.LAST_QUERY_ID()apontará para essa instrução.SELECT(segundoACTIVITY_COUNT) é executado; como o resultado da última instrução foi1,$1também será1para esteSELECT.Por fim,
row_count1contém o valor1, que é inserido emactivity_log.
Por outro lado, InsertEmployeeSalaryAndLog_2() requer ajustes manuais. Verifique o histórico de consultas (de baixo para cima):
.png)
Query History when calling InsertEmployeeSalaryAndLog_2()
A instrução
INSERTé executada.LAST_QUERY_ID()apontará para essa instrução.SELECT (primeiro
ACTIVITY_COUNT) é executado, e$1será1. No entanto, observe comoQUERY_TEXTtem+ 10; isso afetará o resultado que será verificado.LAST_QUERY_ID()apontará para essa instrução.SELECT(segundoACTIVITY_COUNT) é executado. O resultado da última consulta é11; portanto,$1conterá11em vez do esperado1.Por fim,
row_count1contém o valor11, que é inserido emactivity_log.
Estes são os valores inseridos em activity_log:
LOG_ID |
OPERATION |
ROW_COUNT |
LOG_TIMESTAMP |
|---|---|---|---|
1 |
INSERT PROCEDURE |
1 |
2024-07-15 09:22:21.725 |
101 |
INSERT PROCEDURE |
11 |
2024-07-15 09:22:26.248 |
Ajustes para o primeiro caso¶
Conforme a documentação do Snowflake para LAST_QUERY_ID, você pode especificar a consulta a ser retornada, com base na posição da consulta. LAST_QUERY_ID(-1) retorna a consulta mais recente, (-2) a penúltima consulta e assim por diante.
A solução para o problema no InsertEmployeeSalaryAndLog_2() será simplesmente especificar LAST_QUERY_ID(-2) no segundo uso de ACTIVITY_COUNT (segundo SELECT) para que obtenha os resultados da instrução INSERT:
Segundo caso¶
Se ACTIVITY_COUNT for chamado após a execução de uma instrução que não seja DML, a transformação não retornará os valores esperados.
Teradata¶
Snowflake¶
Semelhante ao caso anterior, LAST_QUERY_ID não aponta para a consulta correta e, portanto, retorna um valor incorreto, que é atribuído a row_count1. Verifique o histórico de consultas (de baixo para cima):
.png)
Query History when calling InsertEmployeeSalaryAndLog_3()
A instrução
INSERTé executada.LAST_QUERY_ID()apontará para essa instrução.SELECT INTOé executado, e $1 será 101.LAST_QUERY_ID()apontará para essa instrução.SELECT(ACTIVITY_COUNT) é executado. O resultado da última consulta é101; assim,$1conterá101em vez do esperado 1.Por fim,
row_count1contém o valor101, que é inserido emactivity_log.
Estes são os valores inseridos em activity_log:
LOG_ID |
OPERATION |
ROW_COUNT |
LOG_TIMESTAMP |
|---|---|---|---|
1 |
EMPLOYEE INSERTED - ID: 101 |
101 |
2024-07-15 11:00:38.000 |
Ajustes para o segundo caso¶
Uma possível solução é especificar a consulta correta a ser retornada por
LAST_QUERY_ID. Por exemplo, aqui,LAST_QUERY_ID(-2)será a consulta correta para a qual apontar.
Outra possível solução é usar
ACTIVITY_COUNT(SELECT) imediatamente após executar a instruçãoINSERT.
Práticas recomendadas¶
Certifique-se de apontar para a consulta correta ao usar
LAST_QUERY_ID.Certifique-se de que
ACTIVITY_COUNTseja utilizado imediatamente após a instrução DML para avaliação.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0034¶
Period contains transformada para uma função definida pelo usuário.
Descrição¶
A expressão CONTAINS do Teradata realiza uma validação indicando se o elemento à direita está contido no elemento à esquerda, que deve ser do tipo PERIOD. CONTAINS aplica-se apenas a DATE, TIME, TIMESTAMP ou PERIOD. Como PERIOD não é compatível com o Snowflake, uma função definida pelo usuário emulará a lógica do comportamento nativo de CONTAINS.
Exemplo de código¶
Código de entrada:¶
Código gerado¶
Práticas recomendadas¶
O
VARCHARutilizado em vez dePERIODpressupõe o formato<PERIOD_BEGIN>*<PERIOD_END>em todos os valores. Se os valores forem divididos por um token diferente de*, você poderá alterar o valor retornado pela UDFPUBLIC.GET_PERIOD_SEPARATORfornecida pelo SnowConvert AI. Observe que a estrutura deve ter um token que marque o início e o fim de um PERIOD; portanto, as duas datas, horários ou carimbos de data/hora devem ser sempre separados com o mesmo token.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0035¶
A função de estatísticas não é necessária no Snowflake.
Nota
Esta FDM está obsoleta; consulte a documentação SSC-EWI-0037.
Descrição¶
As estatísticas DROP, COLLECT ou HELP não são necessárias no Snowflake. O Snowflake já coleta estatísticas utilizadas para otimização automática de consultas, e é por isso que essas instruções de estatísticas são usadas no 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-FDM-TD0036¶
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.
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-FDM-TD0037¶
LOGTABLE removed.
Descrição¶
The .LOGTABLE command in MLoad is used for checkpoint and restart metadata, but Snowflake handles these features automatically. Instead of .LOGTABLE, you can monitor and audit your data loads in Snowflake using the COPY_HISTORY function and related account usage views.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
Use
COPY_HISTORYand related Snowflake account usage views to monitor load history.Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0038¶
PUT command requires SnowSQL execution.
Descrição¶
The PUT command lets you upload files to a Snowflake stage, but it only works when you run your script with SnowSQL. It won’t work inside scripts, procedures, or the web UI. If your script includes a PUT command, make sure to run it using SnowSQL.
Exemplo de código¶
Código gerado:¶
Práticas recomendadas¶
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
SSC-FDM-TD0039¶
Collation handled at query level for this table, any new query over this table should apply collation appropriately.
Descrição¶
When the «Disable use of COLLATE for Case Specification» general conversion setting is enabled, SnowConvert AI will emulate the case insensitive behavior of the NOT CASESPECIFIC clause by modifying comparisons in queries with the UPPER function, this is performed at query level instead of using collation at the column level. This warning will be generated on any table whose case sensitivity is being emulated at the query level to remind the user that any new query over these tables will require to properly handle the case sensitivity behavior on comparisons.
Exemplo de código¶
Código de entrada:¶
Código gerado:¶
Práticas recomendadas¶
If you provided all your queries over the table to SnowConvert as part of your transformation then no additional actions are required, this FDM is informational only.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com