1. 概要

このチュートリアルでは、ApacheCassandraデータベースのさまざまなデータ型のいくつかを示します。 Apache Cassandraは、コレクション型、ネイティブ型、タプル型、ユーザー定義型など、豊富なデータ型のセットをサポートしています

Cassandraクエリ言語(CQL)は、構造化クエリ言語(SQL)の単純な代替手段です。 これは、データベースとの通信を提供するために開発された宣言型言語です。 SQLと同様に、CQLもデータをテーブルに格納し、データを行と列に編成します。

2. Cassandraデータベース構成

docker image を使用してデータベースを作成し、cqlshを使用してデータベースに接続してみましょう。 次に、キースペースを作成する必要があります:

CREATE KEYSPACE baeldung WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};

このチュートリアルでは、データのコピーを1つだけ使用してキースペースを作成しました。 それでは、クライアントセッションをキースペースに接続しましょう:

USE <code class="language-shell">baeldung;

3. 組み込みのデータ型

CQLは、豊富なネイティブデータ型のセットをサポートしています。 これらのデータ型は事前定義されており、それらのいずれかを直接参照できます。

3.1. 数値タイプ

数値型は、Javaや、範囲が異なる整数や浮動小数点数などの他の言語の標準型に似ています。

これらすべてのデータ型でテーブルを作成しましょう。

CREATE TABLE numeric_types
(
    type1 int PRIMARY KEY,
    type2 bigint,
    type3 smallint,
    type4 tinyint,
    type5 varint,
    type6 float,
    type7 double,
    type8 decimal
);

3.2. テキストタイプ

CQLは、テキストを表すための2つのデータ型を提供します。 textまたはvarcharを使用してUTF-8文字列を作成できます。 UTF-8は、より最近で広く使用されているテキスト標準であり、国際化をサポートしています。

ASCII文字列を作成するためのasciiタイプもあります。 asciiタイプは、ASCII形式のレガシーデータを処理する場合に最も役立ちます。 テキスト値のサイズは、列の最大サイズによって制限されます。 単一列の値のサイズは2GBですが、推奨されるのは1MBのみです。

これらすべてのデータ型でテーブルを作成しましょう。

CREATE TABLE text_types
(
    primaryKey int PRIMARY KEY,
    type2      text,
    type3      varchar,
    type4      ascii
);

3.3. 日付タイプ

それでは、日付の種類について説明しましょう。 Cassandraは、一意のパーティションキーを定義したり、通常の列を定義したりするのに非常に役立ついくつかのタイプを提供します。

 

時間はUUIDバージョン1で表されます。CQLのタイムスタンプ、時刻、および日付に整数または文字列を入力できます。 期間タイプの値は、3つの符号付き整数としてエンコードされます。

最初の整数は月数、2番目は日数、3番目はナノ秒数を表します。

createtableコマンドの例を見てみましょう。

CREATE TABLE date_types
(
    primaryKey int PRIMARY KEY,
    type1      timestamp,
    type2      time,
    type3      date,
    type4      timeuuid,
    type5      duration
);

3.4. カウンタータイプ

カウンタータイプは、カウンター列を定義するために使用されます。カウンター列は、値が64ビットの符号付き整数である列です。 カウンタ列で実行できる操作は、インクリメントとデクリメントの2つだけです。

したがって、カウンターに値を設定することはできません。 ページビュー数、ツイート数、ログメッセージ数などの統計を追跡するためにカウンターを使用できます。 カウンタータイプと他のタイプを混在させることはできません

例を見てみましょう:

CREATE TABLE counter_type
(
    primaryKey uuid PRIMARY KEY,
    type1      counter
);

3.5. その他のデータ型

  • ブール値は単純なtrue/false値です
  • uuidはタイプ4UUIDであり、完全にランダムな数値に基づいています。 16進数のダッシュで区切られたシーケンスを使用してUUIDを入力できます
  • バイナリラージオブジェクト(blob)は、任意のバイト配列の口語的な計算用語です。 CQLブロブタイプは、メディアまたはその他のバイナリファイルタイプを格納します。 BLOBの最大サイズは2GBですが、1MB未満をお勧めします。
  • inetは、IPv4またはIPv6インターネットアドレスを表すタイプです。

繰り返しますが、次のタイプのテーブルを作成しましょう。

CREATE TABLE other_types
(
    primaryKey int PRIMARY KEY,
    type1      boolean,
    type2      uuid,
    type3      blob,
    type4      inet
);

4. コレクションのデータ型

新しい列を生成せずに同じタイプのデータを保存したい場合があります。 コレクションには複数の値を格納できます。 CQLには、リスト、セット、マップなど、役立つ3つのコレクションタイプが用意されています。

たとえば、テキスト要素のリスト、整数のリスト、またはその他の要素タイプのリストを含むテーブルを作成できます。

4.1. 設定

設定されたデータ型を使用して複数の一意の値を格納できます。同様に、Java では、要素は順番に格納されません。

セットを作成しましょう:

CREATE TABLE collection_types
(
    primaryKey int PRIMARY KEY,
    email      set<text>
);

4.2. リスト

このデータ型では、値はリストの形式で格納されます。要素の順序を変更することはできません。 リストに値を格納した後、要素は特定のインデックスを取得します。 これらのインデックスを使用してデータを取得できます。

セットとは異なり、リストには重複する値を格納できます。 テーブルにリストを追加しましょう。

ALTER TABLE collection_types
    ADD scores list<text>;

4.3. 地図

Cassandra を使用すると、マップデータ型を使用してキーと値のペアのセットにデータを格納できます。 キーは一意です。 そのため、マップをキーで並べ替えることができます。

テーブルに別の列を追加しましょう。

ALTER TABLE collection_types
    ADD address map<uuid, text>;

5. タプル

タプルはさまざまなタイプの要素のセットです。 これらのセットの長さは固定されています。

CREATE TABLE tuple_type
(
    primaryKey int PRIMARY KEY,
    type1 tuple<int, text, float>
);

6. ユーザー定義のデータ型

Cassandraは、独自のデータ型を作成する可能性を提供します。 これらのデータ型を作成、変更、および削除できます。 まず、独自のタイプを作成しましょう。

CREATE TYPE user_defined_type (
    type1 timestamp,
    type2 text,
    type3 text,
    type4 text);

これで、次のタイプのテーブルを作成できます。

CREATE TABLE user_type
(
    primaryKey int PRIMARY KEY,
    our_type   user_defined_type
);

7. 結論

このクイックチュートリアルでは、基本的なCQLデータ型について説明しました。 さらに、これらのデータ型でテーブルを作成しました。 その後、どのようなデータを保存できるかについて話し合いました。

いつものように、記事の完全なソースコードは、GitHubから入手できます。