Ví dụ truy vấn HBase: Các lệnh put(), get() và scan()
⚡ Tóm tắt thông minh
Các lệnh put, get và scan của HBase là các lệnh cốt lõi để ghi và đọc dữ liệu, cho phép bạn lưu trữ giá trị ô theo hàng và cột, lấy một hàng duy nhất hoặc duyệt nhiều hàng từ giao diện dòng lệnh. Java API.
Ghi dữ liệu vào bảng HBase: Shell
Các ví dụ này giả định rằng HBase là đã được cài đặt và đang chạy, cửa sổ dòng lệnh HBase đang mở và một bảng có tên guru99 Đã tồn tại với các nhóm chuyên gia về giáo dục và các dự án.
Lệnh `put` được sử dụng để lưu trữ dữ liệu vào một bảng.
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
Lệnh này được sử dụng cho các mục đích sau:
- Nó sẽ đặt một 'giá trị' của ô vào một bảng hoặc hàng hoặc cột được xác định hoặc chỉ định.
- Nó sẽ tùy chọn phối hợp việc ghi lại dấu thời gian.
Ví dụ, ở đây chúng ta đang nhập các giá trị vào bảng “guru99” ở hàng r1 và cột c1:
hbase> put 'guru99', 'r1', 'c1', 'value', 10
Chúng tôi đã nhập ba giá trị 10, 15 và 30 vào bảng “guru99”, như thể hiện trong ảnh chụp màn hình bên dưới.
Giả sử bảng “guru99” có một tham chiếu bảng, chẳng hạn như g. Bạn cũng có thể chạy lệnh trên tham chiếu bảng như sau:
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
Kết quả hiển thị như trong ảnh chụp màn hình phía trên sau khi nhập giá trị vào “guru99”.
Đọc dữ liệu từ bảng HBase: Shell
Trong phần này, chúng ta sẽ kiểm tra những điều sau đây: Vỏ HBase:
- Các giá trị được chèn vào bảng HBase “guru99”.
- Tên cột với các giá trị hiện có trong bảng HBase guru99.
Kết quả quét bên dưới liệt kê mọi giá trị được chèn vào "guru99", cùng với tên hàng và cột tương ứng:
Từ ảnh chụp màn hình trên, ta có thể suy ra những điều sau:
- Nếu ta chạy lệnh “scan” trong HBase shell, nó sẽ hiển thị các giá trị đã được chèn vào “guru99” như sau.
- Trong cửa sổ dòng lệnh HBase, nó sẽ hiển thị các giá trị được chèn bởi mã của chúng ta, cùng với tên cột và tên hàng.
- Ở đây, chúng ta có thể thấy tên các cột được chèn vào là “giáo dục” và “dự án”.
- Các giá trị được chèn vào các cột đã đề cập là “BigData” và “HBase Tutorials”.
Bạn cũng có thể sử dụng lệnh get để đọc dữ liệu từ một bảng.
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
Ở đây, các tham số bổ sung bao gồm TIMESTAMP, TIMESTAMP, VERSIONS và FILTERS. Sử dụng lệnh này, bạn sẽ nhận được một hàng hoặc nội dung ô có trong bảng. Bạn có thể thêm các tham số bổ sung, chẳng hạn như TIMESTAMP, TIMERANGE, VERSIONS hoặc FILTERS, để lấy một hàng hoặc nội dung ô cụ thể. Bảng dưới đây tóm tắt các tham số này:
| Tham số | Mục đích |
|---|---|
| KHOẢNG THỜI GIAN | Trả về các ô có dấu thời gian nằm trong khoảng thời gian bắt đầu và kết thúc. |
| THỜI GIAN | Chỉ trả về phiên bản ô được lưu trữ tại một thời điểm chính xác. |
| PHIÊN BẢN | Thiết lập số lượng phiên bản của một ô cần trả về (mặc định là 1). |
| LỌC | Áp dụng bộ lọc để giới hạn các hàng hoặc cột được trả về. |
| CỘT | Giới hạn kết quả chỉ trong các nhóm cột hoặc bộ lọc cụ thể. |
Dưới đây là một số ví dụ minh họa về lệnh get:
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
Đối với bảng “guru99”, các giá trị ở hàng r1 và cột c1 sẽ được hiển thị bằng lệnh này, như trong ảnh chụp màn hình bên dưới.
hbase> get 'guru99', 'r1'
Đối với bảng “guru99”, các giá trị ở hàng r1 sẽ được hiển thị bằng lệnh này.
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
Đối với bảng “guru99”, các giá trị ở hàng r1 trong khoảng thời gian từ ts1 đến ts2 sẽ được hiển thị bằng lệnh này.
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
Đối với bảng “guru99”, các giá trị của hàng r1 và các nhóm cột c1, c2 và c3 sẽ được hiển thị bằng lệnh này.
Ghi dữ liệu vào bảng HBase: API JAVA
Ở bước này, chúng ta sẽ ghi dữ liệu vào bảng HBase “guru99”.
Đầu tiên, chúng ta phải viết mã để chèn và truy xuất giá trị từ HBase, sử dụng chương trình HBaseLoading.java. Để tạo và chèn giá trị vào bảng ở cấp độ cột, bạn sẽ viết mã như được hiển thị bên dưới.
Ảnh chụp màn hình bên dưới hiển thị Java Đoạn mã xây dựng cấu hình HBase và chèn giá trị vào “guru99”:
Từ ảnh chụp màn hình phía trên:
- Khi chúng ta tạo cấu hình HBase, nó sẽ trỏ đến bất kỳ cấu hình nào chúng ta đã thiết lập trong các tệp hbase-site.xml và hbase-default.xml trong quá trình cài đặt HBase.
- Tạo bảng “guru99” bằng phương thức HTable.
- Thêm hàng 1 vào bảng “guru99”.
- Chỉ định tên cột là “giáo dục” và “dự án” và chèn giá trị vào các tên cột tương ứng trong hàng 1. Các giá trị được chèn ở đây là BigData và “HBaseTutorials”.
Đọc dữ liệu từ bảng HBase: Java API
Bất kỳ giá trị nào chúng ta đã nhập vào bảng HBase ở phần trên, ở đây chúng ta sẽ truy xuất và hiển thị các giá trị đó.
Dưới đây là kết quả hiển thị trên bảng điều khiển cho thấy dữ liệu được đọc lại từ bảng HBase “guru99”:
Để truy xuất kết quả được lưu trữ trong “guru99”:
- Ở đây, chúng ta sẽ truy xuất các giá trị được lưu trữ trong các nhóm cột, cụ thể là "giáo dục" và "dự án".
- Sử dụng lệnh “get”, chúng ta sẽ truy xuất các giá trị được lưu trữ trong bảng HBase.
- Quét kết quả bằng lệnh “scan”. Các giá trị được lưu trữ trong hàng 1 sẽ hiển thị trên bảng điều khiển.
Sau khi viết xong mã, bạn chạy nó. Java ứng dụng như thế này:
Nhấp chuột phải vào HBaseLoading.java -> Chạy với quyền -> Java Ứng dụng.
Sau khi chạy chương trình “HBaseLoading.java”, các giá trị sẽ được chèn vào biến “guru99” trong mỗi cột của HBase, và chương trình này cũng có thể truy xuất các giá trị đó.
Đây là mã hoàn chỉnh:
import java.io.IOException; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; public class HBaseLoading { public static void main(String[] args) throws IOException { /* When you create a HBaseConfiguration, it reads in whatever you've set into your hbase-site.xml and in hbase-default.xml, as long as these can be found on the CLASSPATH*/ org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); /*This instantiates an HTable object that connects you to the "test" table*/ HTable table = new HTable(config, "guru99"); /* To add to a row, use Put. A Put constructor takes the name of the row you want to insert into as a byte array.*/ Put p = new Put(Bytes.toBytes("row1")); /*To set the value you'd like to update in the row 'row1', specify the column family, column qualifier, and value of the table cell you'd like to update. The column family must already exist in your table schema. The qualifier can be anything.*/ p.add(Bytes.toBytes("education"), Bytes.toBytes("col1"),Bytes.toBytes("BigData")); p.add(Bytes.toBytes("projects"),Bytes.toBytes("col2"),Bytes.toBytes("HBaseTutorials")); // Once you've adorned your Put instance with all the updates you want to make, to commit it do the following table.put(p); // Now, to retrieve the data we just wrote. Get g = new Get(Bytes.toBytes("row1")); Result r = table.get(g); byte [] value = r.getValue(Bytes.toBytes("education"),Bytes.toBytes("col1")); byte [] value1 = r.getValue(Bytes.toBytes("projects"),Bytes.toBytes("col2")); String valueStr = Bytes.toString(value); String valueStr1 = Bytes.toString(value1); System.out.println("GET: " +"education: "+ valueStr+"projects: "+valueStr1); Scan s = new Scan(); s.addColumn(Bytes.toBytes("education"), Bytes.toBytes("col1")); s.addColumn(Bytes.toBytes("projects"), Bytes.toBytes("col2")); ResultScanner scanner = table.getScanner(s); try { for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { System.out.println("Found row : " + rr); } } finally { // Make sure you close your scanners when you are done! scanner.close(); } } }
Lưu ý về các phiên bản API: Ví dụ trên sử dụng lớp HTable và phương thức add() của nó, phản ánh API máy khách HBase cũ hơn. Từ HBase 1.0 trở đi, HTable đã bị loại bỏ. Mã hiện đại lấy một Table thông qua ConnectionFactory.createConnection(…).getTable(…) và xây dựng một Put với addColumn() thay vì add(). Logic của put, get và scan vẫn giữ nguyên.






