Snowflakeにおけるデータ型
Snowflakeは広く採用されているデータウェアハウスプラットフォームであり、ほとんどのSQLデータ型をサポートしており、さまざまなニーズに対応しています。この記事では、これらのデータ型の概要を提供します。
数値データ型
まず、Snowflakeでサポートされているさまざまな数値データ型を見てみます。
NUMBER
NUMBER
データ型はSnowflakeにおけるもっとも一般的な数値データの形式です。整数値と小数値の両方を最大38桁の精度で表すことができます。デフォルトの精度とスケールは(38,0)であり、これは小数点の左側に最大38桁の数字を保持し、デフォルトでは小数点の右側に数字を保持しないことを意味します。
DECIMAL, NUMERIC
DECIMAL
およびNUMERIC
データ型は、NUMBER
データ型と同義です。互換性があり、デフォルトの精度とスケールも(38,0)となります。
INT, INTEGER, BIGINT, SMALLINT, TINYINT, BYTEINT
これらのデータ型もNUMBER
データ型と同義ですが、精度とスケールは指定できません。
FLOAT, FLOAT4, FLOAT8
FLOAT
データ型は、近似数値データを表すためにSnowflakeで使用されます。FLOAT4
とFLOAT8
は、精度と範囲が異なるFLOAT
の特定のバージョンです。
DOUBLE, DOUBLE PRECISION, REAL
DOUBLE
、DOUBLE PRECISION
、およびREAL
は、FLOAT
よりも高い精度で浮動小数点数を表すために全て使用されます。Snowflakeでは、これらはFLOAT
と同義です。
文字列とバイナリデータ型
文字列とバイナリデータ型は、アルファベットとバイナリデータを扱います。
VARCHAR
VARCHAR
データ型は、可変長の英数字文字列を格納するためにSnowflakeで使用されます。デフォルトでは(および最大で)16,777,216バイトの情報を格納できます。
CHAR, CHARACTER
CHAR
およびCHARACTER
はVARCHAR
と同義です。ただし、デフォルトの長さはVARCHAR(1)
であり、長さが指定されていない場合は単一の文字を保持します。
STRING
STRING
データ型はVARCHAR
と同義であり、このタイプのデータの別のオプションを提供します。
TEXT
TEXT
データ型もVARCHAR
と同義であり、可変長の英数字文字列を表す別の選択肢です。
BINARY
BINARY
データ型は、バイナリデータを格納するためにSnowflakeで使用されます。
VARBINARY
VARBINARY
はBINARY
と同義です。両方のデータ型はバイナリデータを表すために使用されます。
論理データ型
論理データ型は、Snowflakeで真偽値を表すための方法を提供します。
BOOLEAN
BOOLEAN
データ型は、真または偽の値を格納するために使用されます。現時点では(2023年6月30日現在)、2016年1月25日以降にプロビジョニングされたアカウントのみがサポートされています。
日付と時刻のデータ型
Snowflakeにおける日付と時刻のデータ型は、時間要素を含むデータの処理に重要です。これらのデータ型は、時間系列データ、スケジュール、その他の日時関連情報を扱う際に柔軟性と正確性を提供します。
DATE
DATE
データ型は、YYYY-MM-DD
の形式で特定の日を表すためにSnowflakeで使用されます。
DATETIME
DATETIME
データ型はTIMESTAMP_NTZ
の別名です。時刻情報を格納せずに特定の日付と時刻を表すために使用されます。
TIME
TIME
データ型は、特定の一日の時刻を格納するために使用されます。形式はHH:MI:SS
です。
TIMESTAMP
TIMESTAMP
データ型は、日付と時刻の情報を格納するためのより一般的なタイプです。デフォルトでは、これはTIMESTAMP_NTZ
のエイリアスです。
TIMESTAMP_LTZ
TIMESTAMP_LTZ
は、ローカルタイムゾーン情報を持つTIMESTAMP
のバリエーションです。ただし、タイムゾーン情報自体は格納されません。
TIMESTAMP_NTZ
TIMESTAMP_NTZ
データ型は、タイムゾーンのないTIMESTAMP
を表します。つまり、タイムゾーンが指定されていても、それは格納されません。
TIMESTAMP_TZ
TIMESTAMP_TZ
データ型は、タイムゾーン情報を持つTIMESTAMP
を格納するために使用されます。ユーザーは関連するタイムゾーンの詳細と共に日付と時刻データを格納することができます。
半構造化データ型
データのボリュームとバラエティが増えるにつれて、半構造化データ型の必要性がますます重要になってきました。Snowflakeは、いくつかの半構造化データ型をサポートしており、従来の形式ではないデータを管理および処理する際に大きな柔軟性を提供します。
VARIANT
VARIANT
データ型は、OBJECT
やARRAY
を含む他の任意の型の値を格納するためにSnowflakeで使用されます。これにより、単一の列内でさまざまな種類のデータを柔軟に扱うことができます。VARIANT
の最大長は16MBです。
OBJECT
SnowflakeにおけるOBJECT
は、JSONオブジェクトに類似し、単一のデータ型内でキーと値のペアを格納することができます。キーはVARCHAR
であり、値はVARIANT
です。この形式により、複雑なネストされたデータ構造を格納してクエリすることができます。
ARRAY
ARRAY
データ型は、多くの他のプログラミング言語と同様の配列に似ています。0個以上のデータを含むことができ、各要素は配列内の位置を指定してアクセスできます。これにより、単一の列内に順序付きのデータコレクションを格納することができます。
地理空間データ型
地理空間データは、GISシステム、物流および輸送、環境科学など、さまざまなアプリケーションにおいて重要です。Snowflakeは地理空間データ型をサポートし、この種のデータを格納および分析する能力を向上させています。
GEOGRAPHY
GEOGRAPHY
データ型は、地理空間データをSnowflakeで表現するために使用されます。ポイント、ライン、ポリゴンなど、さまざまな地理的データや形状を格納することができます。
GEOMETRY
GEOMETRY
データ型は、GEOGRAPHY
データ型のより一般的な形式です。地理的な場所に関連付けられていない、抽象的な形状やパターンなど、あらゆるタイプの空間データ構造を格納することができます。
SQLとハンドラ言語間のデータ型のマッピング
Snowflakeでストアドプロシージャやユーザー定義関数(UDF)を扱う際には、SQLデータ型とJava、Python、Scalaなどのハンドラ言語間でのデータ型のマッピング方法を理解する必要があります。次のSnowflakeの公式ドキュメントには、SQLデータ型とサポートされているハンドラ言語間の有効なマッピングについての詳細な情報が提供されています。
参考