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)です。

注釈

MAX precision引数がRedshiftデータ型に存在する場合、それらはSnowflakeがサポートするデフォルトのmax precisionに変換されます。

ブール型

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-DDDD-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 は、関連する time zone offset と一緒に UTC 時間を内部的に保存します。

TIMESTAMP WITH TIME ZONE

TIMESTAMP_TZ

TIMESTAMP_TZ は、関連する time zone offset と一緒に UTC 時間を内部的に保存します。

TIMESTAMP WITHOUT TIME ZONE

TIMESTAMP_NTZ

TIMESTAMP_NTZ は、指定された精度で「wallclock」時間を内部的に保存します。

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 言語リファレンス間隔データ型)

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

警告

間隔データ型の使用は、将来のアップデートで実装される予定です。

サンプルソースパターン

テーブル作成時の日~秒の間隔

入力
 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は 間隔 をデータ型としてサポートしていないため、算術演算でのみサポートされます。この値を使用するには、(可能であれば) 間隔定数 として取り出して使用する必要があります。

オリジナルのOracle値: INTERVAL '1 2:3:4.567' DAY TO SECOND

Snowflake列に格納された値: '1日、2時間、3分、4秒、56ミリ秒'

Snowflake間隔定数としての値: INTERVAL '1日、2時間、3分、4秒、56ミリ秒'

日~秒の間隔列からのデータの取得

入力
 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ミリ秒

既知の問題

1.算術演算のみがサポートされています

Snowflake間隔にはいくつかの制限があります。DATE または TIMESTAMP間隔定数 間の算術演算のみがサポートされており、その他のシナリオはサポートされていません。

関連 EWIs

  1. SSC-EWI-0036: データ型が別のデータ型に変換されました。

INTERVAL YEAR TO MONTH データ型

説明

INTERVAL YEAR TO MONTH は間隔データ型を指定し、年単位と月単位で期間を保存します。(RedShift SQL 言語リファレンス間隔データ型)

Snowflakeにはこのデータ型に相当するものはなく、現在は VARCHAR に変換されています。

文法構文

 INTERVAL {YEAR | MONTH | YEAR TO MONTH}
Copy

警告

間隔データ型の使用は、将来のアップデートで実装される予定です。

サンプルソースパターン

テーブル作成時の年~月の間隔

入力:
 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は 間隔 をデータ型としてサポートしていないため、算術演算でのみサポートされます。この値を使用するには、(可能であれば) 間隔定数 として取り出して使用する必要があります。

Redshiftのオリジナル値: INTERVAL '1-2' YEAR TO MONTH

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年0ヶ月

NULL

NULL

NULL

0年5ヶ月

NULL

NULL

NULL

1000年11ヶ月

出力
 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年11ヶ月

既知の問題

1.算術演算のみがサポートされています

Snowflake間隔にはいくつかの制限があります。DATE または TIMESTAMP間隔定数 間の算術演算のみがサポートされており、その他のシナリオはサポートされていません。

関連 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にはOrdinal接尾辞に相当するものはありません

サンプルソースパターン

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.数字の内側に数字記号を使用することはサポートされていません。

Snowflakeでは、数値の先頭または末尾ではなく、数値の内部で任意の数値記号形式(MI、 SG または PL)が使用されている場合はサポートされていません

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

関連 EWIs

  • SSC-EWI-PG0005: 現在の日付/数値形式はSnowflakeでは動作が異なる可能性があります。