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 는 가장 일반적인 형식(YYYY-MM-DD, DD-MON-YYYY 등)의 날짜를 허용합니다.

TIME

TIME

HH:MI:SS 의 형태로 저장합니다. 시간 정밀도는 0(초)~9(나노초)의 범위로 지정할 수 있습니다. 기본 정밀도는 9입니다.

TIMETZ

TIME

시간 데이터 타입에 타임존이 지원되지 않습니다. 자세한 내용은 SSC-FDM-0005 를 참조하십시오.

TIME WITH TIME ZONE

TIME

시간 데이터 타입에 타임존이 지원되지 않습니다. 자세한 내용은 SSC-FDM-0005 를 참조하십시오.

TIME WITHOUT TIME ZONE

TIME

Snowflake는 시간을 HH:MI:SS 형식으로 저장하기 위한 단일 TIME 데이터를 지원합니다.

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 }
Copy

경고

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));
Copy
출력
 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');
Copy

간격 값은 지원되는 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;
Copy

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;
Copy

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 또는 TIMESTAMPInterval Constants 간의 산술 연산만 지원되며, 다른 모든 시나리오는 지원되지 않습니다.

관련 EWIs

  1. SSC-EWI-0036: 데이터 타입이 다른 데이터 타입으로 변환되었습니다.

INTERVAL YEAR TO MONTH 데이터 타입

설명

INTERVAL YEAR TO MONTH 간격 데이터 타입을 지정하여 연도 및 월 단위로 기간을 저장합니다. (RedShiftSQL Language Reference 간격 데이터 타입)

이 데이터 타입에 해당하는 데이터 타입은 Snowflake에 없으며, 현재 VARCHAR 로 변환됩니다.

문법 구문

 INTERVAL {YEAR | MONTH | YEAR TO MONTH}
Copy

경고

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 );
Copy
출력
 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');
Copy

간격 값은 지원되는 Snowflake 형식으로 변환된 다음 열 내부에 텍스트로 삽입됩니다. Snowflake는 Interval 을 데이터 타입으로 지원하지 않으므로 산술 작업에서만 지원됩니다. 이 값을 사용하려면 값을 추출하여 간격 상수 로 사용해야 합니다(가능한 경우).

원본 편위 값: INTERVAL'1-2'YEARTOMONTH

Snowflake 열에 저장된 값: '1y, 2m'

Snowflake 간격 상수 값: INTERVAL '1y, 2m'

연도 간에서 월 간 열에서 데이터 검색하기

입력
 SELECT * FROM interval_year_to_month_table;
Copy

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;
Copy

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 또는 TIMESTAMPInterval 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
;
Copy
multiple_ninesexact_zerosdecimalsfill_modecurrency
94239423123.456123031.301254.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
;
Copy
multiple_ninesexact_zerosdecimalsfill_modecurrency
94239423123.456123031.30012454.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
;
Copy
currency_Lsigned_number_endplus_signminus_signsigned_number
12454.8-1231254.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
;
Copy
currency_Lsigned_number_endplus_signminus_signsigned_number
12454.8-1231254.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
;
Copy
signed_numberdecimal_numbernegativeminus_signplus_signmultiple_ninesmultiple_ninesexact_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
;
Copy
signed_numberdecimal_numbernegativeminus_signplus_signmultiple_ninesmultiple_ninesexact_zerosexact_zeros
'123-''12,454.88''-12,454.88''12454.88''-12,454.88''09423''09423'

지원되지 않는 형식

다음 형식은 지원되지 않으며, 이 경우 EWI 로 표시됩니다.

입력:
 SELECT to_char(123031, 'th999,999')
Copy
출력:
 SELECT
TO_CHAR(123031, 'th999,999') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - th999,999 FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
Copy

문제 파악

1. Using numeric signs inside the number not supported.

숫자 시작이 아닌 숫자 내부에 숫자 기호 형식(MI, SG 또는 PL)을 사용하거나 숫자 끝에 숫자 기호를 사용하는 경우 Snowflake에서 지원되지 않습니다

 select to_number('12,-454.88', '99GMI999D99')
Copy

관련 EWIs

  • SSC-EWI-PG0005: 현재 날짜/숫자 형식은 Snowflake에서 다른 동작을 할 수 있습니다.