データ型 - Amazon Redshift

データ型

Amazon Redshift によって保存または取得される各値は、データ型と一定の関連するプロパティセットを持ちます。データ型はテーブルの作成時に宣言されます。データ型は、列または引数に含めることができる値セットを制限します。

次の表に、Amazon Redshift テーブルで使用できるデータ型を一覧表示します。

データ型 エイリアス 説明
SMALLINT INT2 符号付き 2 バイト整数
INTEGER INT、INT4 符号付き 4 バイト整数
BIGINT INT8 符号付き 8 バイト整数
DECIMAL NUMERIC 精度の選択が可能な真数
REAL FLOAT4 単精度浮動小数点数
DOUBLE PRECISION FLOAT8、FLOAT 倍精度浮動小数点数
CHAR CHARACTER、NCHAR、BPCHAR 固定長のキャラクタ文字列
VARCHAR CHARACTER VARYING、NVARCHAR、TEXT ユーザーによって定義された制限を持つ可変長キャラクタ文字列
DATE カレンダー日付 (年、月、日)
TIME TIME WITHOUT TIME ZONE 時刻
TIMETZ TIME WITH TIME ZONE 時刻 (タイムゾーン付き)
TIMESTAMP TIMESTAMP WITHOUT TIME ZONE 日付と時刻 (タイムゾーンなし)
TIMESTAMPTZ TIMESTAMP WITH TIME ZONE 日付と時刻 (タイムゾーンあり)
INTERVAL YEAR TO MONTH 年から月への順での期間
INTERVAL DAY TO SECOND 日から秒への順での期間
BOOLEAN BOOL 論理ブール演算型 (true/false)
HLLSKETCH HyperLogLog スケッチで使用するタイプ。
SUPER ARRAY や STRUCTS などの複合型が含まれる Amazon Redshift のすべてのスカラー型を包含するスーパーセットデータ型。
VARBYTE VARBINARY、BINARY VARYING 可変長バイナリ値
GEOMETRY 空間データ
GEOGRAPHY 空間データ
注記

サポートされていないデータ型 (「char」は引用符で囲まれています) については、サポートされていない PostgreSQL データ型 を参照してください。

マルチバイト文字

VARCHAR データ型では、最大 4 バイトの UTF-8 マルチバイト文字をサポートします。5 バイト以上の文字はサポートされていません。マルチバイト文字を含む VARCHAR 列のサイズを計算するには、文字数と 1 文字当たりのバイト数を掛けます。例えば、文字列に漢字が 4 文字含まれ、各文字のサイズが 3 バイトである場合は、文字列を格納するのに VARCHAR(12) 列が必要です。

VARCHAR データ型は、次に示す無効な UTF-8 コードポイントをサポートしていません:

0xD800 – 0xDFFF(バイトシーケンス:ED A0 80ED BF BF)

CHAR データ型は、マルチバイト文字をサポートしていません。

型の互換性と変換

Amazon Redshift における型変換ルールおよびデータ型の互換性についての説明を以下に示します。

互換性

データ型のマッチング、リテラル値および定数のデータ型とのマッチングは、以下のようなさまざまなデータベース操作で発生します。

  • テーブルにおけるデータ操作言語 (DML) オペレーション

  • UNION、INTERSECT、および EXCEPT のクエリ

  • CASE 式

  • LIKE や IN など、述語の評価

  • データの比較または抽出を行う SQL 関数の評価

  • 算術演算子との比較

これらの操作の結果は、型変換ルールおよびデータ型の互換性に左右されます。互換性は、特定の値と特定のデータ型との 1 対 1 のマッチングが必ずしも必要でないことを暗示しています。一部のデータ型は互換性があるため、暗黙変換、または強制が可能です (詳細については、「暗黙的な変換型」を参照)。データ型に互換性がない場合は、明示変換関数を使用することにより、値をあるデータ型から別のデータ型に変換することが可能な場合があります。

互換性と変換に関する全般的なルール

次に示す互換性と変換に関するルールに注意してください。

  • 一般に、同じデータ型のカテゴリに属するデータ型 (各種の数値データ型) は互換性があり、暗黙的に変換することができます。

    例えば、暗黙的な変換では、10 進値を整数列に変換できます。10 進値は整数に四捨五入されます。または、2008 のような数値を日付から抽出し、その値を整数列に挿入することができます。

  • 数値データ型では、範囲外の値を挿入しようとしたときに発生するオーバーフロー条件を適用します。例えば、精度が 5 桁の 10 進値は、4 桁の精度で定義された 10 進列に適合しません。整数または 10 進値の整数部は決して切り捨てられません。しかし、10 進値の小数部は、適宜、切り上げまたは切り捨てることができます。ただし、テーブルから選択された値の明示的なキャストの結果は丸められません。

  • 各種のキャラクタ文字列型には互換性があります。シングルバイトデータを含む VARCHAR 列の文字列と CHAR 列の文字列は互換性があり、暗黙的に変換することができます。マルチバイトデータを含む VARCHAR 文字列には互換性がありません。また、キャラクタ文字列については、文字列が適切なリテラル値であれば、日付、時間、タイムスタンプ、または数値に変換することができます。先頭のスペースまたは末尾のスペースはいずれも無視されます。逆に、日付、時間、タイムスタンプ、または数値は、固定長または可変長の文字列に変換することができます。

    注記

    数値型にキャストするキャラクタ文字列には、数字の文字表現が含まれている必要があります。例えば、文字列 '1.0' または '5.9' を 10 進値にキャストすることはできますが、文字列 'ABC' はいずれの数値型にもキャストできません。

  • DECIMAL 値を文字列と比較すると、Amazon Redshift は文字列を DECIMAL 値に変換しようとします。他のすべての数値と文字列を比較する場合、数値は文字列に変換されます。反対方向の変換 (文字列を整数に変換する、DECIMAL 値を文字列に変換するなど) を実行するには、CAST などの明示的な関数を使用します。

  • 64 ビットの DECIMAL または NUMERIC の値を上位の精度に変換するには、CAST や CONVERT などの明示的な変換関数を使用する必要があります。

  • DATE または TIMESTAMP を TIMESTAMPTZ に変換する場合、または TIME を TIMETZ に変換する場合、タイムゾーンは現在のセッションのタイムゾーンに設定されます。セッションのタイムゾーンは、デフォルト値の UTC です。セッションのタイムゾーンを設定する方法の詳細については、「timezone」を参照してください。

  • 同様に、TIMESTAMPTZ は、現在のセッションのタイムゾーンに基づいて DATE、TIME または TIMESTAMP に変換されます。セッションのタイムゾーンは、デフォルト値の UTC です。変換後、タイムゾーン情報は削除されます。

  • 指定されたタイムゾーンを含むタイムスタンプを表す文字列は、現在のセッションタイムゾーン (デフォルトでは UTC) を使用して TIMESTAMPTZ に変換されます。同様に、タイムゾーンが指定されている時刻を表す文字列は、現在のセッションのタイムゾーン (デフォルトでは UTC) を使用して TIMETZ に変換されます。

暗黙的な変換型

暗黙的な変換には、2 つのタイプがあります。

  • 割り当てにおける暗黙的な変換 (INSERT コマンドまたは UPDATE コマンドで値を設定するなど)

  • 式における暗黙的な変換 (WHERE 句で比較を実行するなど)

次の表に、割り当てまたは式において暗黙的に変換できるデータ型を一覧表示します。これらの変換は、明示的な変換関数を使用して実行することもできます。

変換元の型 変換先の型
BIGINT (INT8) BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
CHAR VARCHAR
DATE CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT (INT8)
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT、INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
INTEGER (INT、INT4) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
REAL (FLOAT4) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT、INT4)
SMALLINT (INT2)
VARCHAR
SMALLINT (INT2) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT、INT4)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATE
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
DATE
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
INTERVAL DAY TO SECOND
TIMETZ VARCHAR
TIME
GEOMETRY GEOGRAPHY
GEOGRAPHY GEOMETRY
注記

TIMESTAMPTZ、TIMESTAMP、DATE、TIME、TIMETZ、またはキャラクタ文字列間の暗黙的な変換では、現在のセッションのタイムゾーンが使用されます。現在のタイムゾーンの設定については、「timezone」を参照してください。

GEOMETRY および GEOGRAPHY データ型は、互いに変換する場合を除き、暗黙的に他のデータ型に変換することはできません。詳細については、「CAST 関数」を参照してください。

VARBYTE データ型は、暗黙的に他のデータ型に変換できません。詳細については、「CAST 関数」を参照してください。

SUPER データ型での動的型付けの使用

Amazon Redshift では、動的型付けを使用して、クエリで使用する前にデータ型を宣言することなく、スキーマレスの SUPER データを処理します。動的型付けでは、明示的に Amazon Redshift 型にキャストすることなく、SUPER データ列に移動した結果が使用されます。SUPER データ型に対する動的型付けを使用する方法の詳細については、動的型付け を参照してください。

一部の例外を除いて、他のデータ型との間で SUPER 値をキャストすることができます。詳細については、「制限事項」を参照してください。