Referência de conversão SQL¶
Use isso como um guia para entender como o código transformado pode parecer ao migrar do Teradata para o Snowflake SQL tem uma sintaxe semelhante entre os dialetos, mas cada dialeto pode estender ou adicionar novas funcionalidades.
Nota
Esta página lista apenas as funções que já foram transformadas pelo SnowConvert. Se uma função da documentação do Teradata não estiver listada aqui, ela deverá ser considerada sem suporte.
Funções de agregação¶
Teradata |
Snowflake |
Observação |
---|---|---|
AVG |
AVG |
|
CORR |
CORR |
|
COUNT |
COUNT |
|
COVAR_POP |
COVAR_POP |
|
COVAR_SAMP |
COVAR_SAMP |
|
GROUPING |
GROUPING |
|
KURTOSIS |
KURTOSIS |
|
MAXIMUM MAX |
MAX |
|
MINIMUM MIN |
MIN |
|
PIVOT |
PIVOT |
|
REGR_AVGX |
REGR_AVGX |
|
REGR_AVGY |
REGR_AVGY |
|
REGR_COUNT |
REGR_COUNT |
|
REGR_INTERCEPT |
REGR_INTERCEPT |
|
REGR_R2 |
REGR_R2 |
|
REGR_SLOPE |
REGR_SLOPE |
|
REGR_SXX |
REGR_SXX |
|
REGR_SXY |
REGR_SXY |
|
REGR_SYY |
REGR_SYY |
|
SKEW |
SKEW |
|
STDDEV_POP |
STDDEV_POP |
|
STDDEV_SAMP |
STDDEV_SAMP |
|
SUM |
SUM |
|
UNPIVOT |
UNPIVOT |
<p>Unpivot com várias funções<br>não é compatível com o Snowflake</p> |
VAR_POP |
VAR_POP |
|
VAR_SAMP |
VAR_SAMP |
Consulte Funções agregadas
Operadores/Funções aritméticas, trigonométricas e hiperbólicas¶
Teradata |
Snowflake |
Observação |
---|---|---|
ABS |
ABS |
|
CEILING |
CEIL |
|
DEGREES |
DEGREES |
|
EXP |
EXP |
|
FLOOR |
FLOOR |
|
HYPERBOLIC ACOSH ASINH ATANH COSH SINH TANH |
HYPERBOLIC ACOSH ASINH ATANH COSH SINH TANH |
|
LOG |
LOG |
|
LN |
LN |
|
MOD |
MOD |
|
NULLIFZERO(param) |
CASE WHEN param=0 THEN null ELSE param END |
|
POWER |
POWER |
|
RANDOM |
RANDOM |
|
RADIANS |
RADIANS |
|
ROUND |
ROUND |
|
SIGN |
SIGN |
|
SQRT |
SQRT |
|
TRUNC |
TRUNC_UDF |
|
TRIGONOMETRIC ACOS ASIN ATAN ATAN2 COS SIN TAN |
TRIGONOMETRIC ACOS ASIN ATAN ATAN2 COS SIN TAN |
|
ZEROIFNULL |
ZEROIFNULL |
Consulte Operadores/Funções aritméticas, trigonométricas e hiperbólicas
Funções de atributo¶
Teradata |
Snowflake |
Observação |
---|---|---|
BIT_LENGTH |
BIT_LENGTH |
|
BYTE BYTES |
LENGTH |
|
CHAR CHARS CHARACTERS |
LEN |
|
CHAR_LENGTH CHARACTER_LENGTH |
LEN |
|
MCHARACTERS |
LENGTH |
|
OCTECT_LENGTH |
OCTECT_LENGTH |
Consulte Funções de atributo
Funções de manipulação de bit/byte¶
Teradata |
Snowflake |
Observação |
---|---|---|
BITAND |
BITAND |
|
BITNOT |
BITNOT |
|
BITOR |
BITOR |
|
BITXOR |
BITXOR |
|
GETBIT |
GETBIT |
Consulte Funções de bit/byte
Integradas (funções do sistema)¶
Teradata |
Snowflake |
Observação |
---|---|---|
ACCOUNT |
CURRENT_ACCOUNT |
|
CURRENT_DATE CURDATE |
CURRENT_DATE |
|
CURRENT_ROLE |
CURRENT_ROLE |
|
CURRENT_TIME |
CURRENT_TIME |
|
CURRENT_TIMESTAMP |
CURRENT_TIMESTAMP |
|
DATABASE |
CURRENT_DATABASE |
|
DATE |
CURRENT_DATE |
|
NOW |
CURRENT_TIMESTAMP |
|
PROFILE |
CURRENT_ROLE |
|
SESSION |
CURRENT_SESSION |
|
TIME |
CURRENT_TIME |
|
USER |
CURRENT_USER |
Consulte Funções integradas
Calendários de negócios¶
Teradata |
Snowflake |
Observação |
---|---|---|
DAYNUMBER_OF_MONTH(DatetimeValue, “COMPATIBLE”) |
DAYOFMONTH |
|
DAYNUMBER_OF_MONTH(DatetimeValue, “ISO”) |
DAYNUMBER_OF_MONTH_ISO_UDF |
|
DAYNUMBER_OF_MONTH(DatetimeValue, “TERADATA”) |
DAYOFMONTH |
|
DAYNUMBER_OF_WEEK(DatetimeValue, “ISO”) |
DAYOFWEEKISO |
|
DAYNUMBER_OF_WEEK(DatetimeValue, “COMPATIBLE”) |
DAY_OF_WEEK_COMPATIBLE_UDF |
|
DAYNUMBER_OF_WEEK(DatetimeValue, “TERADATA”) |
TD_DAY_OF_WEEK_UDF |
|
DAYNUMBER_OF_YEAR(DatetimeValue, “ISO”) |
PUBLIC.DAY_OF_YEAR_ISO_UDF |
|
DAYNUMBER_OF_YEAR(DatetimeValue) |
DAYOFYEAR |
|
QUARTERNUMBER_OF_YEAR |
QUARTER |
|
TD_SUNDAY(DateTimeValue) |
PREVIOUS_DAY(DateTimeValue, “Sunday”) |
|
WEEKNUMBER_OF_MONTH |
WEEKNUMBER_OF_MONTH_UDF |
|
WEEKNUMBER_OF_QUARTER(dateTimeValue) |
WEEKNUMBER_OF_QUARTER_UDF |
|
WEEKNUMBER_OF_QUARTER(dateTimeValue, “ISO”) |
WEEKNUMBER_OF_QUARTER_ISO_UDF |
|
WEEKNUMBER_OF_QUARTER(dateTimeValue, “COMPATIBLE”) |
WEEKNUMBER_OF_QUARTER_COMPATIBLE_UDF |
|
WEEKNUMBER_OF_YEAR(DateTimeValue, “ISO”) |
WEEKISO |
|
YEARNUMBER_OF_CALENDAR(DATETIMEVALUE, “COMPATIBLE”) |
YEAR |
|
YEARNUMBER_OF_CALENDAR(DATETIMEVALUE, “ISO”) |
YEAROFWEEKISO |
Consulte Calendários de negócios
Funções de calendário¶
Teradata |
Snowflake |
Observação |
---|---|---|
DAYNUMBER_OF_WEEK(DatetimeValue) |
TD_DAY_OF_WEEK_UDF |
|
DAYNUMBER_OF_WEEK(DatetimeValue, “COMPATIBLE”) |
DAY_OF_WEEK_COMPATIBLE_UDF |
|
QuarterNumber_Of_Year(DatetimeValue, “ISO”) |
QUARTER_OF_YEAR_ISO_UDF(DatetimeValue) |
|
TD_DAY_OF_CALENDAR |
TD_DAY_OF_CALENDAR_UDF |
|
TD_DAY_OF_MONTH |
DAYOFMONTH |
|
TD_DAY_OF_WEEK |
TD_DAY_OF_WEEK_UDF |
|
TD_DAY_OF_YEAR |
DAYOFYEAR |
|
TD_MONTH_OF_CALENDAR(DateTimeValue) |
TD_MONTH_OF_CALENDAR_UDF(DateTimeValue) |
|
TD_WEEK_OF_CALENDAR(DateTimeValue) |
TD_WEEK_OF_CALENDAR_UDF(DateTimeValue) |
|
TD_WEEK_OF_YEAR |
WEEK_OF_YEAR_UDF |
|
TD_YEAR_BEGIN(DateTimeValue) |
YEAR_BEGIN_UDF(DateTimeValue) |
|
TD_YEAR_BEGIN(DateTimeValue, “ISO”) |
YEAR_BEGIN_ISO_UDF(DateTimeValue) |
|
TD_YEAR_END(DateTimeValue) |
YEAR_END_UDF(DateTimeValue) |
|
TD_YEAR_END(DateTimeValue, “ISO”) |
YEAR_END_ISO_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_MONTH(DateTimeValue) |
WEEKNUMBER_OF_MONTH_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_QUARTER(DateTimeValue) |
WEEKNUMBER_OF_QUARTER_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_QUARTER(DateTimeValue, “ISO”) |
WEEKNUMBER_OF_QUARTER_ISO_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_QUARTER(DateTimeValue, “COMPATIBLE”) |
WEEKNUMBER_OF_QUARTER_COMPATIBLE_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_YEAR(DateTimeValue) |
WEEK_OF_YEAR_UDF(DateTimeValue) |
|
WEEKNUMBER_OF_YEAR(DateTimeValue, “COMPATIBLE”) |
WEEK_OF_YEAR_COMPATIBLE_UDF(DateTimeValue) |
Consulte Funções de calendário
Funções de caso¶
Teradata |
Snowflake |
Observação |
---|---|---|
COALESCE |
COALESCE |
|
NULLIF |
NULLIF |
Consulte funções de caso
Funções de comparação¶
Teradata |
Snowflake |
Observação |
---|---|---|
DECODE |
DECODE |
|
GREATEST |
GREATEST |
|
LEAST |
LEAST |
Consulte funções de comparação
Conversões do tipo de dados¶
Teradata |
Snowflake |
Observação |
---|---|---|
CAST |
CAST |
|
CAST(DatetimeValue AS INT) |
DATE_TO_INT_UDF |
|
CAST (VarcharValue AS INTERVAL) |
INTERVAL_UDF |
|
TRYCAST |
TRY_CAST |
|
FROM_BYTES |
TO_NUMBER |
com o parâmetro ASCII não é compatível com o Snowflake. |
Consulte Conversões de tipos de dados
Funções de conversão de tipos de dados¶
Teradata |
Snowflake |
Observação |
---|---|---|
TO_BYTES(Input, “Base10”) |
INT2HEX_UDF(Input) |
|
TO_NUMBER |
TO_NUMBER |
|
TO_CHAR |
TO_CHAR ou expressão equivalente |
|
TO_DATE |
TO_DATE |
|
TO_DATE(input, “YYYYDDD”) |
JULIAN_TO_DATE_UDF |
DateTime e funções de intervalo¶
Teradata |
Snowflake |
Observação |
---|---|---|
ADD_MONTHS |
ADD_MONTHS |
|
EXTRACT |
EXTRACT |
|
LAST_DAY |
LAST_DAY |
|
MONTH |
MONTH |
|
MONTHS_BETWEEN |
MONTHS_BETWEEN_UDF |
|
NEXT_DAY |
NEXT_DAY |
|
OADD_MONTHS |
ADD_MONTHS |
|
ROUND(Numeric) |
ROUND |
|
ROUND(Date) |
ROUND_DATE_UDF |
|
TRUNC(Date) |
TRUNC_UDF |
|
YEAR |
YEAR |
Funções de hash¶
Teradata |
Snowflake |
Observação |
---|---|---|
HASH_MD5 |
MD5 |
|
HASHAMP HASHBACKAM HASHBUCKET HASHROW |
Sem suporte |
Verifique as notas sobre as diferenças de arquitetura entre o Teradata e o Snowflake |
Consulte Funções de hash
Funções JSON¶
Teradata |
Snowflake |
Observação |
---|---|---|
NEW JSON |
TO_JSON(PARSE_JSON() ) |
|
JSON_CHECK |
CHECK_JSON |
Verifique JSON_CHECK |
JSON_TABLE |
Consulta equivalente |
|
JSONExtract JSONExtractValue |
JSON_EXTRACT_UDF |
Consulte a documentação do JSON
Funções de tratamento de nulos¶
Teradata |
Snowflake |
Observação |
---|---|---|
NVL |
NVL |
|
NVL2 |
NVL2 |
Consulte Funções de tratamento de nulos
Funções de agregação de janela/análise ordenada¶
Teradata |
Snowflake |
Observação |
---|---|---|
CSUM(col1, col2) |
SUM(col_1) OVER (PARTITION BY null ORDER BY col_2 ROWS UNBOUNDED PRECEDING) |
|
CUME_DIST |
CUME_DIST |
|
DENSE_RANK |
DENSE_RANK |
|
FIRST_VALUE |
FIRST_VALUE |
|
LAG |
LAG |
|
LAST_VALUE |
LAST_VALUE |
|
LEAD |
LEAD |
|
MAVG(csales, 2, cdate, csales) |
AVG(csales) OVER ( ORDER BY cdate, csales ROWS 1 PRECEDING) |
|
MEDIAN |
MEDIAN |
|
MSUM(csales, 2, cdate, csales) |
SUM(csales) OVER(ORDER BY cdate, csales ROWS 1 PRECEDING) |
|
PERCENT_RANK |
PERCENT_RANK |
|
PERCENTILE_CONT |
PERCENTILE_CONT |
|
PERCENTILE_DISC |
PERCENTILE_DISC |
|
QUANTILE |
QUANTILE |
|
RANK |
RANK |
|
ROW_NUMBER |
ROW_NUMBER |
Consulte Funções da janela
Funções e operadores de período¶
Teradata |
Snowflake |
Observação |
---|---|---|
BEGIN |
PERIOD_BEGIN_UDF |
|
END |
PERIOD_END_UDF |
|
INTERVAL |
TIMESTAMPDIFF |
|
LAST |
PERIOD_LAST_UDF |
|
LDIFF |
PERIOD_LDIFF_UDF |
|
OVERLAPS |
PUBLIC.PERIOD_OVERLAPS_UDF |
|
PERIOD |
PERIOD_UDF |
|
PERIOD(datetimeValue, UNTIL_CHANGED) |
PERIOD_UDF(datetimeValue, “9999-12-31 23:59:59.999999”) |
|
RDIFF |
PERIOD_RDIFF_UDF |
Consulte Funções e operadores de período
Funções de banda de consulta¶
Teradata |
Snowflake |
Observação |
---|---|---|
GETQUERYBANDVALUE |
GETQUERYBANDVALUE_UDF |
Consulte Funções de banda de consulta
Funções Regex¶
Teradata |
Snowflake |
Observação |
---|---|---|
REGEXP_INSTR |
REGEXP_INSTR |
|
REGEXP_REPLACE |
REGEXP_REPLACE |
|
REGEXP_SIMILAR |
REGEXP_LIKE |
|
REGEXP_SUBSTR |
REGEXP_SUBSTR |
Consulte Funções Regex
Operadores e funções de cadeia de caracteres¶
Teradata |
Snowflake |
Observação |
---|---|---|
ASCII |
ASCII |
|
CHAR2HEXINT |
CHAR2HEXINT_UDF |
|
CHR |
CHR/CHAR |
|
CHAR_LENGTH |
LEN |
|
CONCAT |
CONCAT |
|
EDITDISTANCE |
EDITDISTANCE |
|
INDEX |
CHARINDEX |
|
INITCAP |
INITCAP |
|
INSTR |
REGEXP_INSTR |
|
INSTR(StringValue, StringValue ,NumericNegativeValue, NumericValue) |
INSTR_UDF(StringValue, StringValue ,NumericNegativeValue, NumericValue) |
|
LEFT |
LEFT |
|
LENGTH |
LENGTH |
|
LOWER |
LOWER |
|
LPAD |
LPAD |
|
LTRIM |
LTRIM |
|
OREPLACE |
REPLACE |
|
OTRANSLATE |
TRANSLATE |
|
POSITION |
POSITION |
|
REVERSE |
REVERSE |
|
RIGHT |
RIGHT |
|
RPAD |
RPAD |
|
RTRIM |
RTRIM |
|
SOUNDEX |
SOUNDEX_P123 |
|
STRTOK |
STRTOK |
|
STRTOK_SPLIT_TO_TABLE |
STRTOK_SPLIT_TO_TABLE |
|
SUBSTRING |
SUBSTR/SUBSTR_UDF |
|
TRANSLATE_CHK |
TRANSLATE_CHK_UDF |
|
TRIM(LEADING “0” FROMaTABLE) |
LTRIM(aTABLE, “0”) |
|
TRIM(TRAILING “0” FROMaTABLE) |
RTRIM(aTABLE, “0”) |
|
TRIM(BOTH “0” FROMaTABLE) |
TRIM(aTABLE, “0”) |
|
TRIM(CAST(numericValue AS FORMAT “999”)) |
LPAD(numericValue, 3, 0) |
|
UPPER |
UPPER |
Consulte Funções e operadores de cadeia de caracteres
Funções St_Point¶
Teradata |
Snowflake |
Observação |
---|---|---|
ST_SPHERICALDISTANCE |
HAVERSINE |
Consulte Funções St_Point
Operadores de tabela¶
Teradata |
Snowflake |
Observação |
---|---|---|
TD_UNPIVOT |
Consulta equivalente |
Consulte Operadores de tabela
Funções XML¶
Teradata |
Snowflake |
Observação |
---|---|---|
XMLAGG |
LISTAGG |
|
XMLQUERY |
Sem suporte |
Consulte Funções XML
UDFs de extensibilidade¶
Esta seção contém UDFs e outras funções de extensibilidade que não são oferecidas como funções integradas ao sistema pelo Teradata, mas que são transformadas pelo SnowConvert
Teradata |
Snowflake |
Observação |
---|---|---|
CHKNUM |
CHKNUM_UDF |
Consulte esta página de download de UDF |
Notas¶
Diferenças de arquitetura entre o Teradata e o Snowflake¶
O Teradata tem uma arquitetura sem compartilhamento com Access Module Processors (AMP), em que cada AMP gerencia sua própria parcela de armazenamento em disco e é acessado por meio de hashing ao fazer consultas. Para aproveitar o paralelismo, as informações armazenadas devem ser distribuídas uniformemente entre AMPs e, para isso, o Teradata oferece um grupo de funções relacionadas a hash que podem ser usadas para determinar a qualidade dos índices primários reais.
Por outro lado, a arquitetura do Snowflake é diferente e gerencia a forma como os dados são armazenados por conta própria, o que significa que os usuários não precisam se preocupar em otimizar a distribuição dos dados.
Constantes de limite final (UNTIL_CHANGED e UNTIL_CLOSED)¶
Tanto UNTIL_CHANGED quanto UNTIL_CLOSED são constantes do Teradata que representam um limite final indefinido para períodos. Internamente, essas constantes são representadas como o valor máximo que um carimbo de data/hora pode ter, ou seja, “9999-12-31 23:59:59.999999”. Durante a migração da função PERIOD, o limite final é verificado, se presente, para determinar se é uma dessas constantes e para substituí-lo por varchar de valor “9999-12-31 23:59:59.999999”, caso seja, o Snowflake então converte o varchar em data ou carimbo de data/hora, dependendo do tipo do limite inicial ao chamar PERIOD____UDF.
Conversão implícita¶
Algumas funções de cadeia de caracteres do Teradata, como INDEX ou POSITION, aceitam tipos de dados diferentes e os convertem implicitamente em cadeia de caracteres, o que pode causar inconsistências nos resultados dessas funções entre o Teradata e o Snowflake. Por exemplo, o seguinte código do Teradata:
SELECT INDEX(35, '5');
Retorna 4, enquanto o equivalente CHARINDEX no Snowflake:
SELECT CHARINDEX('5', 35);
Retorna 2, isso acontece porque o Teradata tem seus próprios formatos padrão que são usados durante a conversão implícita. No exemplo acima, o Teradata interpreta a constante numérica 35 como BYTEINT e usa o formato padrão BYTEINT'-999'
para a conversão implícita em cadeia de caracteres, fazendo com que o valor convertido seja ' 35'
. Por outro lado, o Snowflake usa seus próprios formatos padrão, criando inconsistências no resultado.
Para resolver isso, as seguintes alterações são feitas nesses parâmetros de função:
Se o parâmetro não tiver uma conversão com formato, será adicionada uma função
TO_VARCHAR
do Snowflake com o equivalente ao formato padrão do Teradata no Snowflake.Se o parâmetro tiver uma conversão com formato, o formato será convertido em seu equivalente no Snowflake e a função
TO_VARCHAR
será adicionada.Como observação adicional, o Teradata ignora o sinal de um número se ele não for explicitamente colocado em um formato, enquanto o Snowflake sempre adiciona espaços para inserir o sinal, mesmo quando não especificado. Nesses casos, é feita uma verificação para ver se o sinal foi especificado e para removê-lo da cadeia de caracteres do Snowflake, caso não tenha sido.
Após essas alterações, o código resultante seria o seguinte:
SELECT CHARINDEX( '5', TO_VARCHAR(35, 'MI999'));
Que retorna 4, o mesmo que o código do Teradata.
Problemas conhecidos¶
Não foram encontrados problemas.