HiveQL - Nerede Seçin

Hive Sorgu Dili (HiveQL), Hive'ın bir Metastore'daki yapılandırılmış verileri işlemesi ve analiz etmesi için kullanılan bir sorgu dilidir. Bu bölüm, SELECT ifadesinin WHERE yan tümcesi ile nasıl kullanılacağını açıklar.

SELECT deyimi, verileri bir tablodan almak için kullanılır. WHERE cümlesi bir koşula benzer şekilde çalışır. Koşulu kullanarak verileri filtreler ve size sonlu bir sonuç verir. Yerleşik operatörler ve işlevler, koşulu yerine getiren bir ifade üretir.

Sözdizimi

Aşağıda, SELECT sorgusunun sözdizimi verilmiştir:

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

Misal

SELECT… WHERE cümlesi için bir örnek alalım. Id, Ad, Maaş, Görev ve Bölüm adlı alanlara sahip, aşağıda verilen çalışan tablosuna sahip olduğumuzu varsayın. 30000 Rs'den fazla maaş kazanan çalışan ayrıntılarını almak için bir sorgu oluşturun.

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

Aşağıdaki sorgu, yukarıdaki senaryoyu kullanarak çalışan ayrıntılarını alır:

hive> SELECT * FROM employee WHERE salary>30000;

Sorgunun başarıyla yürütülmesi üzerine aşağıdaki yanıtı görürsünüz:

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

Verilen örnek için nerede maddesinin uygulanacağı JDBC programı aşağıdaki gibidir.

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();
   }
}

Programı HiveQLWhere.java adlı bir dosyaya kaydedin. Bu programı derlemek ve çalıştırmak için aşağıdaki komutları kullanın.

$ javac HiveQLWhere.java
$ java HiveQLWhere

Çıktı:

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