数値データ型

このトピックでは、Snowflakeでサポートされている数値データ型と、数値定数/リテラルでサポートされている形式について説明します。

このトピックの内容:

固定小数点数のデータ型

Snowflakeは、固定小数点数について次のデータ型をサポートしています。

NUMBER

オプションの精度とスケールを使用した、最大38桁の数字です。

精度

許可される合計桁数です。

スケール

小数点の右側に許可される桁数です。

デフォルトでは、精度は 38 、スケールは 0NUMBER(38, 0))です。精度は、特定の型の列に挿入できる(またはキャストできる)値の範囲を制限します。例えば、値 999NUMBER(38,0) に適合しますが、 NUMBER(2,0) には適合しません。

最大スケール(小数点の右側の桁数)は37です。有効桁数が38未満ですが、最下位桁が小数点以下37桁を超える数値(例:0.0000000000000000000000000000000000000012(1.2e-39)は、一部の精度の桁を失うことなく表現できません。

注釈

データがより低い精度で別のデータ型に変換された後、より高い精度の形式に戻されると、データの精度が失われる可能性があります。例えば、 NUMBER(38、37)値を DOUBLE (10進数で約17の精度)に変換してから NUMBERに戻すと、精度が低下します。

DECIMAL , NUMERIC

NUMBERと同義語です。

INT , INTEGER , BIGINT , SMALLINT , TINYINT , BYTEINT

精度とスケールを指定できないことを除き、 NUMBER と同義語です(つまり、常にデフォルトの NUMBER(38, 0))。したがって、すべての INTEGER データ型について、値の範囲は-99999999999999999999999999999999999999から+99999999999999999999999999999999999999(両端を含む)までの整数値すべてです。

さまざまな名前( TINYINT など)は、他のシステムからの移植を簡略化し、指定されたタイプの列に期待される値の範囲を提案するためのものです。

ストレージサイズに対する精度とスケールの影響

精度(総桁数)はストレージに影響しません。つまり、 NUMBER(2,0)NUMBER(38,0) など、精度の異なる列の同じ数値のストレージ要件は同じです。Snowflakeは、各マイクロパーティションについて、特定の列の最小値と最大値を決定し、その範囲を使用して、その列のすべての値をパーティションに保存します。例:

  • 列に5つの値(例: 01234)が含まれる場合、各値は1バイトを消費します(非圧縮。圧縮すると実際のストレージサイズが削減されます)。

  • 列に含まれる値が長い場合( 0123410000000 など)、各値は4バイト(非圧縮)を消費します。

ただし、スケール(小数点以下の桁数)はストレージに影響します。例えば、 NUMBER(10,5) 型の列に保存された同じ値は、 NUMBER(5,0) よりも多くのスペースを消費します。また、より大きなスケールでの値の処理はわずかに遅くなり、より多くのメモリを消費します。

テーブル内の固定小数点データ型の例

CREATE OR REPLACE TABLE test_fixed(num NUMBER,
                                    num10 NUMBER(10,1),
                                    dec DECIMAL(20,2),
                                    numeric NUMERIC(30,3),
                                    int INT,
                                    integer INTEGER
                                    );

DESC TABLE test_fixed;

+---------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name    | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|---------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| NUM     | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| NUM10   | NUMBER(10,1) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| DEC     | NUMBER(20,2) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| NUMERIC | NUMBER(30,3) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| INT     | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| INTEGER | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+---------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

浮動小数点数のデータ型

Snowflakeは、浮動小数点数に対して次のデータ型をサポートしています。

FLOAT , FLOAT4 , FLOAT8

Snowflakeは、倍精度(64ビット) IEEE 754浮動小数点数を使用します。

Snowflakeは、 FLOAT に対して次の特別な値をサポートしています。

  • 'NaN' (非数)。

  • 'inf' (無限大)。

  • '-inf' (負の無限大)。

記号 'NaN''inf'、および '-inf' は一重引用符で囲む必要があり、大文字と小文字は区別されません。

'NaN' の比較セマンティクスは、次の点で IEEE 754標準と異なります。

条件

Snowflake

IEEE 754

コメント

'NaN' = 'NaN'

TRUE

FALSE

Snowflakeでは、 'NaN' の値はすべて等しくなります。

'NaN' > X . X はいずれかの FLOAT の値であり、 . 無限( NaN 自体を除く)を含みます。

TRUE

FALSE

Snowflakeは、 'NaN'. 他の FLOAT 値 . (無限大を含む)よりも大きい値として扱います。

DOUBLE , DOUBLE PRECISION , REAL

FLOATと同義語です。

テーブル内の浮動小数点データ型の例

CREATE OR REPLACE TABLE test_float(d DOUBLE,
                                    f FLOAT,
                                    dp DOUBLE PRECISION,
                                    r REAL
                                    );

DESC TABLE test_float;

+---------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name    | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|---------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| D       | FLOAT        | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| F       | FLOAT        | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| DP      | FLOAT        | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| R       | FLOAT        | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+---------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

注釈

DOUBLE、 FLOAT、 DOUBLE PRECISION、および REAL 列は FLOATとして表示されますが、 DOUBLEとして保存されます。これはSnowflakeの既知の問題です。

数値定数

定数 (別名 リテラル)は、固定データ値を指します。数値定数では、次の形式がサポートされています。

[+-][digits][.digits][e[+-]digits]

条件:

  • + または - は正または負の値を示します。デフォルトは正です。

  • digits は、0から9までの1桁以上です。

  • e (または E)は、科学表記法の指数を示します。指数マーカーが存在する場合は、少なくとも1桁が指数マーカーの後に続く必要があります。

次の数値は、すべてサポートされている数値定数の例です。

15
+1.34
0.2
15e-03
1.234E2
1.234E+2
-1