すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for Cassandra - Deprecated:cqlsh を使用して ApsaraDB for Cassandra インスタンスを管理する

最終更新日:Jan 19, 2025

このトピックでは、cqlsh を使用して ApsaraDB for Cassandra インスタンスを管理する方法について説明します。 cqlsh は、Cassandra Query Language(CQL)に基づいて Cassandra と対話するために使用されるコマンドラインシェルです。オンプレミスのマシンまたは Elastic Compute Service(ECS)インスタンスに Cassandra をインストールできます。

Cassandra をダウンロードしてインストールする

Apache Cassandra の公式 Web サイトから Cassandra の最新バージョンをダウンロードし、ダウンロードしたソフトウェアパッケージを解凍して Cassandra をインストールできます。

$ wget http://mirror.bit.edu.cn/apache/cassandra/3.11.4/apache-cassandra-3.11.4-bin.tar.gz
$ tar -zxf apache-cassandra-3.11.4-bin.tar.gz 
$ cd apache-cassandra-3.11.4                

cqlsh を使用して ApsaraDB for Cassandra インスタンスに接続する

ApsaraDB for Cassandra <コンソール>[コンソール] にログインし、ApsaraDB for Cassandra インスタンスを見つけ、接続するノードのエンドポイントとポート番号を取得します。次に、次のコマンドを実行してノードに接続します。

bin/cqlsh $host $port -u $username -p $password                       

ノードに頻繁に接続する必要がある場合は、そのエンドポイントとポート番号を $CQLSH_HOST および $CQLSH_PORT 環境変数に保存することをお勧めします。 bin/cqlsh -help コマンドを実行して、cqlsh でサポートされているその他のパラメーターを表示できます。

一般的な CQL 文

cqlsh で HELP または ? コマンドを実行して、ApsaraDB for Cassandra インスタンスの管理に使用できるすべての CQL 文を表示できます。

cqlsh> HELP
Documented shell commands:
===========================
CAPTURE  CLS          COPY  DESCRIBE  EXPAND  LOGIN   SERIAL  SOURCE   UNICODE
CLEAR    CONSISTENCY  DESC  EXIT      HELP    PAGING  SHOW    TRACING
CQL help topics:
================
AGGREGATES               CREATE_KEYSPACE           DROP_TRIGGER      TEXT     
ALTER_KEYSPACE           CREATE_MATERIALIZED_VIEW  DROP_TYPE         TIME     
ALTER_MATERIALIZED_VIEW  CREATE_ROLE               DROP_USER         TIMESTAMP
ALTER_TABLE              CREATE_TABLE              FUNCTIONS         TRUNCATE 
ALTER_TYPE               CREATE_TRIGGER            GRANT             TYPES    
ALTER_USER               CREATE_USER               INSERT            UPDATE   
APPLY                    CREATE_TYPE               INSERT_JSON       USE      
ASCII                    DATE                      INT               UUID     
BATCH                    DELETE                    JSON            
BEGIN                    DROP_AGGREGATE            KEYWORDS        
BLOB                     DROP_COLUMNFAMILY         LIST_PERMISSIONS
BOOLEAN                  DROP_FUNCTION             LIST_ROLES      
COUNTER                  DROP_INDEX                LIST_USERS      
CREATE_AGGREGATE         DROP_KEYSPACE             PERMISSIONS     
CREATE_COLUMNFAMILY      DROP_MATERIALIZED_VIEW    REVOKE          
CREATE_FUNCTION          DROP_ROLE                 SELECT          
CREATE_INDEX             DROP_TABLE                SELECT_JSON                       

特定の CQL 文の実行方法を知りたい場合は、その文に対して HELP コマンドを実行します。一部の CQL 文では、パラメーターを指定できません。このような CQL 文を実行すると、システムはその文によって照会された設定を返します。このような CQL 文には、CONSISTENCYEXPANDPAGING などがあります。例:

cqlsh> CONSISTENCY
Current consistency level is ONE.
cqlsh> EXPAND
Expanded output is currently disabled. Use EXPAND ON to enable.
cqlsh> PAGING
Query paging is currently enabled. Use PAGING OFF to disable
Page size: 100              

環境変数を照会する

DESCRIBE 文を実行して、ApsaraDB for Cassandra インスタンスで使用される環境変数の値を照会できます。例:

cqlsh> DESCRIBE CLUSTER;
Cluster: Test Cluster
Partitioner: Murmur3Partitioner                       

DESCRIBE CLUSTER 文は、ApsaraDB for Cassandra インスタンスの名前と partitioner を照会します。RandomPartitioner、Murmur3Partitioner、OrderPreservingPartitioner、ByteOrderedPartitioner の 4 つの partitioner から 1 つを選択できます。バージョン 1.2 より前の Cassandra では、デフォルトの partitioner は RandomPartitioner です。Cassandra 1.2 以降では、デフォルトの partitioner は Murmur3Partitioner です。

ApsaraDB for Cassandra インスタンスで使用可能なキースペースを照会するには、次の文を実行します。

cqlsh> DESCRIBE KEYSPACES;                       

システムは、system_traces、system_schema、system_auth、system_distributed など、ApsaraDB for Cassandra インスタンスによって提供されるすべてのキースペースと、作成したキースペースを返します。

cqlsh、Cassandra、およびプロトコルのバージョンを照会するには、次の文を実行します。

cqlsh> SHOW VERSION;
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]                       

キースペースを作成する

ApsaraDB for Cassandra インスタンスのキースペースは、ApsaraDB RDS インスタンスのデータベースに似ています。キースペースには、1 つ以上のテーブルまたはカラムファミリが含まれています。cqlsh を起動してキースペースを指定しないと、cqlsh> コマンドプロンプトが表示されます。次に、CREATE KEYSPACE 文を実行してキースペースを作成できます。例:

cqlsh> CREATE KEYSPACE test_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
cqlsh>                        

この例では、test_keyspace という名前のキースペースが作成され、レプリケーションモードが SimpleStrategy に設定されています。また、テストに使用される ApsaraDB for Cassandra インスタンスは 1 つのノードのみで構成されています。したがって、レプリケーション係数は 1 に設定されています。ただし、ApsaraDB for Cassandra インスタンスを本番環境で使用する場合は、レプリケーション係数を 3 に設定することをお勧めします。

キースペースを作成した後、DESCRIBE KEYSPACE 文を実行してキースペースを照会できます。例:

cqlsh> DESCRIBE KEYSPACE  test_keyspace;
CREATE KEYSPACE test_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;                        

USE 文を実行してキースペースに切り替えることもできます。例:

cqlsh> USE test_keyspace;
cqlsh:test_keyspace>                      

テーブルを作成する

テーブルを作成するには、次の文を実行します。

cqlsh> use test_keyspace;
cqlsh:test_keyspace> CREATE TABLE test_user (first_name text , last_name text, PRIMARY KEY (first_name));
                      

この例では、test_keyspace キースペースに test_user という名前のテーブルが作成されます。テーブルには、TEXT データ型の 2 つのフィールド、first_name と last_name が含まれています。first_name フィールドは、テーブルのプライマリキーです。次の文を実行して、test_keyspace キースペースに test_user テーブルを作成することもできます。

cqlsh> CREATE TABLE test_keyspace.test_user(first_name text , last_name text, PRIMARY KEY (first_name));
                       

test_keyspace キースペースに test_user テーブルを作成するために実行した CQL 文を照会するには、次の文を実行します。

cqlsh:test_keyspace> DESCRIBE TABLE test_user;
CREATE TABLE test_keyspace.test_user (
    first_name text PRIMARY KEY,
    last_name text
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';
cqlsh:test_keyspace>                        

DESCRIBE TABLE 文を実行して、テーブルを作成するために実行したすべての文と、カスタム設定とデフォルト設定を含むテーブルのスキーマを照会できます。

データの読み取りと書き込み

INSERT INTO 文を実行して、テーブルにデータを挿入できます。例:

cqlsh:test_keyspace> INSERT INTO test_user (first_name, last_name) VALUES ('test', 'Hadoop');
cqlsh:test_keyspace> INSERT INTO test_user (first_name, last_name) VALUES ('Zhang', 'San');
cqlsh:test_keyspace> INSERT INTO test_user (first_name) VALUES ('Li');                       

上記の文は、test_user テーブルに 3 つのデータレコードを挿入するために使用されます。最後のデータレコードでは、first_name フィールドの値のみが指定され、last_name フィールドは空のままです。

SELECT COUNT 文を実行して、データレコードが挿入されたかどうかを確認できます。例:

cqlsh:test_keyspace> SELECT COUNT(*) FROM test_user;
 count
-------
     3
(1 rows)
Warnings :
Aggregation query used without partition key                        

返された結果から、データレコードが挿入されたことがわかります。次の文を実行してデータレコードを照会することもできます。

cqlsh:test_keyspace> SELECT * FROM test_user;
 first_name | last_name
------------+-----------
       test |    Hadoop
       Wang |      null
      Zhang |       San
(3 rows)
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name='test';
 first_name | last_name
------------+-----------
       test |    Hadoop
(1 rows)                       

値が Wang の first_name フィールドに関連付けられた last_name フィールドには、null 値が返されます。Cassandra では、null 値はフィールドで指定されたカラムにデータがないことを示し、データのないカラムはストレージシステムで領域を占有しません。ただし、一般的なリレーショナルデータベースでは、カラムにデータがなくてもストレージ領域を占有します。

カラムまたは行を削除する

DELETE 文を実行して、1 つ以上のカラムを削除できます。たとえば、次の文を実行して last_name カラムを削除できます。

cqlsh:test_keyspace> DELETE last_name FROM test_user WHERE first_name='test';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name='test';
 first_name | last_name
------------+-----------
       test |      null
(1 rows)                        

last_name フィールドで指定されたカラムが削除されます。

DELETE 文を実行して行を削除することもできます。例:

cqlsh:test_keyspace> DELETE FROM test_user WHERE first_name='test';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name='test';
 first_name | last_name
------------+-----------
(0 rows)
cqlsh:test_keyspace>                        

first_name フィールドの値が test であるデータレコードが削除されます。

INSERT 文と UPDATE 文を一緒に使用することは、UPSERT 文と同じです。挿入するデータレコードがすでに存在する場合、システムは同じプライマリキー値を持つ既存のデータレコードを更新するのではなく、新しいデータレコードを挿入して既存のレコードを削除します。例:

cqlsh:test_keyspace> INSERT INTO test_user (first_name, last_name) VALUES ('Wang', 'Shi');
cqlsh:test_keyspace> SELECT * FROM test_user;
 first_name | last_name
------------+-----------
       Wang |       Shi
      Zhang |       San
(2 rows)                       

値が Wang の first_name フィールドに関連付けられた last_name フィールドには、Shi の値が返されます。

存在しないデータレコードを更新するために UPDATE 文を実行すると、システムはデータレコードを挿入します。例:

cqlsh:test_keyspace> SELECT * FROM test_user;
 first_name | last_name
------------+-----------
       Wang |       Shi
      Zhang |       San
(2 rows)
cqlsh:test_keyspace> UPDATE test_user SET last_name = 'Si' WHERE first_name = 'Li';
cqlsh:test_keyspace> SELECT * FROM test_user;
 first_name | last_name
------------+-----------
       Wang |      Shi
      Zhang |       San
         Li |        Si
(3 rows)
cqlsh:test_keyspace>                       

first_name フィールドの値が Li であるデータレコードがテーブルに挿入されますが、このデータレコードは更新前に存在しません。

テーブルをクリアまたは削除する

TRUNCATE 文または DROP TABLE 文を実行して、テーブルをクリアまたは削除できます。例:

cqlsh:test_keyspace> TRUNCATE test_user;
cqlsh:test_keyspace> DROP TABLE test_user;