■ はじめに
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)補足:ストレージサイズの影響
より抜粋 ~~~~~~~~~~~~~~~~~~ 精度(総桁数)はストレージに影響しません。 ただし、スケール(小数点以下の桁数)はストレージに影響します。 また、より大きなスケールでの値の処理はわずかに遅くなり、より多くのメモリを消費します。 ~~~~~~~~~~~~~~~~~~
【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