CQLのデータ型
CQLカラム型について説明します。
テーブル内の各カラムのデータ型が宣言され、強制的に適用されます。
文字列型
INSERT またはUPDATE文字列値。単一引用符で囲みます。フィールド値に単一引用符が含まれている場合は、エスケープ文字を追加する必要があります。「文字のエスケープ」を参照してください。たとえば、lastname = 'Smith'
のようになります。
- ascii
- US-ASCII文字。
- text
- UTF-8エンコード文字列。
- varchar
- UTF-8エンコード文字列。
数値型
INSERT またはUPDATE数値。引用符は使用しません。たとえば、age = 31
のようになります。
整数
- tinyint
- 8ビット符号付き整数。
- smallint
- 16ビット符号付き整数。
- int
- 32ビット符号付き整数。
- bigint
- 64ビット符号付き整数。
- varint
- 任意精度の整数。
10進数
デフォルトの小数点はピリオド(.)です。小数点はドライバーの設定で変更するか、cqlshrcのdecimalsepオプションを使用して変更します。内部では、小数点はピリオドとして格納されます。
- decimal
- 可変精度の10進数。整数と浮動小数点型をサポートしています。 注: 通貨を取り扱う際は、intとの間でシリアライズする通貨クラスを使用するか、decimal形式を使用することをベスト・プラクティスとして推奨します。
- float
- 32ビットIEEE-754の浮動小数点数。
- double
- 64ビットIEEE-754の浮動小数点数。
日付および時間型
INSERT またはUPDATE日付/時間値。文字列形式を単一引用符で囲むか、整数の場合は引用符を使用しません。たとえば、日付はpurchase_date = '2017-05-12'
のように文字列形式で設定することも、purchase_date = 17298
のようにエポック以来の日数を示す整数として指定することもできます。
- date
- エポック(1970年1月1日)以来の日数を表す32ビット符号なし整数。対応する時間値はありません。
INSERT またはUPDATE値。整数(エポック以来の日数)、または
'2017-05-13'
などの文字列形式'yyyy-mm-dd'
を使用します。 - duration
- ナノ秒単位の時間数を表す符号付き64ビット整数。
- time
- 午前0時以降のナノ秒数を表す、エンコードされた64ビット符号付き整数。対応する日付値はありません。
- timestamp
- エポック(1970年1月1日00:00:00 GMT)以来の日時をミリ秒単位で表す64ビット符号付き整数。
INSERT またはUPDATE文字列形式はISO-8601です。
'yyyy-mm-dd [hh:MM:ss[.fff]][+/-NNNN]'
のように、文字列には日付を含める必要があり、必要に応じて時刻とタイム・ゾーンを含めることができます。ここで、NNNNにはRFC 822の4桁のタイム・ゾーンを指定します(+0000はGMTを指し、US PSTは-0800になります)。タイム・ゾーンが指定されていない場合は、クライアントのタイム・ゾーンであると見なされます。たとえば、'2015-05-03 13:30:54.234-0800'
、'2015-05-03 13:30:54+0400'
、'2015-05-03'
のようになります。
一意識別子
特殊な型
- BLOB
- 任意数のバイト(検証なし)。16進数で表されます。「BLOB変換関数」を参照してください。
- boolean
- trueまたはfalse。内部で
true
またはfalseとして格納されます。COPYをcqlsh内で使用してデータをインポートまたはエクスポートする場合は、boolstyleオプションを使用して形式を変更します。たとえば、はい/いいえ型の回答カラムがある調査結果をインポートする場合などです。 - counter
- 64ビット符号付き整数。テーブルごとにカウンター・カラムを1つだけ使用できます。カウンター・テーブル内のその他すべてのカラムはPRIMARY KEYである必要があります。UPDATE文に
+
と-
の演算子を使用して、カウンターをインクリメントまたはデクリメントします。Null値はカウンター・カラムではサポートされていません。初期カウントは0です。 - inet
- IPv4またはIPv6形式のIPアドレス文字列。
コレクション型
CQLでは、1つのカラムに複数の値を格納できます。コレクションを使用して、電話番号、タグ、アドレスなどの少量のデータを格納または非正規化します。コレクションは、特定のユーザーのすべてのイベントなど、無制限に成長することが予想されるデータには適していません。そのようなデータにはクラスター化カラムを含むテーブルを使用してください。
- コレクションは内部でインデックスの作成やページングが行われないため、1つの要素にアクセスするためにコレクション全体が読み取られます。
- リストに対する一部の操作では、書き込み前に読み取りが発生します。また、リスト操作は元々、べき等ではないため、リトライ時にタイムアウトが発生する場合があります。 INSERT はセットおよびマップでは、内部で書き込み前に読み取りが発生することはありません。したがって、可能な限りリストではなくセットを使用することを推奨します。
- frozen
- 複数のコンポーネントを単一値にシリアライズするには、
frozen<collection_definition>
の形式でセット、マップ、またはリストに対してfrozenを使用します。frozen以外の型を使用すると個々のフィールドを更新できますが、frozenコレクション内の値はBLOBと同様に処理され、upsertを実行すると値全体が上書きされます。 - list
- 同じデータ型を持つ一意でない値のコンマ区切りリスト。形式は
list<data_type>
です。要素の順番はリスト内の位置に従い、最初の位置は0です。INSERT文とUPDATE文では+および-演算子を使用した要素の追加書き込みと先頭書き込みがサポートされています。 - map
- キーと値のペアのセット。ここで、キーは一意であり、マップはそのキーでソートされます。形式は
map<data_type[, data_type,...]>
です。 - set
- 0から始まる位置でソートされた、一意の値のコンマ区切りリスト。INSERTおよびUPDATEを使用したセット全体の置き換えのみをサポートしています。+および-の演算子を使用した値の追加はサポートされていません。
- tuple
- 型の異なる要素の固定要素数の集合。他のコレクション型とは異なり、タプルは常にfrozenです(frozenキーワードは不要)。INSERTおよびUPDATEを使用するとフィールド全体が上書きされるため、式では各要素の値を指定する必要があります。値を持たない要素に対しては明示的にNullを宣言します。タプルには
tuple<int,tuple<text,text>,boolean>
のようにタプルを含めることができ、set<tuple<text,inet>
のように別のコレクション型のデータ型として指定することもできます。 - ユーザー定義型(UDT)
- 特定のキースペースに属するコレクション型をカスタマイズします。UDTは、そのUDTが作成されたキースペース内でのみ使用できます。
system_schema.types
にはすべてのUDT、つまりkeyspace_name
、type_name
、field_names
、およびfield_types
のリストが含まれます。
廃止予定の型
次の型は、後方互換性を維持するためにのみサポートされています。
- カスタム型
- 廃止予定。後方互換性を維持するためにのみサポートされています。
AbstractType
にサブクラスとして追加されているカスタマイズ型。ここで、クラス名は完全修飾されているか、org.apache.cassandra.db.marshal
パッケージに対応しています。注: ユーザー定義型(UDT)に置き換えられます。