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 は、最も一般的な形式( |
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 は、関連する 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 }
警告
間隔データ型の使用は、将来のアップデートで実装される予定です。
サンプルソースパターン¶
テーブル作成時の日~秒の間隔¶
入力¶
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は 間隔 をデータ型としてサポートしていないため、算術演算でのみサポートされます。この値を使用するには、(可能であれば) 間隔定数 として取り出して使用する必要があります。
オリジナルの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;
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ミリ秒 |
既知の問題¶
1.算術演算のみがサポートされています¶
Snowflake間隔にはいくつかの制限があります。DATE
または TIMESTAMP
と 間隔定数 間の算術演算のみがサポートされており、その他のシナリオはサポートされていません。
関連 EWIs¶
SSC-EWI-0036: データ型が別のデータ型に変換されました。
INTERVAL YEAR TO MONTH データ型¶
説明¶
INTERVAL YEAR TO MONTH は間隔データ型を指定し、年単位と月単位で期間を保存します。(RedShift SQL 言語リファレンス間隔データ型)
Snowflakeにはこのデータ型に相当するものはなく、現在は VARCHAR に変換されています。
文法構文¶
INTERVAL {YEAR | MONTH | YEAR TO MONTH}
警告
間隔データ型の使用は、将来のアップデートで実装される予定です。
サンプルソースパターン¶
テーブル作成時の年~月の間隔¶
入力:¶
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は 間隔 をデータ型としてサポートしていないため、算術演算でのみサポートされます。この値を使用するには、(可能であれば) 間隔定数 として取り出して使用する必要があります。
Redshiftのオリジナル値: INTERVAL '1-2' YEAR TO MONTH
Snowflake列に格納された値: '1y, 2m'
Snowflake間隔定数としての値: INTERVAL '1y, 2m'
年~月の間隔列からのデータの取得¶
入力¶
SELECT * FROM interval_year_to_month_table;
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;
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
;
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.数字の内側に数字記号を使用することはサポートされていません。¶
Snowflakeでは、数値の先頭または末尾ではなく、数値の内部で任意の数値記号形式(MI、 SG または PL)が使用されている場合はサポートされていません
例
select to_number('12,-454.88', '99GMI999D99')
関連 EWIs¶
SSC-EWI-PG0005: 現在の日付/数値形式はSnowflakeでは動作が異なる可能性があります。