Query Tabel Apache Cassandra

M. Ramadhan
Telematika
Published in
4 min readMar 25, 2020

Query merupakan kata benda, artinya pertanyaan, terutama yang berkaitan dengan informasi. Sebagai istilah dalam basis data, query berarti permintaan data dari basis data yang diajukan oleh pengguna dengan menggunakan pernyataan tertentu. Sama halnya dengan SQL, CQL menggunakan pernyataan SELECT.

Diagram Sintaks dan Contoh Penggunaan

  • nama_keyspace adalah keyspace yang berisi tabel yang akan ditampilkan datanya. Tidak diperlukan jika keyspace telah ditentukan dengan perintah USE.
  • nama_tabel adalah tabel yang akan ditampilkan datanya.
  • Data apa yang ditampilkan?
    - semua kolom, pilih: tanda *
    - kolom tertentu, pilih: nama_kolom [, nama_kolom, …]
    - hasil olahan, pilih: fungsi
    - kolom yang di dalam partition key, pilih: nama_kolom_partition_key
    -
    bila perlu, klausa AS alias dapat digunakan untuk nama alias.
  • Klausa LIMIT jumlah_baris digunakan untuk membatasi jumlah baris data yang ditampilkan.
cqlsh:akademik> // Contoh tanpa klausa LIMIT
cqlsh:akademik> SELECT nama, nim, nohp
... FROM mahasiswa;
nama | nim | nohp
--------------+-----------+-------------------------------
Zea May | 202012004 | {'0811223344'}
Oryza Sativa | 202011003 | {'08123456789', '0897654321'}
Rajabasa | 201911007 | null
(3 rows)cqlsh:akademik> // Contoh penggunaan klausa LIMIT
cqlsh:akademik> SELECT nama, nim, nohp
... FROM mahasiswa
... LIMIT 2;
nama | nim | nohp
--------------+-----------+-------------------------------
Zea May | 202012004 | {'0811223344'}
Oryza Sativa | 202011003 | {'08123456789', '0897654321'}
(2 rows)cqlsh:akademik> // Contoh penggunaan fungsi dan nama alias
cqlsh:akademik> SELECT COUNT(*) AS JumlahMahasiswa,
... COUNT(nohp) AS YangMemilikiHP
... FROM mahasiswa;
jumlahmahasiswa | yangmemilikihp
-----------------+----------------
3 | 2
(1 rows)Warnings :
Aggregation query used without partition key
cqlsh:akademik> // nama alias boleh ditulis di antara
cqlsh:akademik> // dua tanda petik ganda
cqlsh:akademik> SELECT COUNT(*) AS "Jumlah Mahasiswa",
... COUNT(nohp) AS "Yang Memiliki HP"
... FROM mahasiswa;
Jumlah Mahasiswa | Yang Memiliki HP
------------------+------------------
3 | 2
(1 rows)Warnings :
Aggregation query used without partition key
  • Klausa WHERE kriteria digunakan untuk memilih baris data yang diinginkan. Kriteria berdasarkan nilai kolom, baik kolom primary key maupun bukan.
  • Kriteria berdasarkan nilai kolom primary key.
    - Hanya operator = dan IN yang valid untuk digunakan dalam kriteria.
    - Penggunaan operator <, <=, >, >=, memunculkan pesan kesalahan.
    - Agar valid dan diproses, tambahkan klausa ALLOW FILTERING.
  • Kriteria berdasarkan nilai kolom selain primary key akan memberikan pesan kesalahan kecuali ada tambahan klausa ALLOW FILTERING.
cqlsh:akademik> // Contoh kriteria berdasarkan nilai kolom
cqlsh:akademik> // primary key menggunakan operator =
cqlsh:akademik> SELECT nama, nim, nohp
... FROM mahasiswa
... WHERE nim = '202011003';
nama | nim | nohp
--------------+-----------+-------------------------------
Oryza Sativa | 202011003 | {'08123456789', '0897654321'}
(1 rows)cqlsh:akademik> // Penggunakan operator IN dalam kriteria
cqlsh:akademik> // berdasarkan nilai kolom primary key
cqlsh:akademik> SELECT nama, nim, nohp
... FROM mahasiswa
... WHERE nim IN ('201911007','202011003');
nama | nim | nohp
--------------+-----------+-------------------------------
Rajabasa | 201911007 | null
Oryza Sativa | 202011003 | {'08123456789', '0897654321'}
(2 rows)cqlsh:akademik> // Penggunakan operator >= dalam kriteria
cqlsh:akademik> // berdasarkan nilai kolom primary key
cqlsh:akademik> SELECT nama, nim, nohp
... FROM mahasiswa
... WHERE nim >= '202011003'; // ERROR
InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING"
cqlsh:akademik> // Penggunakan operator >= dalam kriteria
cqlsh:akademik> // dengan tambahan klausa ALLOW FILTERING
cqlsh:akademik> SELECT nama, nim, nohp
... FROM mahasiswa
... WHERE nim >= '202011003'
... ALLOW FILTERING; // permintaan data diproses
nama | nim | nohp
--------------+-----------+-------------------------------
Zea May | 202012004 | {'0811223344'}
Oryza Sativa | 202011003 | {'08123456789', '0897654321'}
(2 rows)cqlsh:akademik> // Contoh kriteria berdasarkan
cqlsh:akademik> // nilai kolom bukan primary key
cqlsh:akademik> SELECT nama, nim, nohp
... FROM mahasiswa
... WHERE nama = 'Rajabasa'; // ERROR
InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING"
cqlsh:akademik> // Kriteria berdasarkan nilai kolom bukan primary
cqlsh:akademik> // key dengan tambahan klausa ALLOW FILTERING
cqlsh:akademik> SELECT nama, nim, nohp
... FROM mahasiswa
... WHERE nama = 'Rajabasa'
... ALLOW FILTERING; // permintaan data diproses
nama | nim | nohp
----------+-----------+------
Rajabasa | 201911007 | null
(1 rows)
  • Gunakan klausa JSON untuk memperoleh keluaran dalam format JSON.
cqlsh:akademik> // Contoh penggunaan klausa JSON
cqlsh:akademik> SELECT JSON nama,bekerja,nim
... FROM mahasiswa;
[json]
---------------------------------------------------------------
{"nama": " Zea May", "bekerja": false, "nim": "202012004"}
{"nama": "Oryza Sativa", "bekerja": null, "nim": "202011003"}
{"nama": "Rajabasa", "bekerja": true, "nim": "201911007"}
(3 rows)
  • Klausa GROUP BY nama_kolom_pk digunakan untuk mengelompokkan baris berkaitan dengan penggunaan fungsi agregasi. Berbeda dengan SQL yang boleh mengelompokkan data berdasarkan kolom apa pun, Cassandra hanya membolehkan pengelompokan berdasarkan kolom primary key. Hal ini akan dibahas lebih lanjut pada tulisan lain.
  • Klausa ORDER BY nama_kolom_pk digunakan untuk mengurutkan baris. Berbeda dengan SQL yang boleh mengurutkan baris berdasarkan kolom apa pun, Cassandra hanya membolehkan pengelompokan berdasarkan kolom primary key. Hal ini akan dibahas lebih lanjut pada kesempatan lain.

Referensi

--

--

M. Ramadhan
Telematika

I’m a database designer and developer, childhood in Menggala, living in Palembang.