HiveQL - Wybierz-Zamów według
W tym rozdziale wyjaśniono, jak używać klauzuli ORDER BY w instrukcji SELECT. Klauzula ORDER BY służy do pobierania szczegółów na podstawie jednej kolumny i sortowania zestawu wyników w kolejności rosnącej lub malejącej.
Składnia
Poniżej podano składnię klauzuli 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];
Przykład
Weźmy przykład dla klauzuli SELECT ... ORDER BY. Załóż tabelę pracowników, jak podano poniżej, z polami o nazwach Identyfikator, Imię i nazwisko, Wynagrodzenie, Oznaczenie i Dział. Wygeneruj zapytanie, aby pobrać dane pracownika w kolejności, używając nazwy działu.
+------+--------------+-------------+-------------------+--------+
| 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 |
+------+--------------+-------------+-------------------+--------+
Następujące zapytanie pobiera dane pracownika przy użyciu powyższego scenariusza:
hive> SELECT Id, Name, Dept FROM employee ORDER BY DEPT;
Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:
+------+--------------+-------------+-------------------+--------+
| 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 |
+------+--------------+-------------+-------------------+--------+
Program JDBC
Oto program JDBC do zastosowania klauzuli Order By dla podanego przykładu.
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();
}
}
Zapisz program w pliku o nazwie HiveQLOrderBy.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.
$ javac HiveQLOrderBy.java
$ java HiveQLOrderBy
Wynik:
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