Traffine I/O

日本語

2023-06-30

Snowflakeにおけるデータ型

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で使用されます。FLOAT4FLOAT8は、精度と範囲が異なるFLOATの特定のバージョンです。

DOUBLE, DOUBLE PRECISION, REAL

DOUBLEDOUBLE PRECISION、およびREALは、FLOATよりも高い精度で浮動小数点数を表すために全て使用されます。Snowflakeでは、これらはFLOATと同義です。

文字列とバイナリデータ型

文字列とバイナリデータ型は、アルファベットとバイナリデータを扱います。

VARCHAR

VARCHARデータ型は、可変長の英数字文字列を格納するためにSnowflakeで使用されます。デフォルトでは(および最大で)16,777,216バイトの情報を格納できます。

CHAR, CHARACTER

CHARおよびCHARACTERVARCHARと同義です。ただし、デフォルトの長さはVARCHAR(1)であり、長さが指定されていない場合は単一の文字を保持します。

STRING

STRINGデータ型はVARCHARと同義であり、このタイプのデータの別のオプションを提供します。

TEXT

TEXTデータ型もVARCHARと同義であり、可変長の英数字文字列を表す別の選択肢です。

BINARY

BINARYデータ型は、バイナリデータを格納するためにSnowflakeで使用されます。

VARBINARY

VARBINARYBINARYと同義です。両方のデータ型はバイナリデータを表すために使用されます。

論理データ型

論理データ型は、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データ型は、OBJECTARRAYを含む他の任意の型の値を格納するために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データ型とサポートされているハンドラ言語間の有効なマッピングについての詳細な情報が提供されています。

https://docs.snowflake.com/developer-guide/udf-stored-procedure-data-type-mapping

参考

https://docs.snowflake.com/ja/sql-reference/intro-summary-data-types
https://docs.snowflake.com/developer-guide/udf-stored-procedure-data-type-mapping
https://docs.snowflake.com/sql-reference/data-types-semistructured

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!