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'を使用します。

注: CSVからデータを読み込むときは、cqlshrcファイル内のdatetimeformatオプションを使用して、cqlshのCOPY日付解析形式を変更します。
duration
ナノ秒単位の時間数を表す符号付き64ビット整数。
time
午前0時以降のナノ秒数を表す、エンコードされた64ビット符号付き整数。対応する日付値はありません。

INSERT またはUPDATE文字列形式は'hh:mm:ss[.fff]'です。ここで、ミリ秒(f)は任意です。

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'のようになります。

一意識別子

uuid
128ビットの汎用一意識別子(UUID)。UUID関数を使用して生成します。
timeuuid
バージョン1のUUID。「競合のない」タイムスタンプを含む一意識別子。NOW関数を使用して生成します。

特殊な型

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つのカラムに複数の値を格納できます。コレクションを使用して、電話番号、タグ、アドレスなどの少量のデータを格納または非正規化します。コレクションは、特定のユーザーのすべてのイベントなど、無制限に成長することが予想されるデータには適していません。そのようなデータにはクラスター化カラムを含むテーブルを使用してください。

frozen以外のコレクションには次の特性と制限事項があります。
  • コレクションは内部でインデックスの作成やページングが行われないため、1つの要素にアクセスするためにコレクション全体が読み取られます。
  • リストに対する一部の操作では、書き込み前に読み取りが発生します。また、リスト操作は元々、べき等ではないため、リトライ時にタイムアウトが発生する場合があります。 INSERT はセットおよびマップでは、内部で書き込み前に読み取りが発生することはありません。したがって、可能な限りリストではなくセットを使用することを推奨します。
制約事項: 大量のデータを1つのコレクションに格納することはアンチパターンであるため、サポートされていません。
frozen
複数のコンポーネントを単一値にシリアライズするには、frozen<collection_definition>の形式でセット、マップ、またはリストに対してfrozenを使用します。frozen以外の型を使用すると個々のフィールドを更新できますが、frozenコレクション内の値はBLOBと同様に処理され、upsertを実行すると値全体が上書きされます。
list
同じデータ型を持つ一意でない値のコンマ区切りリスト。形式はlist<data_type>です。要素の順番はリスト内の位置に従い、最初の位置は0です。INSERT文とUPDATE文では+および-演算子を使用した要素の追加書き込みと先頭書き込みがサポートされています。
警告: リストには制限事項があり、パフォーマンスに影響が及ぶため、可能な限りsetを使用するか、frozen<list<int>>のようにfrozenリストを使用してください。追加書き込みと先頭書き込みの操作はべき等ではありません。これらの操作のどちらかがタイムアウトした場合、リトライ操作を実行すると値の追加/先頭書き込みが2回行われる場合がありますが、これは常に行われるわけではありません。
map
キーと値のペアのセット。ここで、キーは一意であり、マップはそのキーでソートされます。形式はmap<data_type[, data_type,...]>です。
注: INSERTおよびUPDATEでは、TTLの設定は新たに挿入/更新された要素のみに適用されます。
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_nametype_namefield_names、およびfield_typesのリストが含まれます。

廃止予定の型

次の型は、後方互換性を維持するためにのみサポートされています。

カスタム型
廃止予定。後方互換性を維持するためにのみサポートされています。AbstractTypeにサブクラスとして追加されているカスタマイズ型。ここで、クラス名は完全修飾されているか、org.apache.cassandra.db.marshalパッケージに対応しています。
注: ユーザー定義型(UDT)に置き換えられます。