【Snowflake】Snowflake ~ 基本編 / データ型 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/12/15/162658

の続き。

データ型で「VARIANT」とかでてきたので
今回は、Snowflakeのデータ型について、扱う。

目次

【0】Snowflake で扱うデータ型
 1)サポートされていないデータ型
【1】数値データ型
 1)固定小数点数のデータ型
 2)浮動小数点数のデータ型
 3)補足:ストレージサイズの影響
【2】文字列およびバイナリデータ型
 1)テキスト文字列のデータ型
 2)バイナリ文字列のデータ型
【3】論理データ型
【4】日付と時刻のデータ型
【5】半構造化データ型
 1)VARIANT
 2)OBJECT
 3)ARRAY
【6】地理空間データ型

【0】Snowflake で扱うデータ型

https://docs.snowflake.com/ja/sql-reference/intro-summary-data-types.html

より

【1】数値データ型
【2】文字列およびバイナリデータ型
【3】論理データ型
【4】日付と時刻のデータ型
【5】半構造化データ型
【6】地理空間データ型

1)サポートされていないデータ型

https://docs.snowflake.com/ja/sql-reference/data-types-unsupported.html

より抜粋

* BLOB => BINARY で代用
* CLOB => VARCHAR で代用
* ENUM
* ユーザー定義のデータ型

【1】数値データ型

* 以下の公式ドキュメントに記載されている

https://docs.snowflake.com/ja/sql-reference/data-types-numeric.html

1)固定小数点数のデータ型

NUMBER

* 以下のデータ型は、NUMBER型と同義語
 + INT
 + INTEGER
 + BIGINT
 + SMALLINT
 + TINYINT
 + BYTEINT
 + DECIMAL
 + NUMERIC

2)浮動小数点数のデータ型

FLOAT , FLOAT4 , FLOAT8

* 以下のデータ型は、FLOAT型と同義語
 + DOUBLE
 + DOUBLE PRECISION
 + REAL

3)補足:ストレージサイズの影響

https://docs.snowflake.com/ja/sql-reference/data-types-numeric#impact-of-precision-and-scale-on-storage-size

より抜粋
~~~~~~~~~~~~~~~~~~
精度(総桁数)はストレージに影響しません。

ただし、スケール(小数点以下の桁数)はストレージに影響します。
また、より大きなスケールでの値の処理はわずかに遅くなり、より多くのメモリを消費します。
~~~~~~~~~~~~~~~~~~

【2】文字列およびバイナリデータ型

https://docs.snowflake.com/ja/sql-reference/data-types-text.html

1)テキスト文字列のデータ型

https://docs.snowflake.com/ja/sql-reference/data-types-text.html#data-types-for-text-strings

より抜粋

VARCHAR

* Unicode文字列を保持するデータ型

CHAR , CHARACTER , NCHAR

* VARCHAR と同義語
* ただし、長さが指定されていない場合は、 CHAR(1)がデフォルト

STRING , TEXT , NVARCHAR , NVARCHAR2 , CHAR VARYING , NCHAR VARYING

* VARCHARと同義語

2)バイナリ文字列のデータ型

https://docs.snowflake.com/ja/sql-reference/data-types-text.html#data-types-for-binary-strings
BINARY

* 最大長は8 MB (8,388,608バイト)

VARBINARY

*  BINARYと同義語

【3】論理データ型

https://docs.snowflake.com/ja/sql-reference/data-types-logical.html

* BOOLEAN(TRUE または FALSE)
 => NULL も OK (3値論理 のサポート)

【4】日付と時刻のデータ型

* 正直、TIMESTAMP_* の使い分けとかまだ理解できず、、、

https://docs.snowflake.com/ja/sql-reference/data-types-datetime.html

DATE

* 日付を保存するための単一の DATE データ型
* 最も一般的な形式(YYYY-MM-DD、 DD-MON-YYYY など)の日付

DATETIME

* TIMESTAMP_NTZのエイリアス

TIME

* 時刻を保存するための単一の単一の TIME データ型
* 小数秒のオプションの精度パラメーターをサポート
* 00:00:00 ~ 23:59:59.999999999 の間でなければなりません

TIMESTAMP

* TIMESTAMP_* バリエーションの1つに関連付けられたユーザー指定のエイリアス
* デフォルトは TIMESTAMP_NTZ

TIMESTAMP_LTZ

* UTC 時間を指定された精度で内部に保存
* LTZ = Local Time Zone

TIMESTAMP_NTZ

* 「wallclock」時間を指定された精度で内部に保存
* タイムゾーンのないタイムスタンプ (NTZ = Not Time Zone?)

TIMESTAMP_TZ

*  UTC 時間と関連する タイムゾーンオフセット を内部に保存

https://docs.snowflake.com/ja/user-guide/date-time-examples.html

【5】半構造化データ型

半構造化データ(Semi-Structured Data)型とは?
https://docs.snowflake.com/ja/user-guide/semistructured-intro.html

* 従来の構造化データの標準に準拠していないデータ
 => JSON、Avro、 ORC、Parquet、または XML

1)VARIANT

https://docs.snowflake.com/ja/sql-reference/data-types-semistructured.html#variant

* 標準SQLの型、配列、およびオブジェクトの値を保持する
 => 何か色々なサイトを見たが、ひとまず、JSON(もしくはJavaのObject型)をイメージすればいい?
 => VB にも VARIANT型(宣言されていないすべての 変数に対して使用される データ型)
  ってあったな、、、

2)OBJECT

https://docs.snowflake.com/ja/sql-reference/data-types-semistructured.html#object

より抜粋

* キーと値のペアのコレクションを表すために使用されます。
* キーは空ではない文字列で、値は VARIANT 型の値です。
 => 要するに「キー-バリューのコレクション(値はVARIANT)」
* Snowflakeは現在、明示的に入力されたオブジェクトをサポートしていません。
 => 確かに「1)サポートされていないデータ型」で
  「ユーザー定義のデータ型」って書いてたな。。。

3)ARRAY

https://docs.snowflake.com/ja/sql-reference/data-types-semistructured.html#array

* 任意のサイズの密配列または疎配列を表すために使用されます。
 => 要するに「可変長の配列(値はVARIANT)」

【6】地理空間データ型

* これを業務で使うのはなさそう、もしくは、
 当分先の話になりそうだがメモっておく

https://docs.snowflake.com/ja/sql-reference/data-types-geospatial.html

より抜粋

* GEOGRAPHY データ型 をサポート

参考文献

https://dev.classmethod.jp/articles/snowflake-advent-calendar-2019-16-semi-structured-data/

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ 基本編 / キャスト ~
https://dk521123.hatenablog.com/entry/2021/12/15/162658
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ 基本編 / アクセス制御 ~
https://dk521123.hatenablog.com/entry/2021/11/16/231010
Snowflake ~ 基本編 / ゼロコピークローン ~
https://dk521123.hatenablog.com/entry/2021/11/27/134934
Snowflake ~ 日時関連 ~
https://dk521123.hatenablog.com/entry/2022/06/17/113003
エラー「Failed to cast variant value "" to XXX」時の対応
https://dk521123.hatenablog.com/entry/2021/12/17/102659