SnowConvert: Redshift 데이터 타입¶
데이터 타입¶
Snowflake는 대부분의 기본 SQL 데이터 타입 (일부 제한 있음)을 열, 로컬 변수, 식, 매개 변수, 기타 모든 적절한/적합한 위치에 사용할 수 있도록 지원합니다.
숫자 데이터 타입 ¶
Redshift |
Snowflake |
참고 |
---|---|---|
INT |
INT |
Snowflake의 INT 는 NUMBER 의 별칭입니다. |
INT2 |
SMALLINT |
Snowflake의 INT2 는 NUMBER 의 별칭입니다. |
INT4 |
INTEGER |
Snowflake의 INT4 는 NUMBER 의 별칭입니다. |
INT8 |
INTEGER |
Snowflake의 INT8 는 NUMBER 의 별칭입니다. |
INTEGER |
INTEGER |
Snowflake의 INTEGER 는 NUMBER 의 별칭입니다. |
BIGINT |
BIGINT |
Snowflake의 BIGINT 는 NUMBER 의 별칭입니다. |
DECIMAL |
DECIMAL |
Snowflake의 DECIMAL 은 NUMBER 의 별칭입니다. |
DOUBLE PRECISION |
DOUBLE PRECISION |
Snowflake의 DOUBLE PRECISION 은 FLOAT 의 별칭입니다. |
NUMERIC |
NUMERIC |
Snowflake의 NUMERIC 은 NUMBER 의 별칭입니다. |
SMALLINT |
SMALLINT |
Snowflake의 SMALLINT 는 NUMBER 의 별칭입니다. |
FLOAT |
FLOAT |
Snowflake는 배정밀도(64비트) IEEE 754 부동 소수점 숫자를 사용합니다. |
FLOAT4 |
FLOAT4 |
Snowflake의 FLOAT4 는 FLOAT 의 별칭입니다. |
FLOAT8 |
FLOAT8 |
Snowflake의 FLOAT8 은 FLOAT 의 별칭입니다. |
REAL |
REAL |
Snowflake의 REAL 은 FLOAT 의 별칭입니다. |
문자 유형 ¶
Redshift |
Snowflake |
참고 |
---|---|---|
VARCHAR |
VARCHAR |
VARCHAR 는 유니코드 UTF-8 문자를 보유합니다. 길이를 지정하지 않을 경우 기본값은 최대 허용 길이(16,777,216)입니다. |
CHAR |
CHAR |
Snowflake의 CHAR 은 VARCHAR 의 별칭입니다. |
CHARACTER |
CHARACTER |
Snowflake의 CHARACTER 는 VARCHAR 의 별칭입니다. |
NCHAR |
NCHAR |
Snowflake의 NCHAR 은 VARCHAR 의 별칭입니다. |
BPCHAR |
VARCHAR |
BPCHAR 데이터 타입은 Snowflake에서 지원되지 않습니다. VARCHAR 이 대신 사용됩니다. 자세한 내용은 SSC-FDM-PG0002를 참조하십시오. |
NVARCHAR |
NVARCHAR |
Snowflake의 NVARCHAR 은 VARCHAR 의 별칭입니다. |
CHARACTER VARYING |
CHARACTER VARYING |
Snowflake의 CHARACTER VARYING 은 VARCHAR 의 별칭입니다. |
NATIONAL CHARACTER |
NCHAR |
Snowflake의 NCHAR 은 VARCHAR 의 별칭입니다. |
NATIONAL CHARACTER VARYING |
NCHAR VARYING |
Snowflake의 NCHAR VARYING 은 VARCHAR 의 별칭입니다. |
TEXT |
TEXT |
Snowflake의 TEXT 는 VARCHAR 의 별칭입니다. |
NAME (특수 문자 유형) |
VARCHAR |
VARCHAR 는 유니코드 UTF-8 문자를 보유합니다. 길이를 지정하지 않을 경우 기본값은 최대 허용 길이(16,777,216)입니다. |
참고
Redshift 데이터 타입에 MAX 전체 자릿수 인자가 있는 경우, 해당 데이터 타입은 Snowflake에서 지원하는 기본 최대 전체 자릿수로 변환됩니다.
부울 유형 ¶
Redshift |
Snowflake |
참고 |
---|---|---|
BOOL |
BOOLEAN |
|
BOOLEAN |
BOOLEAN |
이진 데이터 타입 ¶
Redshift |
Snowflake |
참고 |
---|---|---|
VARBYTE |
VARBINARY |
VARBINARY는 BINARY와 동의어입니다. |
VARBINARY |
VARBINARY |
VARBINARY는 BINARY와 동의어입니다. |
BINARY |
BINARY |
최대 길이는 8 MB (8,388,608바이트)입니다. |
BINARY VARYING |
BINARY VARYING |
BINARY VARYING 은 BINARY 와 동의어입니다. |
경고
Redshift에서 이진형의 최대 길이는 16 MB (16,777,216바이트)이지만, Snowflake에서는 8 MB (8,388,608바이트)입니다. 최대 길이가 줄어든 점을 고려하십시오.
날짜 & 시간 데이터 타입 ¶
Redshift |
Snowflake |
참고 |
---|---|---|
DATE |
DATE |
DATE 는 가장 일반적인 형식( |
TIME |
TIME |
|
TIMETZ |
TIME |
시간 데이터 타입에 타임존이 지원되지 않습니다. 자세한 내용은 SSC-FDM-0005 를 참조하십시오. |
TIME WITH TIME ZONE |
TIME |
시간 데이터 타입에 타임존이 지원되지 않습니다. 자세한 내용은 SSC-FDM-0005 를 참조하십시오. |
TIME WITHOUT TIME ZONE |
TIME |
Snowflake는 시간을 |
TIMESTAMP |
TIMESTAMP |
타임스탬프 정밀도는 0(초)~9(나노초)의 범위로 지정할 수 있습니다. |
TIMESTAMPTZ |
TIMESTAMP_TZ |
TIMESTAMP\TZ 는 내부적으로 UTC 시간을 관련 _time zone offset_과 함께 저장합니다. |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP_TZ |
TIMESTAMP\TZ 는 내부적으로 UTC 시간을 관련 _time zone offset_과 함께 저장합니다. |
TIMESTAMP WITHOUT TIME ZONE |
TIMESTAMP_NTZ |
TIMESTAMP\NTZ 는 내부적으로 지정된 전체 자릿수로 “현지” 시간을 저장합니다. |
INTERVAL YEAR TO MONTH |
VARCHAR |
간격 데이터 타입은 Snowflake에서 지원되지 않습니다. VARCHAR 로 변경되었습니다. |
INTERVAL DAY TO SECOND |
VARCHAR |
간격 데이터 타입은 Snowflake에서 지원되지 않습니다. VARCHAR 로 변경되었습니다. |
기타 데이터 타입 ¶
Redshift |
Snowflake |
참고 |
---|---|---|
GEOMETRY |
GEOMETRY |
좌표는 실수 쌍(x, y)으로 표시됩니다. 현재, 2D 좌표만 지원됩니다. |
GEOGRAPHY |
GEOGRAPHY |
GEOGRAPHY 데이터 타입은 WGS 84 표준을 따릅니다. |
HLLSKETCH |
N/A |
Snowflake에서 지원되지 않는 데이터 타입입니다. 자세한 내용은 SSC-EWI-RS0004를 참조하십시오. |
SUPER |
VARIANT |
OBJECT 및 ARRAY 값을 포함하여 다른 데이터 타입의 값을 포함할 수 있습니다. |
INTERVAL DAY TO SECOND 데이터 타입¶
설명¶
INTERVAL DAY TO SECOND 간격 리터럴을 지정하여 일, 시간, 분, 초 단위로 기간을 정의합니다. (RedShift SQL Language Reference 간격 데이터 타입)
이 데이터 타입에 해당하는 데이터 타입은 Snowflake에 없으며, 현재 VARCHAR
로 변환됩니다.
문법 구문 ¶
INTERVAL day_to_second_qualifier [ (fractional_precision) ]
day_to_second_qualifier:
{ DAY | HOUR | MINUTE | SECOND | DAY TO HOUR | DAY TO MINUTE | DAY TO SECOND |
HOUR TO MINUTE | HOUR TO SECOND | MINUTE TO SECOND }
경고
Interval 데이터 타입의 사용은 향후 업데이트에서 구현될 계획입니다.
샘플 소스 패턴¶
Create Table에서 일에서 초 사이의 간격¶
입력¶
CREATE TABLE interval_day_to_second_table
(
interval_day_col1 INTERVAL DAY TO HOUR,
interval_day_col2 INTERVAL DAY TO SECOND(4)
);
INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ( INTERVAL '1 2' DAY TO HOUR );
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ( INTERVAL '1 2:3:4.56' DAY TO SECOND(4));
출력¶
CREATE TABLE interval_day_to_second_table
(
interval_day_col1 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO HOUR DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_day_col2 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL DAY TO SECOND(4) DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"redshift"}}'
;
INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ('1days, 2hours');
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ('1days, 2hours, 3mins, 4secs, 56ms');
간격 값은 지원되는 Snowflake 형식으로 변환된 다음 열 내부에 텍스트로 삽입됩니다. Snowflake는 Interval 을 데이터 타입으로 지원하지 않으므로 산술 작업에서만 지원됩니다. 이 값을 사용하려면 값을 추출하여 간격 상수 로 사용해야 합니다(가능한 경우).
원본 Oracle 값: INTERVAL '1 2:3:4.567' DAY TO SECOND
Snowflake 열에 저장된 값: '1days, 2hours, 3mins, 4secs, 56ms'
Snowflake 간격 상수 값: INTERVAL '1days, 2hours, 3mins, 4secs, 56ms'
간격 일에서 두 번째 열로 데이터 검색하기¶
입력¶
SELECT * FROM interval_day_to_second_table;
interval_day_col1 |
interval_day_col2 |
---|---|
1일 2시간 0분 0.0초 |
NULL |
NULL |
1일 2시간 3분 4.56초 |
출력¶
SELECT * FROM
interval_day_to_second_table;
interval_day_col1 |
interval_day_col2 |
---|---|
1일, 2시간 |
NULL |
NULL |
1일, 2시간, 3분, 4초, 56밀리초 |
Known Issues¶
1. Only arithmetic operations are supported¶
Snowflake 간격에는 몇 가지 제한 사항이 있습니다. DATE
또는 TIMESTAMP
및 Interval Constants 간의 산술 연산만 지원되며, 다른 모든 시나리오는 지원되지 않습니다.
관련 EWIs¶
SSC-EWI-0036: 데이터 타입이 다른 데이터 타입으로 변환되었습니다.
INTERVAL YEAR TO MONTH 데이터 타입¶
설명¶
INTERVAL YEAR TO MONTH 간격 데이터 타입을 지정하여 연도 및 월 단위로 기간을 저장합니다. (RedShiftSQL Language Reference 간격 데이터 타입)
이 데이터 타입에 해당하는 데이터 타입은 Snowflake에 없으며, 현재 VARCHAR 로 변환됩니다.
문법 구문 ¶
INTERVAL {YEAR | MONTH | YEAR TO MONTH}
경고
Interval 데이터 타입의 사용은 향후 업데이트에서 구현될 계획입니다.
샘플 소스 패턴¶
Create Table의 연도 간 월 간 간격¶
입력:¶
CREATE TABLE interval_year_to_month_table
(
interval_year_col1 INTERVAL YEAR,
interval_year_col2 INTERVAL MONTH,
interval_year_col3 INTERVAL YEAR TO MONTH
);
INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ( INTERVAL '12' YEAR);
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ( INTERVAL '5' MONTH);
INSERT INTO interval_year_to_month_table(interval_year_col3) VALUES ( INTERVAL '1000-11' YEAR TO MONTH );
출력¶
CREATE TABLE interval_year_to_month_table
(
interval_year_col1 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_year_col2 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_year_col3 VARCHAR !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL YEAR TO MONTH DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"redshift"}}'
;
INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ('12year, 0mons');
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ('0year, 5mons');
INSERT INTO interval_year_to_month_table(interval_year_col3) VALUES ('1000year, 11mons');
간격 값은 지원되는 Snowflake 형식으로 변환된 다음 열 내부에 텍스트로 삽입됩니다. Snowflake는 Interval 을 데이터 타입으로 지원하지 않으므로 산술 작업에서만 지원됩니다. 이 값을 사용하려면 값을 추출하여 간격 상수 로 사용해야 합니다(가능한 경우).
원본 편위 값: INTERVAL'1-2'YEARTOMONTH
Snowflake 열에 저장된 값: '1y, 2m'
Snowflake 간격 상수 값: INTERVAL '1y, 2m'
연도 간에서 월 간 열에서 데이터 검색하기¶
입력¶
SELECT * FROM interval_year_to_month_table;
interval_year_col1 |
interval_year_col2 |
interval_year_col2 |
---|---|---|
12 years 0 mons |
NULL |
NULL |
NULL |
0 years 5 mons |
NULL |
NULL |
NULL |
1000 years 11 mons |
출력¶
SELECT * FROM
interval_year_to_month_table;
interval_year_col1 |
interval_year_col2 |
interval_year_col2 |
---|---|---|
12 y 0 mm |
NULL |
NULL |
NULL |
0 y 5 mm |
NULL |
NULL |
NULL |
1000 y 11 mons |
Known Issues¶
1. Only arithmetic operations are supported¶
Snowflake 간격에는 몇 가지 제한 사항이 있습니다. DATE
또는 TIMESTAMP
및 Interval Constants 간의 산술 연산만 지원되며, 다른 모든 시나리오는 지원되지 않습니다.
관련 EWIs¶
SSC-EWI-0036: 데이터 타입이 다른 데이터 타입으로 변환되었습니다.
숫자 형식 모델¶
설명¶
다음은 Redshift 에서 지원하는 다양한 숫자 형식과 이에 상응하는 Snowflake 의 형식입니다.
Redshift |
Snowflake |
주석 |
---|---|---|
0 |
0 |
|
9 |
9 |
|
. (기간), D |
. (기간), D |
|
, (쉼표) |
, (쉼표) |
|
CC |
현재 Snowflake에는 Century Code에 해당하는 항목이 없습니다. |
|
FM |
FM |
|
PR |
현재 Snowflake에는 이 형식에 해당하는 항목이 없습니다. |
|
S |
S |
명시적 숫자 기호. |
L |
$ |
통화 기호 자리 표시자. |
G |
G |
|
MI |
MI |
마이너스 기호(음수의 경우) |
PL |
S |
현재 Snowflake에는 더하기 기호에 해당하는 기능이 없습니다. 따라서 명시적 숫자 기호로 변환됩니다. |
SG |
S |
명시적 숫자 지정된 위치에 기입합니다. |
RN |
현재 Snowflake의 로마 숫자에 해당하는 것은 없습니다. |
|
TH |
현재 Snowflake의 서수 접미사에 해당하는 것은 없습니다 |
샘플 소스 패턴¶
To_Number 함수에서 사용¶
입력:¶
select to_number('09423', '999999999') as multiple_nines
, to_number('09423', '00000') as exact_zeros
, to_number('123.456', '999D999') as decimals
, to_number('123,031.30', 'FM999,999D999') as fill_mode
, to_number('$ 12,454.88', '$999,999.99') as currency
;
multiple_nines | exact_zeros | decimals | fill_mode | currency |
---|---|---|---|---|
9423 | 9423 | 123.456 | 123031.30 | 1254.88 |
출력¶
select to_number('09423', '999999999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999999999'' NODE ***/!!! as multiple_nines
, to_number('09423', '00000') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''00000'' NODE ***/!!! as exact_zeros
, to_number('123.456', '999D999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999D999'' NODE ***/!!! as decimals
, to_number('123,031.30', 'FM999,999D999') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''FM999,999D999'' NODE ***/!!! as fill_mode
, to_number('$ 12,454.88', '$999,999.99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''$999,999.99'' NODE ***/!!! as currency
;
multiple_nines | exact_zeros | decimals | fill_mode | currency |
---|---|---|---|---|
9423 | 9423 | 123.456 | 123031.300 | 12454.88 |
입력:¶
select to_number('$ 12,454.88', 'FML99G999D99') as currency_L
, to_number('123-', '999S') as signed_number_end
, to_number('+12454.88', 'PL99G999D99') as plus_sign
, to_number('-12,454.88', 'MI99G999D99') as minus_sign
, to_number('-12,454.88', 'SG99G999D99') as signed_number
;
currency_L | signed_number_end | plus_sign | minus_sign | signed_number |
---|---|---|---|---|
12454.8 | -123 | 1254.88 | -12454.88 | -12454.88 |
출력:¶
select to_number('$ 12,454.88', 'FML99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - 'FML99G999D99' FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!! as currency_L
, to_number('123-', '999S') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''999S'' NODE ***/!!! as signed_number_end
, to_number('+12454.88', 'PL99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - 'PL99G999D99' FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!! as plus_sign
, to_number('-12,454.88', 'MI99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''MI99G999D99'' NODE ***/!!! as minus_sign
, to_number('-12,454.88', 'SG99G999D99') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR ''SG99G999D99'' NODE ***/!!! as signed_number
;
currency_L | signed_number_end | plus_sign | minus_sign | signed_number |
---|---|---|---|---|
12454.8 | -123 | 1254.88 | -12454.88 | -12454.88 |
To_Char 함수에서 사용¶
입력:¶
select to_char(-123, '999S') as signed_number
, to_char(12454.88, 'FM99G999D99') as decimal_number
, to_char(-12454.88, '99G999D99') as negative
, to_char(-12454.88, 'MI99G999D99') as minus_sign
, to_char(+12454.88, 'PL99G999D99') as plus_sign
, to_char(09423, '999999999') as multiple_nines
, to_char(09423, '00000') as exact_zeros
;
signed_number | decimal_number | negative | minus_sign | plus_sign | multiple_ninesmultiple_nines | exact_zerosexact_zeros |
---|---|---|---|---|---|---|
'123-' | '12,454.88' | '-12,454.88' | '12454.88' | '-12,454.88' | '09423' | '09423' |
출력:¶
select
TO_CHAR(-123, '999S') as signed_number,
TO_CHAR(12454.88, 'FM99G999D99') as decimal_number,
TO_CHAR(-12454.88, '99G999D99') as negative,
TO_CHAR(-12454.88, 'MI99G999D99') as minus_sign,
TO_CHAR(+12454.88, 'S99G999D99') as plus_sign,
TO_CHAR(09423, '999999999') as multiple_nines,
TO_CHAR(09423, '00000') as exact_zeros
;
signed_number | decimal_number | negative | minus_sign | plus_sign | multiple_ninesmultiple_nines | exact_zerosexact_zeros |
---|---|---|---|---|---|---|
'123-' | '12,454.88' | '-12,454.88' | '12454.88' | '-12,454.88' | '09423' | '09423' |
지원되지 않는 형식¶
다음 형식은 지원되지 않으며, 이 경우 EWI 로 표시됩니다.
입력:¶
SELECT to_char(123031, 'th999,999')
출력:¶
SELECT
TO_CHAR(123031, 'th999,999') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - th999,999 FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
문제 파악¶
1. Using numeric signs inside the number not supported.¶
숫자 시작이 아닌 숫자 내부에 숫자 기호 형식(MI, SG 또는 PL)을 사용하거나 숫자 끝에 숫자 기호를 사용하는 경우 Snowflake에서 지원되지 않습니다
예
select to_number('12,-454.88', '99GMI999D99')
관련 EWIs¶
SSC-EWI-PG0005: 현재 날짜/숫자 형식은 Snowflake에서 다른 동작을 할 수 있습니다.