Cassandraクエリチートシート
1. 序章
学習パスを開始するために、クイックリファレンスガイドが必要になる場合があります。 特に、虎の巻はすべての重要な情報を含むドキュメントです。
このチュートリアルでは、Cassandraクエリ言語(CQL)の基本的な概念と、その過程で作成するチートシートを使用してそれらを適用する方法を学習します。
2. カサンドラの概要
Apache Cassandra は、オープンソース、NoSQL、および分散データストレージシステムです。 これは、1台のサーバーでのみ動作できるのではなく、複数のサーバーに分散していることを意味します。 また、高可用性とパーティションの許容度でも知られています。
言い換えると、Cassandraデータベースの設計は、CAP定理の「AP」に触発されています。
さらに、 Cassandraはマスターレスアーキテクチャであり、非常にスケーラブルであり、何よりも、簡単な障害検出とリカバリを提供します。
3. データ型
通常、Cassandraは豊富なデータ型のセットをサポートしています。 これらには、カスタムタイプとともに、ネイティブタイプ、コレクションタイプ、ユーザー定義タイプ、およびタプルが含まれます。
3.1. ネイティブタイプ
ネイティブタイプは組み込みタイプであり、Cassandraのさまざまな定数をサポートします。
まず、文字列はプログラミングの世界で非常に人気のあるデータ型です。
CQLは、文字列に対して4つの異なるデータ型を提供します。
データ・タイプ | サポートされる定数 | 説明 |
アスキー | ストリング | ASCII文字列 |
inet | ストリング | IPv4またはIPv6アドレス文字列 |
文章 | ストリング | UTF8でエンコードされた文字列 |
varchar | ストリング | UTF8でエンコードされた文字列 |
ブール値には、trueまたはfalseの2つの可能な値のいずれかがあります。
データ・タイプ | サポートされる定数 | 説明 |
ブール値 | ブール値 | trueまたはfalse |
blobデータ型を使用して、画像またはマルチメディアデータをバイナリストリームとしてデータベースに保存できます。
データ・タイプ | サポートされる定数 | 説明 |
ブロブ | ブロブ | 任意のバイト |
期間は、月、日、およびナノ秒を表す3つの符号付き整数です。
データ・タイプ | サポートされる定数 | 説明 |
間隔 | 間隔 | 継続時間の値 |
Cassandraは、整数データ用にさまざまなデータ型を提供しています。
データ・タイプ | サポートされる定数 | 説明 |
tinyint | 整数 | 8ビットsignedint |
smallint | 整数 | 16ビットsignedint |
int | 整数 | 32ビットsignedint |
bigint | 整数 | 64ビット署名付きロング |
変異体 | 整数 | 任意精度の整数 |
カウンター | 整数 | カウンター列(64ビット符号付き) |
integerとfloatの場合、3つのデータ型があります。
データ・タイプ | サポートされる定数 | 説明 |
10進数 | 整数、浮動小数点 | 可変精度の小数 |
ダブル | 整数、浮動小数点 | 64ビット浮動小数点 |
浮く | 整数、浮動小数点 | 32ビット浮動小数点 |
日付と時刻に関連するニーズに対して、Cassandraは次の3つのデータ型を提供します。
データ・タイプ | サポートされる定数 | 説明 |
日にち | 整数、文字列 | 日付値(時間なし) |
時間 | 整数、文字列 | 時間値(日付なし) |
タイムスタンプ | 整数、文字列 | タイムスタンプ(日付と時刻付き) |
一般に、INSERTまたはUPDATEコマンドを使用している間は衝突を回避する必要があります。
データ・タイプ | サポートされる定数 | 説明 |
uuid | uuid | UUID(任意のバージョン) |
timeuuid | uuid | バージョン1のUUID |
3.2. コレクションの種類
ユーザーがリレーショナルデータベースの1つのフィールドに対して複数の値を持っている場合、それらを別のテーブルに格納するのが一般的です。 たとえば、ユーザーは多数の銀行口座、連絡先情報、または電子メールアドレスを持っています。 したがって、この場合、すべてのデータを取得するには、2つのテーブル間に結合を適用する必要があります。
Cassandraは、コレクションタイプを使用して、データをグループ化して列にまとめて保存する方法を提供します。
これらのタイプを簡単に見てみましょう。
- set –一意の値。 順序なしで保存
- リスト–には重複する値を含めることができます。 注文が重要
- マップ–データはキーと値のペアの形式で保存されます
3.3. ユーザー定義タイプ
ユーザー定義型を使用すると、1つの列に複数のデータフィールドを自由に付加できます。
CREATE TYPE student.basic_info (
birthday timestamp,
race text,
weight text,
height text
);
3.4. タプルタイプ
タプルは、ユーザー定義型の代替です。 角かっことコンマ区切り文字を使用して作成され、含まれる要素のタイプを区切ります。
単純なタプルのコマンドは次のとおりです。
-- create a tuple
CREATE TABLE subjects (
k int PRIMARY KEY,
v tuple<int, text, float>
);
-- insert values
INSERT INTO subjects (k, v) VALUES(0, (3, 'cs', 2.1));
-- retrieve values
SELECT * FROM subjects;
4. CassandraCQLコマンド
CQLコマンドのいくつかのカテゴリを見てみましょう。
4.1. キースペースコマンド
最初に覚えておくべきことは、CassandraのキースペースはRDBMSのデータベースによく似ているということです。 これは、特にすべてのキースペーステーブルについて、レプリケーション戦略およびその他のオプションを定義するデータの最も外側のコンテナです。 これを念頭に置いて、適切な一般的なルールは、アプリケーションごとに1つのキースペースです。
関連するコマンドを見てみましょう。
指示 | 例 | 説明 |
キースペースの作成 | CREATE KEYSPACE keyspace_name WITH Replication = {‘class’:’SimpleStrategy’、’replication_factor’:2}; | キースペースを作成します。 |
DESCRIBEキースペース | キースペースを説明します。 | すべてのキースペースが一覧表示されます。 |
キースペースを使用する | USE keyspace_name ; | このコマンドは、クライアントセッションをキースペースに接続します。 |
ALTERキースペース | ALTER KEYSPACE keyspace_name WITH REPLICATION = {‘class’:’SimpleStrategy’、’replication_factor’:3} AND DURABLE_WRITES = false; | キースペースを変更します。 |
DROPキースペース | DROP KEYSPACE keyspace_name ; | キースペースを削除します。 |
4.2. テーブルコマンド
Cassandraでは、テーブルは列ファミリーとも呼ばれます。 主キーの重要性はすでにわかっています。 ただし、テーブルの作成時に主キーを定義する必要があります。
これらのコマンドを確認してみましょう。
指示 | 例 | 説明 |
CREATEテーブル | CREATE TABLE table_name ( column_name UUID PRIMARY KEY、 column_name text、 column_name text、 column_name timestamp); | テーブルを作成します。 |
他の机 | ALTER TABLE table_name ADD column_name int; | テーブルに新しい列が追加されます。 |
他の机 | ALTER TABLE table_name ALTER column_name TYPE datatype ; | 既存の列のデータ型を変更できます。 |
他の机 | ALTER TABLE table_name WITHキャッシング={‘keys’:’NONE’、’rows_per_partition’: ‘1’}; | このコマンドは、テーブルのプロパティを変更するのに役立ちます。 |
DROPテーブル | DROP TABLE table_name ; | テーブルをドロップします。 |
TRUNCATEテーブル | TRUNCATE table_name ; | これを使用して、すべてのデータを完全に削除できます。 |
4.3. インデックスコマンド
テーブル全体をスキャンして結果を待つ代わりに、インデックスを使用してクエリを高速化できます。 ただし、それを覚えておく必要があります
コマンドを見てみましょう:
指示 | 例 | 説明 |
CREATEインデックス | table_name ( column_name );のCREATE INDEX index_name。 | インデックスを作成します。 |
インデックスを削除 | DROP INDEX IF EXISTS index_name ; | インデックスを削除します。 |
4.4. 基本コマンド
これらのコマンドは、テーブル値を読み取って操作するために使用されます。
指示 | 例 | 説明 |
入れる | INSERT INTO table_name ( column_name1 、 column_name2 )VALUES( value1 、 value2 ); | テーブルにレコードを挿入します。 |
選択する | SELECT * FROM table_name ; | このコマンドは、特定のテーブルからデータをフェッチするために使用されます。 |
どこ | SELECT * FROM table_name WHERE column_name = value ; | 述語のレコードを除外します。 |
アップデート | UPDATE table_name SET column_name2 = value2 WHERE column_name1 = value1 ; | レコードの編集に使用されます。 |
消去 | DELETE識別子FROM table_name WHERE condition ; | このステートメントは、テーブルから値を削除します。 |
4.5. その他のコマンド
Cassandraには、パーティションキーとクラスタリングキーの2種類のキーがあります。 パーティションキーは、データが保存されているノードを示します。
比較すると、クラスタリングキーは、パーティションキー内のデータの順序を決定します。
指示 | 例 | 説明 |
注文者 | SELECT * FROM table_name WHERE column_name1 = value ORDER BY cloumn_name2 ASC; | このためには、パーティションキーをWHERE句で定義する必要があります。 また、ORDER BY句は、順序付けに使用するクラスタリング列を表します。 |
GROUP BY | SELECT column_name FROM table_name GROUP BY condition1 、 condition2 ; | この句は、パーティションキーまたはパーティションキーとクラスタリングキーでのみサポートされます。 |
制限 | SELECT * FROM table_name LIMIT 3; | 大きなテーブルの場合、取得する行数を制限します。 |
5. オペレーター
Cassandraは、算術タイプと条件付きタイプの両方の演算子をサポートしています。 算術演算子の下には、加算、減算、乗算、除算、リマインダー、および否定に対して、それぞれ+、-、*、/、%、および–(単項)があります。
WHERE句はCassandraで重要です。 条件演算子は、特定のシナリオと制限とともにこの句で使用されます。 これらの演算子は、CONTAINS、CONTAINS KEY、IN、=、>、> =、<、および<=です。
6. 共通機能
間違いなく、関数は、集計またはスカラーのいずれかで、値を相互に変換する上で重要な役割を果たします。 このため、Cassandraは両方のカテゴリでいくつかのネイティブ関数を提供します。
それらの関数を見てみましょう:
- ブロブ変換関数
- UUIDおよびTimeuuid関数
- トークン機能
- WRITETIME関数
- TTL機能
- トークン機能
- MIN()、MAX()、SUM()、AVG()
これらのネイティブ関数に加えて、ユーザーが関数と集計を定義することもできます。
7. 結論
この短い記事では、Cassandraのクエリ言語の構成要素が何であるかを見てきました。 最初に、それがサポートするデータ型とそれらを定義する方法を研究しました。 次に、データベース操作を実行するための一般的なコマンドを確認しました。 最後に、言語の演算子と機能について説明しました。