HiveQL - Chọn-Đặt hàng Theo
Chương này giải thích cách sử dụng mệnh đề ORDER BY trong câu lệnh SELECT. Mệnh đề ORDER BY được sử dụng để lấy các chi tiết dựa trên một cột và sắp xếp kết quả được thiết lập theo thứ tự tăng dần hoặc giảm dần.
Cú pháp
Dưới đây là cú pháp của mệnh đề ORDER BY:
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[HAVING having_condition]
[ORDER BY col_list]]
[LIMIT number];
Thí dụ
Hãy để chúng tôi lấy một ví dụ cho mệnh đề SELECT ... ORDER BY. Giả sử 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 theo thứ tự bằng cách sử dụng tên Phòng ban.
+------+--------------+-------------+-------------------+--------+
| 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 Id, Name, Dept FROM employee ORDER BY DEPT;
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 |
+------+--------------+-------------+-------------------+--------+
|1205 | Kranthi | 30000 | Op Admin | Admin |
|1204 | Krian | 40000 | Hr Admin | HR |
|1202 | Manisha | 45000 | Proofreader | PR |
|1201 | Gopal | 45000 | Technical manager | TP |
|1203 | Masthanvali | 40000 | Technical writer | TP |
+------+--------------+-------------+-------------------+--------+
Chương trình JDBC
Đây là chương trình JDBC để áp dụng mệnh đề Order By cho ví dụ đã cho.
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveQLOrderBy {
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 ORDER BY DEPT;");
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 HiveQLOrderBy.java. Sử dụng các lệnh sau để biên dịch và thực thi chương trình này.
$ javac HiveQLOrderBy.java
$ java HiveQLOrderBy
Đầu ra:
ID Name Salary Designation Dept
1205 Kranthi 30000 Op Admin Admin
1204 Krian 40000 Hr Admin HR
1202 Manisha 45000 Proofreader PR
1201 Gopal 45000 Technical manager TP
1203 Masthanvali 40000 Technical writer TP
1204 Krian 40000 Hr Admin HR