Sử dụng ngôn ngữ truy vấn Cassandra (CQL – Cassandra Query Language)

Một phần của tài liệu BÀI TẬP LỚN MÔN CƠ SỞ DỮ LIỆU NÂNG CAO SO SÁNH CƠ SỞ DỮ LIỆU AMAZON DYNAMO VÀ APACHE CASSANDRA (Trang 33)

Có thể tiếp cận lệnh sử dụng ngôn ngữ truy vấn Cassandra bằng nhiều cách. Các chương trình như Python, Twisted Python… đều đã có các trình điều khiển tương ứng.

Với mục đích quản lí, cách chạy lệnh CQL trực tiếp nhất là thông qua dòng lệnh người dùng dựa trên chương trình Python có tên là cqlsh

Chương trình dòng lệnh CQL (cqlsh)

Giống như ở Apache Cassandra bản 1.0.5 và DataStax Community bản 1.0.1, cqlsh được cài trong $CASSANDRA_HOME/bin/cqlsh hoặc trong /usr/bin/cqlsh

Khi chạy cqlsh, cần cung cấp IP để kết nối đến 1 node Cassandra (mặc định là localhost) và kết nối cổng RPC (mặc định là 9160). VD:

$ cqlsh 103.263.89.126 9160 cqlsh>

Để thoát cqlsh ,gõ exit ở dấu nhắc lệnh.

cqlsh> exit

Chạy các lệnh CQL với cqlsh

Lệnh trong cqlsh là sự kết hợp giữa cú pháp dạng SQL chỉ ra khái niệm và thao tác trong Cassandra.

Sau đây là một số lệnh CQL đơn giản sử dụng cqlsh. Đây là 1 tập hợp lệnh tương tự nhưng không đồng nhất với tập hợp lệnh được miêu tả trong phần đầu của tài liệu này (phần sử dụng cassandra-cli).

Tạo Keyspace

Có thể sử dụng lệnh cqlsh để tạo keyspace:

cqlsh> CREATE KEYSPACE twissandra WITH

strategy_class = 'NetworkTopologyStrategy' AND strategy_options:DC1 = 3;

Tạo Column Family

Trong ví dụ này cqlsh được sử dụng để tạo Column family users trong keyspace mới tạo. Hãy chú ý đến lệnh USE kết nối tới Keyspace Twissandra.

cqlsh> USE twissandra;

cqlsh> CREATE COLUMNFAMILY users ( ... KEY varchar PRIMARY KEY, ... password varchar,

... gender varchar,

... state varchar,

... birth_year bigint);

Chèn và truy hồi cột

Mặc dù việc chèn cột và giá trị cột tự động bằng các chương trình sẽ thực tế hơn, tuy nhiên chúng ta vẫn có thể sử dụng cqlsh cho thao tác này. VD dưới minh hoạ việc sử dụng lệnh để chèn và truy hồi cột trong Column family USER.

cqlsh> INSERT INTO users (KEY, password) VALUES ('jsmith', 'ch@ngem3a') USING TTL 86400;

cqlsh> SELECT * FROM users WHERE KEY='jsmith';

u'jsmith' | u'password',u'ch@ngem3a' | u'ttl', 86400

Thêm cột bằng ALTER COLUMNFAMILY

Lệnh ALTER COLUMNFAMILY giúp thêm cột mới vào 1 Column family. VD, thêm cột coupon_code với loại xác nhận varchar vào Column family users:

cqlsh> ALTER TABLE users ADD coupon_code varchar;

Cột siêu dữ liệu được tạo và được thêm vào sơ đồ Column family nhưng không cập nhật thêm bất kì hàng nào .

Thay đổi siêu cột

Có thể thay đổi loại cột bất kì lúc nào ngay khi đã định nghĩa hoặc thêm cột đó vào 1 Column family. VD, nếu cột coupon_code lưu mã phiếu giảm giá dưới dạng số nguyên thì có thể đổi loại hợp lệ của cột như sau:

cqlsh> ALTER TABLE users ALTER coupon_code TYPE int;

Xác định thời hạn cột bằng TTL

Cả lệnh INSERT và UPDATE đều hỗ trợ cài đặt thời hạn cột (TTL). Nếu muốn kéo dài thời hạn cột chẳng hạn từ 1 ngày lên 5 ngày, có thể sử dụng lệnh UPDATE như sau:

cqlsh> UPDATE users USING TTL 432000 SET 'password' = 'ch@ngem3a' WHERE KEY = 'jsmith';

Loại bỏ siêu cột

Nếu muốn loại bỏ hoàn toàn 1 siêu cột, bao gồm cả tên cột và dạng dữ liệu hợp lệ, có thể sử dụng lệnh ALTER TABLE <columnFamily> DROP <column>. Lệnh sau loại bỏ tên và giá trị hợp lệ trong cột mà không làm ảnh hưởng hay xoá bỏ dữ liệu hiện có:

Sau khi chạy lệnh này, máy khách vẫn có thể chèn thêm cột với tên coupon_code vào Column family users nhưng sẽ không hợp lệ cho đến khi một dạng hợp lệ mới được định nghĩa.

Đặt chỉ số cho cột

cqlsh có thể được sử dụng để tạo chỉ số thứ cấp hoặc chỉ số giá trị. VD tạo chỉ số ở cột state và birth_year trong Column family người dùng:

cqlsh> CREATE INDEX state_key ON users (state);

cqlsh> CREATE INDEX birth_year_key ON users (birth_year);

Do chỉ số thứ cấp được tạo cho cả 2 cột nên giá trị của chúng có thể được truy vấn trực tiếp như sau:

cqlsh> SELECT * FROM users ... WHERE gender='f' AND ... state='TX' AND

... birth_year='1968';

u'user1' | u'birth_year',1968 | u'gender',u'f' | u'password',u'ch@ngem3' | u'state',u'TX'

Xoá cột và dòng

Cqlsh cung cấp lệnh xoá DELETE để xoá cột hoặc hàng. Vd xoá cột người dùng tượng trưng jsmith’s và toàn bộ hàng jsmith’s.

cqlsh> DELETE session_token FROM users where KEY = 'jsmith'; cqlsh> DELETE FROM users where KEY = 'jsmith';

Loại bỏ Column family và keyspace

Có thể loại bỏ Column family và keyspace bằng lệnh cqlsh giống như loại bỏ bảng và dữ liệu ở các mẫu liên quan. VD lệnh loại bỏ Column family users rồi loại bỏ keyspace

twissandra:

cqlsh> DROP COLUMNFAMILY users; cqlsh> DROP KEYSPACE twissandra;

Một phần của tài liệu BÀI TẬP LỚN MÔN CƠ SỞ DỮ LIỆU NÂNG CAO SO SÁNH CƠ SỞ DỮ LIỆU AMAZON DYNAMO VÀ APACHE CASSANDRA (Trang 33)