Cassandra - Báo cáo hàng loạt
Sử dụng Báo cáo hàng loạt
Sử dụng BATCH,bạn có thể thực hiện đồng thời nhiều câu lệnh sửa đổi (chèn, cập nhật, xóa). Cú pháp của nó như sau:
BEGIN BATCH
<insert-stmt>/ <update-stmt>/ <delete-stmt>
APPLY BATCH
Thí dụ
Giả sử có một bảng trong Cassandra được gọi là emp có dữ liệu sau:
emp_id | emp_name | emp_city | emp_phone | emp_sal |
---|---|---|---|---|
1 | ram | Hyderabad | 9848022338 | 50000 |
2 | robin | Delhi | 9848022339 | 50000 |
3 | rahman | Chennai | 9848022330 | 45000 |
Trong ví dụ này, chúng tôi sẽ thực hiện các thao tác sau:
- Chèn một hàng mới với các chi tiết sau (4, rajeev, pune, 9848022331, 30000).
- Cập nhật lương của nhân viên có id hàng 3 thành 50000.
- Xóa thành phố của nhân viên có id hàng 2.
Để thực hiện các thao tác trên trong một lần, hãy sử dụng lệnh BATCH sau:
cqlsh:tutorialspoint> BEGIN BATCH
... INSERT INTO emp (emp_id, emp_city, emp_name, emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000);
... UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;
... DELETE emp_city FROM emp WHERE emp_id = 2;
... APPLY BATCH;
xác minh
Sau khi thực hiện các thay đổi, hãy xác minh bảng bằng câu lệnh SELECT. Nó sẽ tạo ra kết quả sau:
cqlsh:tutorialspoint> select * from emp;
emp_id | emp_city | emp_name | emp_phone | emp_sal
--------+-----------+----------+------------+---------
1 | Hyderabad | ram | 9848022338 | 50000
2 | null | robin | 9848022339 | 50000
3 | Chennai | rahman | 9848022330 | 50000
4 | Pune | rajeev | 9848022331 | 30000
(4 rows)
Ở đây bạn có thể quan sát bảng với dữ liệu đã sửa đổi.
Batch Statements sử dụng Java API
Các câu lệnh hàng loạt có thể được viết theo chương trình trong một bảng bằng cách sử dụng phương thức execute () của lớp Session. Làm theo các bước dưới đây để thực thi nhiều câu lệnh bằng cách sử dụng câu lệnh lô với sự trợ giúp của Java API.
Bước 1: Tạo một đối tượng cụm
Tạo một phiên bản của Cluster.builder lớp com.datastax.driver.core gói như hình dưới đây.
//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();
Thêm điểm liên hệ (địa chỉ IP của nút) bằng cách sử dụng addContactPoint() phương pháp của Cluster.Buildervật. Phương thức này trả vềCluster.Builder.
//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
Sử dụng đối tượng trình tạo mới, tạo một đối tượng cụm. Để làm như vậy, bạn có một phương thức được gọi làbuild() bên trong Cluster.Builderlớp học. Sử dụng mã sau để tạo đối tượng cụm:
//Building a cluster
Cluster cluster = builder.build();
Bạn có thể xây dựng đối tượng cụm bằng một dòng mã như hình dưới đây.
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
Bước 2: Tạo một đối tượng phiên
Tạo một thể hiện của đối tượng Session bằng phương thức connect () của lớp Cluster như hình bên dưới.
Session session = cluster.connect( );
Phương thức này tạo một phiên mới và khởi tạo nó. Nếu bạn đã có một keyspace, thì bạn có thể đặt nó thành keyspace hiện có bằng cách chuyển tên KeySpace ở định dạng chuỗi vào phương thức này như được hiển thị bên dưới.
Session session = cluster.connect(“ Your keyspace name ”);
Ở đây chúng tôi đang sử dụng KeySpace có tên tp. Do đó, hãy tạo đối tượng phiên như hình dưới đây.
Session session = cluster.connect(“tp”);
Bước 3: Thực thi truy vấn
Bạn có thể thực hiện các truy vấn CQL bằng cách sử dụng phương thức execute () của lớp Session. Truyền truy vấn ở định dạng chuỗi hoặc dưới dạng đối tượng lớp Statement đến phương thức execute (). Bất cứ điều gì bạn chuyển đến phương thức này ở định dạng chuỗi sẽ được thực thi trêncqlsh.
Trong ví dụ này, chúng tôi sẽ thực hiện các thao tác sau:
- Chèn một hàng mới với các chi tiết sau (4, rajeev, pune, 9848022331, 30000).
- Cập nhật lương của nhân viên có id hàng 3 thành 50000.
- Xóa thành phố của nhân viên có id hàng 2.
Bạn phải lưu trữ truy vấn trong một biến chuỗi và chuyển nó vào phương thức execute () như hình dưới đây.
String query1 = ” BEGIN BATCH INSERT INTO emp (emp_id, emp_city, emp_name, emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000);
UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;
DELETE emp_city FROM emp WHERE emp_id = 2;
APPLY BATCH;”;
Dưới đây là chương trình hoàn chỉnh để thực thi nhiều câu lệnh đồng thời trên một bảng trong Cassandra bằng cách sử dụng Java API.
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
public class Batch {
public static void main(String args[]){
//query
String query =" BEGIN BATCH INSERT INTO emp (emp_id, emp_city,
emp_name, emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000);"
+ "UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;"
+ "DELETE emp_city FROM emp WHERE emp_id = 2;"
+ "APPLY BATCH;";
//Creating Cluster object
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
//Creating Session object
Session session = cluster.connect("tp");
//Executing the query
session.execute(query);
System.out.println("Changes done");
}
}
Lưu chương trình trên với tên lớp theo sau là .java, duyệt đến vị trí lưu nó. Biên dịch và thực thi chương trình như hình dưới đây.
$javac Batch.java $java Batch
Trong điều kiện bình thường, nó sẽ tạo ra sản lượng sau:
Changes done