データ型

データ型について説明します。

テーブル内の各カラムのデータ型が宣言され、強制的に適用されます。

文字列型

INSERTUPDATE、およびSELECT文のWHERE句で文字列を単一引用符または二重ドル記号($$)で囲みます。
ヒント: 単一引用符を使用する場合、単一引用符または予約文字を含むフィールド値にはエスケープ文字を追加する必要があります。「文字のエスケープ」を参照してください。
たとえば、単一引用符および絵文字を含むテキストフィールドにコメントを挿入します。
INSERT INTO cycling.comments (
  id, created_at, comment
) VALUES (
  e7ae5cf3-d358-4d99-b900-85902fda9bb0, 
  currentTimestamp(), 
  $$ It's pouring rain, race should have been postponed :'( $$ 
);
ascii
US-ASCII文字。
text
UTF-8エンコード文字列。
varchar
UTF-8エンコード文字列。

数値型

INSERTUPDATE、およびSELECT文のWHERE句でプレーン・テキストに数値型を入力します。

たとえば、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オプションを使用して、cqlshCOPY TOの日付解析形式を変更します。
DateRangeType
日付範囲を格納します。切り捨てられたタイムスタンプは、日付範囲全体を表すか、範囲の構文を使用してカスタムの範囲を作成します。
[beginning_date TO end_date]
カスタムの範囲は、角カッコ内に挿入します。例を次に示します。
  • 2018-01 – 2018年1月の最初の日から最後の日の終わりまで。
  • 2018-01T15 – 範囲には指定された日の時間が含まれます。この例では1500から1600前です(午後3時から午後4時まで)。
  • [2017-01-15 TO 2017-11-01] – 1月の15日から11月の最初の日の終わりまで。
  • [2017 TO 2017-11-01] – 2017の開始から11月の最初の日の終わりまで。
  • [* TO 2018-01-31] – 表現可能な最も速い時刻から2018年1月31日の終わりまで。

currentDate()などの日付関数を使用して日付インスタンスを指定すると、その日の範囲全体ではなく、その日の初めから経過したミリ秒が返されます。

重要: データ型名は大文字と小文字が区別されます。CQL文でこの型を指定するには、単一引用符を使用します。たとえば、CREATE TABLE test.example (id UUID, daterange 'DateRangeField');のようにします。
duration
可変長の3つの符号付き整数としてエンコードされます。整数は以下の数字を表します。
  1. 月数
  2. 日数
  3. ナノ秒数
月数と日数は32ビット整数としてデコードされます。ナノ秒数は64ビット整数としてデコードされます。以下のいずれかの形式を使用してduration値を示します。
  • 期間形式:NyNmoNwNdNhNsNmsNusNns。たとえば、12h30mと示します。単位は以下のとおりです。
    • y - 年(12か月)
    • mo - 月(1か月)
    • w - 週(7日)
    • d - 日(1日)
    • h - 時間(3,600,000,000,000ナノ秒)
    • m - 分(60,000,000,000ナノ秒)
    • s - 秒(1,000,000,000ナノ秒)
    • ms - ミリ秒(1,000,000ナノ秒)
    • usまたはµs - マイクロ秒(1000ナノ秒)
    • ns - ナノ秒(1ナノ秒)
  • ISO 8601形式:P[n]Y[n]M[n]DT[n]H[n]M[n]SまたはP[n]W
  • ISO 8601の代替形式: P[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]
制約事項: 日付コンテキストがないと1mo29dより大きいかどうかを特定できないため、PRIMARY KEYはduration型をサポートしません。
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 TOをcqlsh内で使用してデータをインポートまたはエクスポートする場合は、boolstyleオプションを使用して形式を変更します。たとえば、はい/いいえ型の回答カラムがある調査結果をインポートする場合などです。
counter
64ビット符号付き整数。テーブルごとにカウンター・カラムを1つだけ使用できます。カウンター・テーブル内のその他すべてのカラムはPRIMARY KEYである必要があります。UPDATE文に+-の演算子を使用して、カウンターをインクリメントまたはデクリメントします。Null値はカウンター・カラムではサポートされていません。初期カウントは0です。
DseExecutorStateType
分析ワークロードノードのSparkクライアントに使用される、予約されている型。
重要: データ型名は大文字と小文字が区別されます。CQL文でこの型を指定するには、単一引用符を使用します。たとえば、CREATE TABLE test.example (id UUID, daterange 'DateRangeField');のようにします。
inet
IPv4またはIPv6形式のIPアドレス文字列。

地理空間型

PointType
緯度と経度の2つの座標値を含んでいます。ポイントの入力の詳細については、「PointおよびLineStringの地理空間クエリー」を参照してください。
重要: データ型名は大文字と小文字が区別されます。CQL文でこの型を指定するには、単一引用符を使用します。たとえば、CREATE TABLE test.example (id UUID, daterange 'DateRangeField');のようにします。
LineStringType
ポイントのコンマ区切りリスト。ラインストリング情報の入力の詳細については、「PointおよびLineStringの地理空間クエリー」を参照してください。
重要: データ型名は大文字と小文字が区別されます。CQL文でこの型を指定するには、単一引用符を使用します。たとえば、CREATE TABLE test.example (id UUID, daterange 'DateRangeField');のようにします。
PolygonType
2つのラインストリングのセット。
重要: データ型名は大文字と小文字が区別されます。CQL文でこの型を指定するには、単一引用符を使用します。たとえば、CREATE TABLE test.example (id UUID, daterange 'DateRangeField');のようにします。

コレクション型

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)に置き換えられます。