Loạt bài về HiveQL đã là phần cuối trong series Hive rồi, có lẽ sau khi xong HiveQL thì mình sẽ làm thêm 1 vài bài về Hive để giải đáp một số câu hỏi và thắc mắc thường gặp về Hive, một số hướng dẫn và nguồn hữu ích…. nữa. Cùng đón chờ nhé!
1. Select-Where
Ngôn ngữ truy vấn Hive – Hive Query Language (HiveQL) – là một ngôn ngữ truy vấn dành cho Hive để tiến hành và phân tích dữ liệu có cấu trúc trong một Metastore. Phần này sẽ giải thích cách để sử dụng câu lệnh SELECT với mệnh đề WHERE.
Câu lệnh SELECT thường được dùng để lấy dữ liệu từ một bảng. Mệnh đề WHERE làm việc tương tự một điều kiện. Nó lọc dữ liệu sử dụng điều kiện và trả lại cho bạn một kết quả có giới hạn. Toán tử và hàm có sẵn tạo ra một biểu thức đáp ứng điều kiện.
Syntax
Cho bên dưới đây là cú pháp của câu truy vấn SELECT:
1 2 3 4 5 6 7 8 | SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [HAVING having_condition] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]] [LIMIT number]; |
Example
Chúng ta sẽ lấy một ví dụ cho mệnh đề SELECT…WHERE. Giả sử rằng chúng ta có bảng employee như bên dưới, cùng với các trường: Id, Name, Salary, Designation, và Dept. Tạo ra một câu truy vấn để lấy chi tiết về nhân viên có lương nhiều hơn 3000Rs.
1 2 3 4 5 6 7 8 9 10 | +------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali | 40000 | Technical writer | TP | |1204 | Krian | 40000 | Hr Admin | HR | |1205 | Kranthi | 30000 | Op Admin | Admin | +------+--------------+-------------+-------------------+--------+ |
Câu truy vấn sau lấy chi tiết của nhân viên sử dụng điều kiện bên dưới:
1 2 | hive> SELECT * FROM employee WHERE salary>30000; |
Khi thực thi thành công câu truy vấn, bạn sẽ nhận được response sau đây:
1 2 3 4 5 6 7 8 9 | +------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali | 40000 | Technical writer | TP | |1204 | Krian | 40000 | Hr Admin | HR | +------+--------------+-------------+-------------------+--------+ |
JDBC Program
JDBC Program để áp dụng mệnh đề where cho ví dụ đã cho như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveQLWhere { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement Resultset res = stmt.executeQuery("SELECT * FROM employee WHERE salary>30000;"); System.out.println("Result:"); System.out.println(" ID t Name t Salary t Designation t Dept "); while (res.next()) { System.out.println(res.getInt(1) + " " + res.getString(2) + " " + res.getDouble(3) + " " + res.getString(4) + " " + res.getString(5)); } con.close(); } } |
Lưu chương trình trong một file có tên HiveQLWhere.java. Sử dụng câu lệnh sau để compile và thực thi chương trình:
1 2 3 | $ javac HiveQLWhere.java $ java HiveQLWhere |
Output:
1 2 3 4 5 6 | ID Name Salary Designation Dept 1201 Gopal 45000 Technical manager TP 1202 Manisha 45000 Proofreader PR 1203 Masthanvali 40000 Technical writer TP 1204 Krian 40000 Hr Admin HR |
.
Chủ đề tiếp theo sẽ là SELECT…ORDER BY.