Topik ini menjelaskan cara mengelola instance ApsaraDB for Cassandra menggunakan cqlsh. cqlsh adalah shell baris perintah yang digunakan untuk berinteraksi dengan Cassandra berdasarkan Cassandra Query Language (CQL). Anda dapat menginstal Cassandra di mesin lokal atau pada instance Elastic Compute Service (ECS).
Unduh dan instal Cassandra
Anda dapat mengunduh versi terbaru Cassandra dari situs resmi Apache Cassandra dan mengekstrak paket perangkat lunak yang diunduh untuk menginstal 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 Gunakan cqlsh untuk terhubung ke instance ApsaraDB for Cassandra
Masuk ke konsol ApsaraDB for Cassandra, temukan instance ApsaraDB for Cassandra Anda, lalu peroleh Titik akhir dan nomor port node yang ingin Anda hubungkan. Kemudian, jalankan perintah berikut untuk terhubung ke node:
bin/cqlsh $host $port -u $username -p $password Jika Anda perlu sering terhubung ke node, disarankan menyimpan Titik akhir dan nomor portnya ke variabel lingkungan $CQLSH_HOST dan $CQLSH_PORT. Anda dapat menjalankan perintah bin/cqlsh -help untuk melihat lebih banyak parameter yang didukung oleh cqlsh.
Pernyataan CQL umum
Anda dapat menjalankan perintah HELP atau ? di cqlsh untuk melihat semua pernyataan CQL yang dapat digunakan untuk mengelola instance ApsaraDB for Cassandra.
cqlsh> HELP
Perintah shell yang didokumentasikan:
===========================
CAPTURE CLS COPY DESCRIBE EXPAND LOGIN SERIAL SOURCE UNICODE
CLEAR CONSISTENCY DESC EXIT HELP PAGING SHOW TRACING
Topik bantuan CQL:
================
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_TYPE INSERT UPDATE
APPLY CREATE_USER 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 Untuk mengetahui cara mengeksekusi pernyataan CQL tertentu, jalankan perintah HELP pada pernyataan tersebut. Beberapa pernyataan CQL tidak memungkinkan Anda menentukan parameter. Jika Anda mengeksekusi pernyataan CQL seperti itu, sistem akan mengembalikan pengaturan yang diperoleh dari pernyataan tersebut. Pernyataan CQL tersebut termasuk CONSISTENCY, EXPAND, dan PAGING. Contoh:
cqlsh> CONSISTENCY
Tingkat konsistensi saat ini adalah ONE.
cqlsh> EXPAND
Output yang diperluas saat ini dinonaktifkan. Gunakan EXPAND ON untuk mengaktifkan.
cqlsh> PAGING
Paging kueri saat ini diaktifkan. Gunakan PAGING OFF untuk menonaktifkan
Ukuran halaman: 100 Kueri variabel lingkungan
Anda dapat mengeksekusi pernyataan DESCRIBE untuk menanyakan nilai variabel lingkungan yang digunakan dalam instance ApsaraDB for Cassandra. Contoh:
cqlsh> DESCRIBE CLUSTER;
Cluster: Test Cluster
Partitioner: Murmur3Partitioner Pernyataan DESCRIBE CLUSTER menanyakan nama dan pembagi partisi instance ApsaraDB for Cassandra. Anda dapat memilih salah satu dari empat pembagi partisi berikut: RandomPartitioner, Murmur3Partitioner, OrderPreservingPartitioner, dan ByteOrderedPartitioner. Di Cassandra versi sebelum 1.2, pembagi partisi default adalah RandomPartitioner. Di Cassandra 1.2 dan yang lebih baru, pembagi partisi default adalah Murmur3Partitioner.
Untuk menanyakan keyspaces yang tersedia dalam instance ApsaraDB for Cassandra, eksekusi pernyataan berikut:
cqlsh> DESCRIBE KEYSPACES; Sistem mengembalikan semua keyspaces yang disediakan oleh instance ApsaraDB for Cassandra, seperti system_traces, system_schema, system_auth, dan system_distributed, serta keyspaces yang telah Anda buat.
Untuk menanyakan versi cqlsh, Cassandra, dan protokol, eksekusi pernyataan berikut:
cqlsh> SHOW VERSION;
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4] Buat keyspace
Keyspaces dalam instance ApsaraDB for Cassandra mirip dengan database dalam instance ApsaraDB RDS. Keyspace berisi satu atau lebih tabel atau keluarga kolom. Jika Anda memulai cqlsh tanpa menentukan keyspace, prompt perintah cqlsh> akan ditampilkan. Kemudian, Anda dapat mengeksekusi pernyataan CREATE KEYSPACE untuk membuat keyspace. Contoh:
cqlsh> CREATE KEYSPACE test_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
cqlsh> Dalam contoh ini, keyspace bernama test_keyspace dibuat, dan mode replikasi diatur ke SimpleStrategy. Selain itu, instance ApsaraDB for Cassandra yang digunakan untuk pengujian hanya terdiri dari satu node. Oleh karena itu, faktor replikasi diatur ke 1. Namun, jika instance ApsaraDB for Cassandra digunakan dalam lingkungan produksi, disarankan mengatur faktor replikasi menjadi 3.
Setelah membuat keyspace, Anda dapat mengeksekusi pernyataan DESCRIBE KEYSPACE untuk menanyakan keyspace. Contoh:
cqlsh> DESCRIBE KEYSPACE test_keyspace;
CREATE KEYSPACE test_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true; Anda juga dapat mengeksekusi pernyataan USE untuk beralih ke keyspace. Contoh:
cqlsh> USE test_keyspace;
cqlsh:test_keyspace> Buat tabel
Untuk membuat tabel, eksekusi pernyataan berikut:
cqlsh> use test_keyspace;
cqlsh:test_keyspace> CREATE TABLE test_user (first_name text , last_name text, PRIMARY KEY (first_name));
Dalam contoh ini, tabel bernama test_user dibuat di keyspace test_keyspace. Tabel tersebut berisi dua bidang tipe data TEXT: first_name dan last_name. Bidang first_name adalah kunci utama tabel. Anda juga dapat mengeksekusi pernyataan berikut untuk membuat tabel test_user di keyspace test_keyspace:
cqlsh> CREATE TABLE test_keyspace.test_user(first_name text , last_name text, PRIMARY KEY (first_name));
Untuk menanyakan pernyataan CQL yang Anda eksekusi untuk membuat tabel test_user di keyspace test_keyspace, eksekusi pernyataan berikut:
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> Anda dapat mengeksekusi pernyataan DESCRIBE TABLE untuk menanyakan semua pernyataan yang Anda eksekusi untuk membuat tabel dan skema tabel, termasuk pengaturan kustom dan pengaturan default.
Baca dan tulis data
Anda dapat mengeksekusi pernyataan INSERT INTO untuk menyisipkan data ke dalam tabel. Contoh:
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'); Pernyataan di atas digunakan untuk menyisipkan tiga catatan data ke dalam tabel test_user. Dalam catatan data terakhir, hanya nilai bidang first_name yang ditentukan dan bidang last_name dibiarkan kosong.
Anda dapat mengeksekusi pernyataan SELECT COUNT untuk memeriksa apakah catatan data tersebut dimasukkan. Contoh:
cqlsh:test_keyspace> SELECT COUNT(*) FROM test_user;
count
-------
3
(1 rows)
Peringatan :
Kueri agregasi digunakan tanpa kunci partisi Hasil yang dikembalikan menunjukkan bahwa catatan data tersebut dimasukkan. Anda juga dapat mengeksekusi pernyataan berikut untuk menanyakan catatan data:
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) Nilai null dikembalikan untuk bidang last_name yang terkait dengan bidang first_name yang nilainya Wang. Di Cassandra, nilai null menunjukkan bahwa kolom yang ditentukan oleh bidang tersebut tidak memiliki data, dan kolom tanpa data tidak menempati ruang dalam sistem penyimpanan. Namun, di basis data relasional umum, kolom tetap menempati ruang penyimpanan meskipun tidak memiliki data.
Hapus kolom atau baris
Anda dapat mengeksekusi pernyataan DELETE untuk menghapus satu atau lebih kolom. Sebagai contoh, Anda dapat mengeksekusi pernyataan berikut untuk menghapus kolom 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) Kolom yang ditentukan oleh bidang last_name dihapus.
Anda juga dapat mengeksekusi pernyataan DELETE untuk menghapus baris. Contoh:
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> Catatan data yang nilainya bidang first_name adalah test dihapus.
Pernyataan INSERT and UPDATE yang digunakan bersama-sama sama dengan pernyataan UPSERT. Jika catatan data yang ingin Anda sisipkan sudah ada, sistem tidak akan memperbarui catatan data yang ada dengan nilai kunci utama yang sama, tetapi menyisipkan catatan data baru dan menghapus yang ada. Contoh:
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) Nilai Shi dikembalikan untuk bidang last_name yang terkait dengan bidang first_name yang nilainya Wang.
Jika Anda mengeksekusi pernyataan UPDATE untuk memperbarui catatan data yang tidak ada, sistem akan menyisipkan catatan data tersebut. Contoh:
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> Catatan data yang nilainya bidang first_name adalah Li disisipkan ke dalam tabel, tetapi catatan data ini tidak ada sebelum pembaruan.
Bersihkan atau hapus tabel
Anda dapat mengeksekusi pernyataan TRUNCATE atau DROP TABLE untuk membersihkan atau menghapus tabel. Contoh:
cqlsh:test_keyspace> TRUNCATE test_user;
cqlsh:test_keyspace> DROP TABLE test_user;