SQL 변환 참조¶
이를 참고하여 Teradata에서 Snowflake SQL 로 마이그레이션할 때 변환된 코드가 어떻게 보이는지 이해하십시오. 각 언어 간에는 유사한 구문이 있지만, 각 언어는 새로운 함수를 확장하거나 추가할 수 있습니다.
참고
이 페이지에는 SnowConvert 에 의해 이미 변환된 함수만 목록이 표시되며, Teradata 설명서의 함수가 여기에 나열되지 않은 경우 지원되지 않는 것으로 간주해야 합니다.
집계 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
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>여러 함수가 있는 피벗 해제는<br>Snowflake에서 지원되지 않습니다</p> |
VAR_POP |
VAR_POP |
|
VAR_SAMP |
VAR_SAMP |
집계 함수 참조
산술, 삼각, 쌍곡선 연산자/함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
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 |
특성 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
BIT_LENGTH |
BIT_LENGTH |
|
BYTE BYTES |
LENGTH |
|
CHAR CHARS CHARACTERS |
LEN |
|
CHAR_LENGTH CHARACTER_LENGTH |
LEN |
|
MCHARACTERS |
LENGTH |
|
OCTECT_LENGTH |
OCTECT_LENGTH |
특성 함수 참조
비트/바이트 조작 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
BITAND |
BITAND |
|
BITNOT |
BITNOT |
|
BITOR |
BITOR |
|
BITXOR |
BITXOR |
|
GETBIT |
GETBIT |
비트/바이트 함수 참조
기본 제공(시스템 함수)¶
Teradata |
Snowflake |
참고 |
---|---|---|
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 |
기본 제공 함수 참조
비즈니스 캘린더¶
Teradata |
Snowflake |
참고 |
---|---|---|
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, ‘일요일’) |
|
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 |
비즈니스 캘린더 참조
캘린더 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
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) |
캘린더 함수 참조
대/소문자 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
COALESCE |
COALESCE |
|
NULLIF |
NULLIF |
대/소문자 함수 참조
비교 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
DECODE |
DECODE |
|
GREATEST |
GREATEST |
|
LEAST |
LEAST |
비교 함수 참조
데이터 타입 변환¶
Teradata |
Snowflake |
참고 |
---|---|---|
CAST |
CAST |
|
CAST(DatetimeValue AS INT) |
DATE_TO_INT_UDF |
|
CAST (VarcharValue AS INTERVAL) |
INTERVAL_UDF |
|
TRYCAST |
TRY_CAST |
|
FROM_BYTES |
TO_NUMBER |
Snowflake에서 지원되지 않는 ASCII 매개 변수 포함 |
데이터 타입 변환 참조
데이터 타입 변환 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
TO_BYTES(Input, ‘Base10’) |
INT2HEX_UDF입력 |
|
TO_NUMBER |
TO_NUMBER |
|
TO_CHAR |
TO_CHAR 또는 이와 동등한 식 |
|
TO_DATE |
TO_DATE |
|
TO_DATE(입력, ‘YYYYDDD’) |
JULIAN_TO_DATE_UDF |
데이터 타입 변환 함수 참조
DateTime 및 간격 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
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(숫자) |
ROUND |
|
ROUND(날짜) |
ROUND_DATE_UDF |
|
TRUNC(날짜) |
TRUNC_UDF |
|
YEAR |
YEAR |
해시 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
HASH_MD5 |
MD5 |
|
HASHAMP HASHBACKAM HASHBUCKET HASHROW |
지원되지 않음 |
Teradata 와 Snowflake 의 아키텍처 차이점에 대한 참고를 확인하십시오. |
해시 함수 참조
JSON 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
NEW JSON |
TO_JSON(PARSE_JSON() ) |
|
JSON_CHECK |
CHECK_JSON |
JSON_CHECK 확인 |
JSON_TABLE |
동등한 쿼리 |
|
JSONExtract JSONExtractValue |
JSON_EXTRACT_UDF |
JSON 설명서 를 참조하십시오.
Null 처리 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
NVL |
NVL |
|
NVL2 |
NVL2 |
Null 처리 함수 참조
정렬된 분석/윈도우 집계 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
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 |
윈도우 함수 참조
기간 함수 및 연산자¶
Teradata |
Snowflake |
참고 |
---|---|---|
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 |
기간 함수 및 연산자 참조
쿼리 밴드 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
GETQUERYBANDVALUE |
GETQUERYBANDVALUE_UDF |
쿼리 밴드 함수 참조
정규식 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
REGEXP_INSTR |
REGEXP_INSTR |
|
REGEXP_REPLACE |
REGEXP_REPLACE |
|
REGEXP_SIMILAR |
REGEXP_LIKE |
|
REGEXP_SUBSTR |
REGEXP_SUBSTR |
Regex 함수 참조
문자열 연산자 및 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
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’ FROM aTABLE) |
LTRIM(aTABLE, ‘0’) |
|
TRIM(TRAILING ‘0’ FROM aTABLE) |
RTRIM(aTABLE, ‘0’) |
|
TRIM(BOTH ‘0’ FROM aTABLE) |
TRIM(aTABLE, ‘0’) |
|
TRIM(CAST(numericValue AS FORMAT ‘999’)) |
LPAD(numericValue, 3, 0) |
|
UPPER |
UPPER |
문자열 연산자 및 함수 참조
St_Point 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
ST_SPHERICALDISTANCE |
HAVERSINE |
St_Point 함수 참조
테이블 연산자¶
Teradata |
Snowflake |
참고 |
---|---|---|
TD_UNPIVOT |
동등한 쿼리 |
테이블 연산자 참조
XML 함수¶
Teradata |
Snowflake |
참고 |
---|---|---|
XMLAGG |
LISTAGG |
|
XMLQUERY |
지원되지 않음 |
XML 함수참조
확장성 UDFs¶
이 섹션에는 UDFs 및 Teradata에서 시스템 기본 제공 함수로 제공되지는 않지만, SnowConvert 에 의해 변환된 기타 확장성 함수가 포함되어 있습니다
Teradata |
Snowflake |
참고 |
---|---|---|
CHKNUM |
CHKNUM_UDF |
UDF 다운로드 페이지 참조 |
참고¶
Teradata와 Snowflake의 아키텍처 차이점¶
Teradata는 액세스 모듈 프로세서(AMP)를 통해 각 AMP 가 디스크 저장소의 고유한 몫을 관리하고 쿼리 수행 시 해시를 통해 액세스하는 공유 아키텍처를 채택하고 있습니다. 병렬성을 활용하려면 저장된 정보가 AMPs 에 고르게 분산되어야 하며, 이를 위해 Teradata는 실제 기본 인덱스가 얼마나 좋은지 결정하는 데 사용할 수 있는 해시 관련 함수 그룹을 제공합니다.
반면, Snowflake 아키텍처는 데이터 저장 방식을 자체적으로 관리하므로 사용자는 데이터 배포 최적화에 대해 걱정할 필요가 없습니다.
끝 바인딩 상수(UNTIL_CHANGED 및 UNTIL_CLOSED)¶
UNTIL_CHANGED 및 UNTIL_CLOSED 는 모두 기간에 바인딩된 정의되지 않은 끝을 나타내는 Teradata 상수입니다. 내부적으로 이러한 상수는 타임스탬프가 가질 수 있는 최대값, 즉 ‘9999-12-31 23:59:59.999999’로 표시됩니다. PERIOD 함수를 마이그레이션하는 동안 끝 바인드가 존재하는지 확인하여 이러한 상수 중 하나인지 확인하고, 존재하는 경우 ‘9999-12-31 23:59:59.999999’ 값의 varchar로 대체합니다. 그런 다음 Snowflake는 PERIOD___UDF 를 호출할 때 시작 바인딩의 유형에 따라 varchar를 날짜 또는 타임스탬프로 형 변환합니다.
암시적 변환¶
INDEX 또는 POSITION 같은 일부 Teradata 문자열 함수는 문자열이 아닌 데이터 타입을 허용하고 이를 암시적으로 문자열로 변환하므로, Teradata와 Snowflake 간에 해당 함수의 결과에 불일치가 발생할 수 있습니다. 예를 들어, 다음 Teradata 코드가 있습니다.
SELECT INDEX(35, '5');
4를 반환하고, CHARINDEX 는 Snowflake에 해당합니다.
SELECT CHARINDEX('5', 35);
2를 반환하는 경우, 이는 Teradata에 암시적 변환 중에 사용되는 자체 기본 형식 이 있기 때문에 발생합니다. 위의 예에서 Teradata는 숫자 상수 35를 BYTEINT 로 해석하고 BYTEINT 기본값 형식 '-999'
을 사용하여 문자열로 암시적으로 변환하므로 변환된 값은 '35'
가 됩니다. 반면에 Snowflake는 자체 기본 형식 을 사용하므로 결과에 불일치가 발생합니다.
이 문제를 해결하기 위해 해당 함수 매개 변수를 다음과 같이 변경합니다.
매개 변수에 형식의 형 변환이 없는 경우, 대신 기본 Teradata 형식에 해당하는 Snowflake
TO_VARCHAR
함수가 추가됩니다.매개 변수에 형식을 갖는 형변환이 있는 경우 형식이 해당 형식에 해당하는 Snowflake로 변환되고
TO_VARCHAR
함수가 추가됩니다.참고로, Teradata는 숫자 부호가 형식 안에 명시적으로 입력되지 않은 경우 이를 무시하는 반면, Snowflake는 지정되지 않은 경우에도 항상 공백을 추가하여 부호를 삽입하며, 이러한 경우 부호가 지정되었는지 확인하고 지정되지 않은 경우 Snowflake 문자열에서 부호를 제거하기 위해 검사를 수행합니다.
이러한 변경 후 결과 코드는 다음과 같습니다.
SELECT CHARINDEX( '5', TO_VARCHAR(35, 'MI999'));
그러면 Teradata 코드와 동일한 4가 반환됩니다.
Known Issues¶
문제가 발견되지 않았습니다.