Qiita初投稿です!
業務で Snowflake を使っていて、数値型のカラムに異なる型の値を挿入した場合の挙動を確認しました。
例えば:
- 整数型のカラムに小数を入れるとどうなる?
- 小数型のカラムに桁数が多すぎる数を入れるとどうなる?
テーブル定義と検証コード
-- テーブル作成
CREATE OR REPLACE TABLE sample_table (
id VARCHAR,
quantity INTEGER,
price NUMBER(10,2)
);
-- 通常の挿入(期待される型で)
INSERT INTO sample_table (id, quantity, price)
VALUES ('A001', 10, 99.99);
-- 整数型カラムに小数を挿入(quantity に 12.34)
INSERT INTO sample_table (id, quantity, price)
VALUES ('A002', 12.34, 49.99);
-- 小数型カラムに整数を挿入(price に 50)
INSERT INTO sample_table (id, quantity, price)
VALUES ('A003', 20, 50);
-- 小数型カラムに小数部の桁数が溢れる小数を挿入(price に 50.12345)
INSERT INTO sample_table (id, quantity, price)
VALUES ('A004', 20, 50.12345);
-- 小数型カラムに整数部の桁数が溢れる小数を挿入(price に 500000000000.01)
-- エラーになり実行不可
INSERT INTO sample_table (id, quantity, price)
VALUES ('A005', 20, 500000000000.01);
-- 結果を確認
SELECT * FROM sample_table;
ID | QUANTITY | PRICE |
---|---|---|
A001 | 10 | 99.99 |
A002 | 12 | 49.99 |
A003 | 20 | 50.00 |
A004 | 20 | 50.12 |
考察
-
INTEGER
カラム(quantity
)に12.34
を挿入すると
→ 小数点以下が切り捨てられて12
に なった -
NUMBER(10,2)
カラム(price
)に50
を挿入すると
→ 自動的に50.00
と変換されて挿入された -
price
に50.12345
を挿入すると
→ 小数第3位以下が切り捨てされて50.12
に なった -
price
に500000000000.01
を挿入しようとすると
→ 定義された精度NUMBER(10,2)
を超過しているためエラーとなる
まとめ
Snowflakeでは、数値型カラムに異なる形式の数値を挿入した場合でも、
可能な限り自動的に型変換や丸め処理が行われるため、多少の型の違いであれば許容される!
ただし、以下の点には注意!:
- 整数型カラムに小数を入れると小数点以下は切り捨てられる!
- 小数型カラムでは定義した小数部の桁数(スケール)を超えると切り捨てられる!
- 桁数の制約(整数部の桁数超過)はエラーとなる!