HiveQL - Chọn ở đâu

Ngôn ngữ truy vấn Hive (HiveQL) là ngôn ngữ truy vấn để Hive xử lý và phân tích dữ liệu có cấu trúc trong Metastore. Chương này giải thích cách sử dụng câu lệnh SELECT với mệnh đề WHERE.

Câu lệnh SELECT được sử dụng để lấy dữ liệu từ bảng. Mệnh đề WHERE hoạt động tương tự như một điều kiện. Nó lọc dữ liệu bằng cách sử dụng điều kiện và cung cấp cho bạn một kết quả hữu hạn. Các toán tử và hàm tích hợp tạo ra một biểu thức đáp ứng điều kiện.

Cú pháp

Dưới đây là cú pháp của truy vấn SELECT:

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];

Thí dụ

Hãy để chúng tôi lấy một ví dụ cho mệnh đề SELECT… WHERE. Giả sử chúng ta có bảng nhân viên như được đưa ra bên dưới, với các trường có tên Id, Tên, Lương, Chức vụ và Phòng ban Tạo truy vấn để truy xuất chi tiết nhân viên kiếm được mức lương hơn 30000 Rs.

+------+--------------+-------------+-------------------+--------+
| 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  | 
+------+--------------+-------------+-------------------+--------+

Truy vấn sau truy xuất chi tiết nhân viên bằng cách sử dụng tình huống trên:

hive> SELECT * FROM employee WHERE salary>30000;

Khi thực hiện thành công truy vấn, bạn sẽ thấy phản hồi sau:

+------+--------------+-------------+-------------------+--------+
| 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ương trình JDBC

Chương trình JDBC áp dụng mệnh đề where cho ví dụ đã cho như sau.

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 tệp có tên HiveQLWhere.java. Sử dụng các lệnh sau để biên dịch và thực thi chương trình này.

$ javac HiveQLWhere.java
$ java HiveQLWhere

Đầu ra:

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