文档章节

大数据学习笔记-------------------(28)

henni_719
 henni_719
发布于 2017/03/14 17:24
字数 1522
阅读 5
收藏 0

第28章 HIVEQL

HIVEQL(HIVEQuery Language:Hive查询语言)是一种查询语言,该语言为Hive处理并分析Metastore的结构数据。

28.1查询语句(SELECT ...WHERE)

SELECT语句被用于检索表中的数据。WHERE子句的工作原理类似于条件。它用条件过滤数据并给出一个有限结果。内置的运算符和函数生成一个满足条件的表达式。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];

28.1.1查询语句实例

根据emp表,生成一个查询来检索薪资大于30000的用户详细信息。执行如下查询检索薪资大于30000的员工详细信息:SELECT * FROM emp WHEREsalary>30000; 执行语句成功后,会获取如下:


28.1.2JDBC查询语句实例

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:9000/hive", "", "");
		// create statement
		Statement stmt = con.createStatement();
		// execute statement
		Resultset res = stmt.executeQuery("SELECT * FROM emp 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();
	}
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">      </span>

保存程序到文件HiveQLWhere.java文件中,执行如下语句进行编译和运行程序:

$ javac HiveQLWhere.java

$ java HiveQLWhere

28.2查询语句(SELECT...ORDER BY)

ORDERBY子句被用来检索基于一列且对结果进行升序或将序的详细信息。语法如下:

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

28.2.1ORDER BY查询语句实例

 根据emp表,生成一个查询来检索以dept进行排序的用户详细信息。执行如下查询检索员工详细信息:

SELECT eid,ename,dept FROMemp ORDER BY dept;

执行语句成功后,会获取如下:


28.2.2JDBC 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:9000/hive", "", "");
		// create statement
		Statement stmt = con.createStatement();
		// execute statement
		Resultset res = stmt.executeQuery("SELECT * FROM emp 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

28.3查询语句(GROUP BY)

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

28.3.1GROUP BY查询语句实例

根据emp表,生成一个查询来检索以dept进行分组的用户详细信息。执行如下查询检索员工详细信息:

SELECT dept  AS Dept,count(*) AS  DeptNum FROM emp GROUP BY dept;

执行语句成功后,会获取如下:


28.3.2JDBC GROUP BY查询语句实例

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveQLGroupBy
{
	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:9000/hive", "", "");
		// create statement
		Statement stmt = con.createStatement();
		//execute statement
		Resultset res = stmt.executeQuery("SELECT Dept,count(*)"
			+"FROM employee GROUP BY DEPT; "");
		System.out.println(" Dept \t count(*)");
		while (res.next())
		{
		System.out.println(res.getString(1)+" "+ res.getInt(2));
		}
		con.close();
	}
}<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">     </span>

保存程序到文件HiveQLGroupBy.java文件中,执行如下语句进行编译和运行程序:

$ javac HiveQLGroupBy.java

$ java HiveQLGroupBy

28.4查询语句(JOIN)

JOINS是一个子句,用于通过使用每个表的公共值来组合两个表的特定字段。它用于组合数据库中两个或多个表的记录。它或多或少类似于SQLJOINS。语法:

join_table: 
	table_reference JOIN table_factor [join_condition] 
	| table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference 
	join_condition 
	| table_reference LEFT SEMI JOIN table_reference join_condition 
	| table_reference CROSS JOIN table_reference [join_condition]

28.4.1JOIN查询语句实例

创建一个名为CUSTOMERS的表格,并插入输入,然后验证数据是否插入成功,执行语句和数据如下所示:


创建一个名为ORDERS表,并插入数据,然后验证数据是否插入成功,执行语句如下和查询结果显示如下:


JOIN的类型如下所示:JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN

28.4.1.1 JOIN

JOIN子句备用做联合和检索多个表格的记录。JOIN和SQL中的OUTER JOIN的类似。使用表的主键和外键来提高JOIN条件。

 执行查询用来执行CUSTOMER和ORDER 表的JOIN,检索记录如下,执行语句如下:

SELECT c.ID, c.NAME, c.AGE, o.AMOUNT 
FROM CUSTOMERS c JOIN ORDERS o 
ON (c.ID = o.CUSTOMER_ID);

执行成功,显示信息如下:


28.4.1.2 左连接(LEFEOUTER JOIN)

HiveQLLEFT OUTER JOIN返回左连接表的所有行,即使右表没有任何匹配。如果ON子句匹配右表中的0(零)记录,则JOIN仍然在结果中返回一行,但在右表的每列中返回NULL。一个左连接(LEFTJOIN)返回左表的所有值,加上右表匹配的值,或如果没有匹配的JOIN谓词,则为NULL。以下查询演示CUSTOMERORDER表之间的LEFT OUTER JOIN

SELECT c.ID, c.NAME, o.AMOUNT, o.DATE 
FROM CUSTOMERS c 
LEFT OUTER JOIN ORDERS o 
ON (c.ID = o.CUSTOMER_ID);

28.4.1.3 右连接(RIGHTOUTER JOIN)

HiveQLRIGHT OUTER JOIN返回右表中的所有行,即使左表中没有匹配项。如果ON子句与左表中的0(零)记录匹配,则JOIN仍返回结果中的一行,但在左表的每列中都为NULLRIGHTJOIN返回右表中的所有值,加上左表中匹配的值,或者在没有匹配连接谓词的情况下返回NULL。以下查询演示CUSTOMERORDER表之间的RIGHTOUTER JOIN

SELECT c.ID, c.NAME, o.AMOUNT, o.DATE 
FROM CUSTOMERS c 
RIGHT OUTER JOIN ORDERS o 
ON (c.ID = o.CUSTOMER_ID);

执行结果如下:

      

28.4.1.4 全连接(FULLOUTER JOIN)

         HiveQLFULL OUTER JOIN组合满足JOIN条件的左侧和右侧外表的记录。 联接表包含来自这两个表的所有记录,或者在任一侧填充NULL值用于缺少匹配。以下查询演示CUSTOMERORDERS表之间的FULLOUTER JOIN

SELECT c.ID, c.NAME, o.AMOUNT, o.DATE 
FROM CUSTOMERS c 
FULL OUTER JOIN ORDERS o 
ON (c.ID = o.CUSTOMER_ID);

执行结果如下:


      

本文转载自:http://blog.csdn.net/henni_719/article/details/52980567

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
20天,碎片化时间,266页西瓜书。大神笔记拿走,快速学起来

     五一小长假前,大数据文摘发起了打卡学习活动,收到了读者朋友的积极响应,也成了氛围良好的学习社区。目前,第三轮打卡学习活动即将接近尾声,文摘菌带大家一起来感受打卡学习社区...

大数据文摘
2018/05/13
0
0
AI角 | 把吴恩达深度学习系列课程画出来,这有份诚意满满的笔记求查收

在吴恩达机器学习系列课程完结后不久,一位名叫Tess Ferrandez的小姐姐在推特上分享了一套自己的课程笔记,瞬间收获了3k+赞和1k+转发。 不同于满屏公式代码的黑白笔记,这套信息图不仅知识点...

技术小能手
2018/03/19
0
0
BitMap 的基本原理和实现

前言 文章是自己写了后先发到了公众号里,再转到了内部的KM。算是一个系列的学习笔记,一篇篇来。 本篇是大数据算法系列 第一篇《BitMap的原理和实现》,BitMap 的思想的和原理是很多算法的基...

大数据之路
2012/09/04
218
0
把吴恩达深度学习系列课程画出来,这有份诚意满满的笔记求查收

     大数据文摘作品   在吴恩达机器学习系列课程完结后不久,一位名叫Tess Ferrandez的小姐姐在推特上分享了一套自己的课程笔记,瞬间收获了3k+赞和1k+转发。   不同于满屏公式代码...

大数据文摘
2018/03/19
0
0
只看视频不动手的你可能学了门假课程,李飞飞计算机视觉成名作斯坦福CS231n作业详解重磅来袭!

大数据文摘作品 看完视频并不是真正的学习了一遍,更重要的是写作业、动手实践、讨论,这才能把学到的知识真正掌握住。看完斯坦福CS231n的公开课,是不是觉得还不够过瘾?快来和文摘菌一起写...

大数据文摘
2018/01/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
5
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
8
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部