Cassandra ドキュメント

バージョン

プレリリースバージョンのドキュメントを表示しています。

JSON サポート

Cassandra 2.2 では、SELECT <select-statement> ステートメントと INSERT <insert-statement> ステートメントに JSON サポートが導入されました。このサポートは、CQL API を根本的に変更するものではありません(たとえば、スキーマは引き続き適用されます)。単に、JSON ドキュメントを操作するための便利な方法を提供します。

SELECT JSON

SELECT ステートメントでは、JSON キーワードを使用して、各行を単一の JSON エンコードされたマップとして返します。SELECT ステートメントの残りの動作は同じです。

結果マップのキーは、通常の結果セットの列名と一致します。たとえば、SELECT JSON a, ttl(b) FROM …​ のようなステートメントは、"a""ttl(b)" というキーを持つマップになります。ただし、INSERT JSON の動作との対称性のために、大文字を含む大文字小文字を区別する列名は、二重引用符で囲まれます。たとえば、SELECT JSON myColumn FROM …​ は、エスケープされた引用符を含むマップキー "\"myColumn\"" を生成します。

マップの値は、結果セットの値の JSON エンコードされた表現(下記参照)になります。

INSERT JSON

INSERT ステートメントでは、新しい JSON キーワードを使用して、JSON エンコードされたマップを単一行として挿入できます。JSON マップの形式は、一般的に、同じテーブルに対する SELECT JSON ステートメントによって返される形式と一致する必要があります。特に、大文字小文字を区別する列名は、二重引用符で囲む必要があります。たとえば、「myKey」と「value」という2つの列を持つテーブルに挿入するには、次の操作を行います。

INSERT INTO mytable JSON '{ "\"myKey\"": 0, "value": 0}';

デフォルト(または DEFAULT NULL が明示的に使用されている場合)、JSON マップから省略された列は NULL に設定されます。つまり、その列の既存の値は削除されます(墓石が作成されます)。または、値の後に DEFAULT UNSET ディレクティブを使用すると、省略された列の値は設定されません。つまり、それらの列の既存の値は保持されます。

Cassandra データ型の JSON エンコーディング

可能な限り、Cassandra はネイティブ JSON 表現でデータ型を表し、受け入れます。Cassandra は、すべての単一フィールド型の CQL リテラル形式と一致する文字列表現も受け入れます。たとえば、浮動小数点数、整数、UUID、日付は、CQL リテラル文字列で表すことができます。ただし、コレクション、タプル、ユーザー定義型などの複合型は、ネイティブ JSON コレクション(マップとリスト)またはコレクションの JSON エンコードされた文字列表現で表す必要があります。

次の表は、Cassandra が INSERT JSON 値(および from_json() 引数)で受け入れるエンコーディングと、SELECT JSON ステートメント(および from_json())のデータの返却時に Cassandra が使用する形式について説明しています。

受け入れられる形式 戻り値の形式 備考

ascii

文字列

文字列

JSON の \u 文字エスケープを使用

bigint

整数、文字列

整数

文字列は有効な 64 ビット整数である必要があります

blob

文字列

文字列

文字列は 0x の後に偶数の 16 進数の数字が続く必要があります

boolean

ブール値、文字列

boolean

文字列は "true" または "false" である必要があります

date

文字列

文字列

YYYY-MM-DD 形式の日付、タイムゾーン UTC

decimal

整数、浮動小数点数、文字列

浮動小数点数

クライアント側のデコーダーで 32 ビットまたは 64 ビット IEEE-754 浮動小数点の精度を超える可能性があります

double

整数、浮動小数点数、文字列

浮動小数点数

文字列は有効な整数または浮動小数点数である必要があります

浮動小数点数

整数、浮動小数点数、文字列

浮動小数点数

文字列は有効な整数または浮動小数点数である必要があります

inet

文字列

文字列

IPv4 または IPv6 アドレス

int

整数、文字列

整数

文字列は有効な 32 ビット整数である必要があります

list

リスト、文字列

list

JSON のネイティブリスト表現を使用

map

マップ、文字列

map

JSON のネイティブマップ表現を使用

smallint

整数、文字列

整数

文字列は有効な 16 ビット整数である必要があります

set

リスト、文字列

list

JSON のネイティブリスト表現を使用

text

文字列

文字列

JSON の \u 文字エスケープを使用

time

文字列

文字列

HH-MM-SS[.fffffffff] 形式の1日の時間

timestamp

整数、文字列

文字列

タイムスタンプ。文字列定数は、タイムスタンプを日付として入力できます。YYYY-MM-DD HH:MM:SS.SSS 形式の日付スタンプが返されます。

timeuuid

文字列

文字列

タイプ 1 UUID。UUID の形式については、定数を参照してください。

tinyint

整数、文字列

整数

文字列は有効な 8 ビット整数である必要があります

tuple

リスト、文字列

list

JSON のネイティブリスト表現を使用

UDT

マップ、文字列

map

フィールド名をキーとする JSON のネイティブマップ表現を使用

uuid

文字列

文字列

UUID の形式については、定数を参照してください。

varchar

文字列

文字列

JSON の \u 文字エスケープを使用

varint

整数、文字列

整数

可変長。クライアント側のデコーダーで 32 ビットまたは 64 ビット整数をオーバーフローする可能性があります

from_json() 関数

from_json() 関数は、INSERT JSON と同様に使用できますが、単一の列値に対して使用します。INSERT ステートメントの VALUES 節、または UPDATEDELETESELECT ステートメントの列値のいずれかとしてのみ使用できます。たとえば、SELECT ステートメントの選択句では使用できません。

to_json() 関数

to_json() 関数は、SELECT JSON と同様に使用できますが、単一の列値に対して使用します。SELECT ステートメントの選択句でのみ使用できます。