All Products
Search
Document Center

ApsaraDB for Cassandra - Deprecated:Tipe data Cassandra

Last Updated:Jun 28, 2025

Seperti halnya bahasa pemrograman lainnya, Cassandra Query Language (CQL) mendukung berbagai tipe data fleksibel, termasuk tipe data primitif, koleksi, dan tipe data yang ditentukan pengguna (UDT). Topik ini menjelaskan tipe data yang didukung oleh CQL.

Tipe data numerik

CQL mendukung berbagai tipe data numerik, termasuk bilangan bulat dan bilangan titik mengambang. Tipe-tipe ini mirip dengan tipe data standar dalam Java. Berikut adalah tipe data numerik yang didukung:

  • int: Bilangan bulat bertanda 32-bit, seperti dalam Java.

  • bigint: Bilangan bulat panjang 64-bit, setara dengan long dalam Java.

  • smallint: Bilangan bulat bertanda 16-bit, setara dengan short dalam Java. Diperkenalkan di Apache Cassandra 2.2.

  • tinyint: Bilangan bulat bertanda 8-bit, seperti dalam Java. Diperkenalkan di Apache Cassandra 2.2.

  • varint: Bilangan bulat bertanda presisi variabel, setara dengan java.math.BigInteger.

  • float: Bilangan titik mengambang 32-bit IEEE-754, seperti dalam Java.

  • double: Bilangan titik mengambang 64-bit IEEE-754, seperti dalam Java.

  • decimal: Bilangan desimal presisi variabel, setara dengan java.math.BigDecimal.

Tipe data teks

CQL menyediakan tipe data berikut untuk merepresentasikan teks:

  • text atau varchar: String karakter UTF-8, umum digunakan dalam CQL.

  • ascii: String karakter ASCII.

Tipe data waktu dan identitas

  • timestamp: Waktu dapat dikodekan sebagai bilangan bulat bertanda 64-bit, tetapi biasanya format timestamp yang mendukung standar ISO 8601 digunakan untuk meningkatkan keterbacaan. Disarankan untuk selalu menyertakan zona waktu untuk timestamp daripada bergantung pada konfigurasi zona waktu sistem operasi.

  • date dan time: Apache Cassandra 2.1 dan versi sebelumnya hanya memiliki tipe timestamp untuk merepresentasikan tanggal dan waktu. Rilis 2.2 memperkenalkan tipe date dan time yang memungkinkan tanggal dan waktu direpresentasikan secara independen. Seperti halnya timestamp, tipe-tipe ini mendukung format ISO 8601.

  • uuid: Pengenal Unik Universal (UUID) adalah nilai 128-bit di mana bit-bit sesuai dengan salah satu dari beberapa jenis, yang paling umum dikenal sebagai Tipe 1 dan Tipe 4. Tipe uuid dalam CQL adalah UUID Tipe 4, yang sepenuhnya berbasis angka acak. UUID biasanya direpresentasikan sebagai urutan digit heksadesimal yang dipisahkan tanda hubung, seperti ab7c46ac-c194-4c71-bb03-0f64986f3daa. Tipe uuid sering digunakan sebagai kunci pengganti dan dapat digunakan sendiri atau dikombinasikan dengan nilai lain. Karena UUID memiliki panjang terbatas, mereka tidak dijamin sepenuhnya unik. Fungsi uuid() dalam CQL dapat digunakan untuk mendapatkan nilai UUID Tipe 4.

  • timeuuid: Ini adalah UUID Tipe 1 yang berbasis alamat MAC komputer, waktu sistem, dan nomor urut untuk mencegah duplikat. CQL menyediakan beberapa fungsi bantu untuk berinteraksi dengan tipe timeuuid, seperti now(), dateOf(), dan unixTimestampOf(). Ketersediaan fungsi-fungsi bantu ini adalah salah satu alasan mengapa timeuuid cenderung lebih sering digunakan daripada uuid.

Tipe data koleksi

Tipe data koleksi dapat menyimpan kumpulan data. Elemen-elemen yang disimpan dalam tipe data set tidak berurutan, tetapi CQL mengembalikan elemen-elemen tersebut dalam urutan terurut. Set dapat berisi tipe data yang telah disebutkan sebelumnya, tipe yang ditentukan pengguna, dan koleksi lainnya.

Contoh berikut menunjukkan cara menggunakan tipe data set untuk menyimpan informasi email:

cqlsh:test_keyspace> CREATE TABLE test_user (first_name text , last_name text,emails set<text>, PRIMARY KEY (first_name)) ;
cqlsh:test_keyspace> INSERT INTO test_user (first_name, last_name,emails) VALUES ('Wu', 'Shi',{'iteblog@iteblog.com'});
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails                  | last_name
------------+-------------------------+-----------
         Wu | {'iteblog@iteblog.com'} |       Shi
(1 rows)
                

Dalam pernyataan sebelumnya, alamat email ditambahkan untuk pengguna dengan first_name Wu. Untuk menambahkan alamat email lain, gunakan sintaks berikut:

cqlsh:test_keyspace> UPDATE test_user SET emails = emails + {'cassandra@iteblog.com' } WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails                                           | last_name
------------+--------------------------------------------------+-----------
         Wu | {'cassandra@iteblog.com', 'iteblog@iteblog.com'} |       Shi
(1 rows)
                

Dua alamat email ditambahkan untuk pengguna dengan first_name Wu. Untuk menghapus alamat email, gunakan sintaks berikut:

cqlsh:test_keyspace> UPDATE test_user SET emails = emails - {'cassandra@iteblog.com'} WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails                  | last_name
------------+-------------------------+-----------
         Wu | {'iteblog@iteblog.com'} |       Shi
(1 rows)
cqlsh:test_keyspace> UPDATE test_user SET emails ={} WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails | last_name
------------+--------+-----------
         Wu |   null |       Shi
(1 rows)
                

Dalam pernyataan sebelumnya, SET emails = emails - {'cassandra@iteblog.com'} digunakan untuk menghapus alamat email dari daftar email, sedangkan SET emails = {} digunakan untuk menghapus semua informasi email pengguna.

list

Tipe data list berisi daftar elemen yang berurutan. Secara default, nilai-nilai disimpan dalam urutan penyisipan. Contoh berikut menunjukkan cara menambahkan informasi seperti nomor telepon ke tabel test_user:

cqlsh:test_keyspace> ALTER TABLE test_user ADD phone list<text>;
cqlsh:test_keyspace> UPDATE test_user SET phone = ['1311234****' ] WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails | last_name | phone
------------+--------+-----------+-----------------
         Wu |   null |       Shi | ['1311234****']
(1 rows)
                        

Dalam pernyataan sebelumnya, nomor telepon ditambahkan untuk pengguna dengan first_name Wu. Untuk menambahkan nomor telepon lain, gunakan sintaks berikut yang mirip dengan set:

cqlsh:test_keyspace> UPDATE test_user SET phone = phone + ['1551111****' ] WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails | last_name | phone
------------+--------+-----------+--------------------------------
         Wu |   null |       Shi | ['1311234****', '1551111****']
(1 rows)
                        

Pada output, nomor telepon baru muncul di akhir daftar. Anda dapat menggunakan pernyataan berikut untuk menyisipkan nomor telepon ke bagian depan daftar:

cqlsh:test_keyspace> UPDATE test_user SET phone = ['1334444****' ] + phone WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails | last_name | phone
------------+--------+-----------+-----------------------------------------------
         Wu |   null |       Shi | ['1334444****', '1311234****', '1551111****']
(1 rows)
                        

Anda dapat memodifikasi item individu dalam daftar saat merujuknya melalui indeksnya:

cqlsh:test_keyspace> UPDATE test_user SET phone[1] = '1888888****' WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails | last_name | phone
------------+--------+-----------+-----------------------------------------------
         Wu |   null |       Shi | ['1334444****', '1888888****', '1551111****']
(1 rows)
                        

Elemen dengan indeks 1 dimodifikasi. Anda juga dapat menghapus item tertentu dengan menggunakan indeksnya:

cqlsh:test_keyspace> DELETE phone[2] from test_user WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT * FROM test_user WHERE first_name = 'Wu';
 first_name | emails | last_name | phone
------------+--------+-----------+--------------------------------
         Wu |   null |       Shi | ['1334444****', '1888888****']
(1 rows)
                        

Anda juga dapat menggunakan SET phone_numbers = phone_numbers - [ '1334444****' ] untuk menghapus elemen.

map

Tipe data map berisi kumpulan pasangan key-value. Kunci dan nilai dapat berupa tipe apa pun kecuali counter. Contoh:

cqlsh:test_keyspace> ALTER TABLE test_user ADD login_sessions map<timeuuid, int>;
cqlsh:test_keyspace> UPDATE test_user SET login_sessions = {now(): 13, now(): 18} WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT first_name, login_sessions FROM test_user WHERE first_name = 'Wu';
 first_name | login_sessions
------------+--------------------------------------------------------------------------------------
         Wu | {1cc61ff0-5f8b-11e9-ac3a-5336cd8118f6: 13, 1cc61ff1-5f8b-11e9-ac3a-5336cd8118f6: 18}
(1 rows)
                        

Tipe data sederhana lainnya

  • boolean: Nilainya adalah true atau false. CQL tidak peka huruf besar/kecil untuk nilai input, tetapi mengembalikan nilai True atau False.

  • blob: Binary large object (blob) adalah istilah umum dalam komputasi untuk array sembarang byte. Tipe blob dalam CQL berguna untuk menyimpan media atau tipe file biner lainnya. Cassandra tidak memvalidasi atau memeriksa byte dalam blob. Dalam Cassandra, blob direpresentasikan sebagai digit heksadesimal. Jika Anda ingin mengkodekan data teks arbitrer ke dalam blob, Anda dapat menggunakan fungsi textAsBlob().

  • inet: Tipe ini merepresentasikan alamat IPv4 atau IPv6. cqlsh menerima semua format valid untuk mendefinisikan alamat IPv4, mencakup representasi berbentuk titik atau non-titik yang berisi nilai desimal, oktal, atau heksadesimal. CQL mengembalikan alamat IP dalam format 192.168.XX.XX.

  • counter: Tipe data counter adalah bilangan bulat bertanda 64-bit, yang nilainya tidak dapat langsung diatur, tetapi hanya dapat dinaikkan atau diturunkan. Tipe counter memiliki beberapa batasan khusus. Tidak dapat digunakan sebagai bagian dari primary key. Jika counter digunakan, semua kolom selain primary key harus merupakan counter.

UDT

Jika tipe data default dalam Cassandra tidak memenuhi kebutuhan Anda, Anda dapat menggunakan UDT. Sebagai contoh, jika Anda ingin menggunakan kolom untuk menyimpan informasi alamat pengguna, Anda perlu mendapatkan informasi seperti kode pos dan nama jalan. Menggunakan kolom teks untuk menyimpan nilai-nilai ini mungkin tidak memenuhi kebutuhan Anda. Dalam kasus ini, Anda dapat mendefinisikan UDT. Contoh:

cqlsh:test_keyspace> CREATE TYPE address (
                    ... street text,
                    ... city text,
                    ... state text,
                    ... zip_code int);
                        

Pernyataan sebelumnya mendefinisikan tipe data address. UDT dibatasi oleh keyspace tempat ia didefinisikan, yang menunjukkan bahwa tipe data address hanya dapat digunakan di test_keyspace. Jika Anda menggunakan DESCRIBE KEYSPACE test_keyspace, keluaran menunjukkan bahwa tipe data address adalah bagian dari test_keyspace. Contoh berikut menunjukkan cara menggunakan tipe address yang telah didefinisikan:

cqlsh:test_keyspace> ALTER TABLE test_user ADD addresses map<text, frozen<address>>;
cqlsh:test_keyspace> UPDATE test_user SET addresses = addresses + {'home': { street: 'shangdi 9', city: 'Beijing', state: 'Beijing', zip_code: 100080} } WHERE first_name = 'Wu';
cqlsh:test_keyspace> SELECT first_name, addresses FROM test_user WHERE first_name = 'Wu';
 first_name | addresses
------------+--------------------------------------------------------------------------------------
         Wu | {'home': {street: 'shangdi 9', city: 'Beijing', state: 'Beijing', zip_code: 100080}}
(1 rows)