データ型
データ型について説明します。
テーブル内の各カラムのデータ型が宣言され、強制的に適用されます。
文字列型
$$
)で囲みます。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エンコード文字列。
数値型
INSERT、UPDATE、および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'
を使用します。 - 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つの符号付き整数としてエンコードされます。整数は以下の数字を表します。
- 月数
- 日数
- ナノ秒数
- 期間形式: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]
制約事項: 日付コンテキストがないと1mo
が29d
より大きいかどうかを特定できないため、PRIMARY KEY
はduration型をサポートしません。 - 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 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つのカラムに複数の値を格納できます。コレクションを使用して、電話番号、タグ、アドレスなどの少量のデータを格納または非正規化します。コレクションは、特定のユーザーのすべてのイベントなど、無制限に成長することが予想されるデータには適していません。そのようなデータにはクラスター化カラムを含むテーブルを使用してください。
- コレクションは内部でインデックスの作成やページングが行われないため、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)に置き換えられます。