hiveQL Select Order By

本文介绍 SQL 中 ORDER BY 子句的使用方法及示例,通过具体案例展示如何根据某一列对查询结果进行升序或降序排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章介绍了如何使用SELECT语句的ORDER BY子句。ORDER BY子句用于检索基于一列的细节并设置排序结果按升序或降序排列。

语法

下面给出的是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];

示例

让我们举个SELECT ... ORDER BY子句的例子。假设员工表,如下Id, Name, Salary, Designation, 和 Dept 的字段,生成一个查询用于检索员工的详细信息。

+------+--------------+-------------+-------------------+--------+

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

+------+--------------+-------------+-------------------+--------+

下面是使用上述业务情景查询检索员工详细信息:

hive> SELECT Id, Name, Dept FROM employee ORDER BY DEPT;

成功执行查询后,能看到以下回应:

+------+--------------+-------------+-------------------+--------+

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

+------+--------------+-------------+-------------------+--------+

JDBC 程序

下面是JDBC程序应用给定Order By子句的例子。

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

   }}

保存程序在一个名为HiveQLOrderBy.java文件。使用下面的命令来编译并执行这个程序。

$ javac HiveQLOrderBy.java

$ java HiveQLOrderBy

输出

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

05-06
### HiveQL 使用指南和语法示例 #### 1. HiveQL 基础概念 HiveQL 是一种类似于 SQL 的查询语言,专为大规模数据分析而设计。它允许用户通过简单的 SQL 风格语句来查询、汇总和分析存储在分布式文件系统上的数据[^1]。 #### 2. 创建数据库与表结构 以下是创建数据库和表的基本语法: ```sql -- 创建数据库 CREATE DATABASE IF NOT EXISTS my_database; -- 切换至指定数据库 USE my_database; -- 创建外部表 (External Table) CREATE EXTERNAL TABLE IF NOT EXISTS employees ( id INT, name STRING, salary FLOAT, department STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/path/to/data'; ``` 此代码片段展示了如何定义一个名为 `employees` 的外部表,并指定了字段分隔符以及数据存储路径[^2]。 #### 3. 数据加载与查询 向 Hive 表中加载数据并执行基础查询的操作如下所示: ```sql -- 加载本地文件到表中 LOAD DATA LOCAL INPATH '/local/path/employee_data.csv' INTO TABLE employees; -- 查询员工工资大于等于5000的记录 SELECT * FROM employees WHERE salary >= 5000; ``` 这里演示了从本地磁盘上传 CSV 文件到 Hive 中的方法,同时也给出了筛选条件的一个简单例子[^2]。 #### 4. 复杂查询操作 对于复杂的业务逻辑,可以通过 JOIN 和 GROUP BY 来实现跨表关联计算或者聚合统计等功能: ```sql -- 连接两个表格获取部门名称对应的平均薪资水平 SELECT e.department, AVG(e.salary) as avg_salary FROM employees e JOIN departments d ON e.department = d.dept_name GROUP BY e.department ORDER BY avg_salary DESC; ``` 上述脚本实现了基于部门维度求取每位成员所属单位内的薪酬均值排序展示过程。 #### 5. 特殊特性支持 除了常规的关系型数据库功能外,HiveQL 提供了一些额外的支持选项比如分区(partitioning),这有助于提高查询效率;还有桶(bucketing), 它能进一步优化抽样性能等问题解决途径: ```sql -- 创建带分区的内部表 CREATE TABLE sales ( order_id BIGINT, customer_id STRING, product STRING, amount DOUBLE ) PARTITIONED BY (year INT, month INT); -- 插入带有特定年份月份的数据 INSERT INTO TABLE sales PARTITION(year=2023,month=7) VALUES(1,'CUST_001','Laptop',999); ``` 以上部分说明了当面对时间序列类型的大规模历史积累资料管理时所采用的技术手段之一——即利用 partition 功能降低扫描范围从而加快检索速度的效果体现方式[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值