- 浏览: 353387 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
希恩杰:
采样器的目的是啥?使数据均匀分布到所有分区?使key的数量均匀 ...
Hadoop深入学习:Hadoop全排序中的Sampler采样器 -
lawlietwf:
三篇文章中有两篇链接地址一样,po主看下
Hadoop中的快速排序算法 -
坏小四:
...
《Hbase权威指南》深入学习hbase:表,列族,列标识,版本和cell -
fbwfbi:
发现使用pika-0.9.13的版本依然出错:Tracebac ...
RabbitMQ:使用python发布/订阅消息 -
hehu158:
centos6.5 chmod +x qq2012.tra.g ...
CentOS 6.4安装qq2012
前几章已经学习过Hive表的定义和数据操纵,本章我们开始学习HiveQL查询。
SELECT ... FROM ...查询
SELECT在SQL中是一个投影操作。让我们从新来看之前定义过的分区表employees:
SELECT查询:
用户也可以给FROM之后的表,视图或子查询起一个别名,如:
上面两个HiveQL语句是相同的,给表起别名在JOIN操作中特别有用。
下面我们来看如何查询employees表中的集合类型的数据。我们先看一下如何查询ARRAY类型的数据,如employees表的下属“subordinates”
再看MAP类型的查询,如“deductions”:
再看STRUCT类型的查询,如“address”:
接下来我们再看如何查看集合性属性字段中的数据:
使用正则表达式查询符合条件的列
在Hive查询中,用户可以使用正则表达式查询符合条件的列,下面的实例中就是使用正则表达式的使用用例,可以查询到symbol列和所有以“price”开头的列:
列计算
在HiveQL中,用户不但可以从表中查询某些列,还可以通过函数或数学表达式来计算列的值。例如,我们可以在employees表中查询雇员的姓名,薪水,联邦税百分百及其他列的值:
Hive是使用JAVA写的开源软件,在函数或数学表达式来计算列的值时类型转型和JAVA的转型相同。
聚合函数
要在HiveQL查询中使用聚合函数,必须先将hive.map.aggr配置参数设置为true,举例如下:
但是将
LIMIT
一次典型的HiveQL查询可能会返回所有符合条件的数据记录,但是LIMIT关键字可以限制返回的记录的条数:
给列奇别名
子查询
给列起别名特别适合与子查询中的列,让我们将上个查询示例修改为子查询的使用用例:
CASE ... WHEN ... THEN语句
CASE ... WHEN ... THEN向标准的SQL语句中一样使用在SELECT列中,对某一个猎德返回值做判断,示例如下:
WHERE过滤条件
SELECT决定返回哪些数据列,而WHERE决定返回那些符合条件的数据:
该示例有一个问题,那就是salary * (1 - deductions["Federal Taxes"])分别在SELECT部分和WHERE部分都执行了,性能上不是多优化。那么,对salary * (1 - deductions["Federal Taxes"])使用别名能否消除这种冲突呢?,不幸的是这是无效的:
如错误信息中所说,用户不能在WHERE部分中引用列的别名,那么我们是否可以使用其他办法来消除这种冲突呢?答案是使用子查询:
SELECT ... FROM ...查询
SELECT在SQL中是一个投影操作。让我们从新来看之前定义过的分区表employees:
CREATE TABLE employees ( name STRING, salary FLOAT, subordinates ARRAY<STRING> COMMENT '下属', deductions MAP<STRING,FLOAT> COMMENT '扣费', address STRUT<street:STRING,city:STRING,state:STRING,zip:INT> ) PARTITIONED BY(country STRING,state STRING);
SELECT查询:
hive> SELECT name,salary FROM employees; John Doe 100000.0 Mary Smith 80000.0 Todd Jones 70000.0 Bill King 60000.0
用户也可以给FROM之后的表,视图或子查询起一个别名,如:
hive> SELECT e.name,e.salary FROM employees e;
上面两个HiveQL语句是相同的,给表起别名在JOIN操作中特别有用。
下面我们来看如何查询employees表中的集合类型的数据。我们先看一下如何查询ARRAY类型的数据,如employees表的下属“subordinates”
hive> SELECT name,subordinates FROM employees; John Doe ["Mary Smith","Todd Jones"] Mary Smith ["Bill King"] Todd Jones [] Bill king []
再看MAP类型的查询,如“deductions”:
hive> SELECT name,deductions FROM employees; John Doe {"Federal Taxes":0.2,"State Taxes":0.05,"Insurance":0.1} Mary Smith {"Federal Taxes":0.2,"State Taxes":0.05,"Insurance":0.1} Todd Jones {"Federal Taxes":0.15,"State Taxes":0.03,"Insurance":0.1} Bill King {"Federal Taxes":0.15,"State Taxes":0.03,"Insurance":0.1}
再看STRUCT类型的查询,如“address”:
hive> SELECT name,address FROM employees; John Doe {"Street":"1 Michign Ave.","city":"Chicago","State":"IL","ZIP":60600} Mary Smith {"Street":"100 Ontario St.","city":"Chicago","State":"IL","ZIP":60601} Todd Jones {"Street":"200 Chicago Ave.","city":"Oak Park","State":"IL","ZIP":60700} Bill King {"Street":"300 Obscure Dr.","city":"Obscuria","State":"IL","ZIP":60100}
接下来我们再看如何查看集合性属性字段中的数据:
hive> SELECT name,subordinates[0],deductions["State Taxes"],address.city FROM employees; John Doe Mary Smith 0.05 Chicago Mary Smith Bill King 0.05 Chicago Todd Jones NULL 0.03 Oak Park Bill King NULL 0.03 Obscuria
使用正则表达式查询符合条件的列
在Hive查询中,用户可以使用正则表达式查询符合条件的列,下面的实例中就是使用正则表达式的使用用例,可以查询到symbol列和所有以“price”开头的列:
hive> SELECT symbol,'price.*' FROM stocks; AAPL 195.69 197.88 194.0 194.12 194.12 AAPL 192.63 196.0 190.85 195.46 195.46 AAPL 196.73 198.37 191.57 192.05 192.05 AAPL 195.17 200.2 194.42 199.23 199.23 AAPL 195.91 196.32 193.38 195.86 195.86 ...
列计算
在HiveQL中,用户不但可以从表中查询某些列,还可以通过函数或数学表达式来计算列的值。例如,我们可以在employees表中查询雇员的姓名,薪水,联邦税百分百及其他列的值:
hive> SELECT upper(name),salary,deductions["Federal Taxes"], > round(salary * (1 - deductions["Federal Taxes"])) > FROM employees; JOHN DOE 100000.0 0.2 80000 MARY SMITH 80000.0 0.2 64000 TODD JONES 70000.0 0.15 59500 BILL KING 60000.0 0.15 51000
Hive是使用JAVA写的开源软件,在函数或数学表达式来计算列的值时类型转型和JAVA的转型相同。
聚合函数
要在HiveQL查询中使用聚合函数,必须先将hive.map.aggr配置参数设置为true,举例如下:
hive> SET hive.map.aggr=true; hibe> SELECT count(*),avg(salary) FROM employees;
但是将
hive.map.aggr设置为true会占用更多的内存。
LIMIT
一次典型的HiveQL查询可能会返回所有符合条件的数据记录,但是LIMIT关键字可以限制返回的记录的条数:
hive> SELECT upper(name),salary,deductions["Federal Taxes"], > round(salary * (1 - deductions["Federal Taxes"])) > FROM employees > LIMIT 2; JOHN DOE 100000.0 0.2 80000 MARY SMITH 80000.0 0.2 64000
给列奇别名
hive> SELECT upper(name),salary,deductions["Federal Taxes"] AS > fed_taxes,round(salary * (1 - deductions["Federal Taxes"])) AS > salary_minus_fed_taxes > FROM employees > LIMIT 2; JOHN DOE 100000.0 0.2 80000 MARY SMITH 80000.0 0.2 64000
子查询
给列起别名特别适合与子查询中的列,让我们将上个查询示例修改为子查询的使用用例:
hive> FROM( > SELECT upper(name),salary,deductions["Federal Taxes"] AS > fed_taxes,round(salary * (1 - deductions["Federal Taxes"])) > AS salary_minus_fed_taxes > FROM employees > ) e > SELECT e.name,e.salary_minus_fed_taxes > WHERE e.salary_minus_fed_taxes > 70000; JOHN DOE 100000.0 0.2 80000
CASE ... WHEN ... THEN语句
CASE ... WHEN ... THEN向标准的SQL语句中一样使用在SELECT列中,对某一个猎德返回值做判断,示例如下:
hive> SELECT name,salary, > CASE > WHEN salary < 50000.0 THEN 'low' > WHEN salary >= 50000.0 AND salary < 70000.0 THEN 'middle' > WHEN salary >= 70000.0 AND salay < 100000.0 THEN 'high' ELSE 'very high' > END AS bracket FROM employees; John Doe 100000.0 very high Mary Smith 80000.0 high Todd Jones 70000.0 high Bill King 60000.0 middle Boss Man 200000.0 very high Fred Finance 150000.0 very high Stcy Accountant 60000.0 middle
WHERE过滤条件
SELECT决定返回哪些数据列,而WHERE决定返回那些符合条件的数据:
hive> SELECT name,salary,deductions["Federal Taxes"], > salary * (1 - deductions["Federal Taxes"]) > FROM employees > WHERE round(salary * (1 - deductions["Federal Taxes"])) > > 70000; John Doe 100000.0 0.2 80000.0
该示例有一个问题,那就是salary * (1 - deductions["Federal Taxes"])分别在SELECT部分和WHERE部分都执行了,性能上不是多优化。那么,对salary * (1 - deductions["Federal Taxes"])使用别名能否消除这种冲突呢?,不幸的是这是无效的:
hive> SELECT name,salary,deductions["Federal Taxes"], > salary * (1 - deductions["Federal Taxes"]) AS > salary_minus_fed_taxes > FROM employees > WHERE round(salary_minus_fed_taxes) > 70000; FAILED:Error in semantic analysis: Line 4:13 Invalid table alias or colomn reference 'salary_minus_fed_taxes': (possible colomn names are: name,salary,subordinates,deductions,address)
如错误信息中所说,用户不能在WHERE部分中引用列的别名,那么我们是否可以使用其他办法来消除这种冲突呢?答案是使用子查询:
hive> SELECT e.* FROM > (SELECT name,salary,deductions["Federal Taxes"] AS ded, > salary * (1 - deductions["Federal Taxes"]) AS > salary_minus_fed_taxes > FROM employees) e > WHERE round(salary_minus_fed_taxes) > 70000;
发表评论
-
CentOS 6.4 hadoop集成 Hbase Hive
2013-07-10 00:05 2284在之前的CentOS 5.4 hadoop集 ... -
CentOS 6.4 hadoop集成Hive
2013-07-09 01:58 2362在本节中,我们来学习如何安装Hive。在之前我 ... -
深入学习《Programing Hive》:Tuning
2013-05-20 12:07 4080HiveQL是一种 ... -
深入学习《Programing Hive》:模式设计(Schema Design)
2013-05-19 23:00 2175对那些使用传统数据库的用户来说,Hive看上去 ... -
深入学习《Programing Hive》:Hive自定义函数之GenericUDF
2013-05-18 15:39 0上节我们学习了如何实现自己的用户自定义函数, ... -
深入学习《Programing Hive》:Hive自定义函数之UDF
2013-05-18 15:29 7047为了满足用户的个性化需求,Hive被设计成了一 ... -
深入学习《Programing Hive》:RCFile
2013-05-17 17:41 3488在当前的基 ... -
深入学习《Programing Hive》:数据压缩
2013-05-17 15:19 2683Hive使用的 ... -
深入学习《Programing Hive》:HiveQL索引
2013-05-16 17:49 3391Hive提供有限的索引功能,这不像传统的关系型 ... -
深入学习《Programing Hive》:HiveQL查询(3)
2013-05-15 15:02 2088DISTRIBUTE BY ... -
深入学习《Programing Hive》:HiveQL查询(2)
2013-05-15 13:07 5125浮点比较陷阱 在WHERE查询 ... -
深入学习《Programing Hive》:数据操纵DML(Data Manipulation Language)
2013-05-14 17:27 3750本节继续讨 ... -
深入学习《Programing Hive》:Hive的DDL数据定义操作
2013-05-07 23:24 1882在上一节《深入学习《Programing H ... -
深入学习《Programing Hive》:Hive的数据模型(表)
2013-05-07 01:01 1943Hive的数据类型 Hive的 ... -
深入学习《Programing Hive》:初识Hive
2013-05-06 22:56 2135Hive是一个基于Hadoop分布式系统上的数 ...
相关推荐
hadoop,hive,pig,zookeeper,hbase,hdfs
HIVE编程指南中文版,是由programing hive翻译过来
编程1 编程的最终评估1
Hive编程指南中文版翻译,Hive programing
只要它可以帮助正在学习新算法的人,它是否从某个地方复制并不重要。 图形示例也将非常有帮助。 不要忘记包括测试。 不要删除以前的算法实现。 只需使用您自己的实现添加一个新文件。 美化和清理您的代码以便于阅读...
Programing with MFC Programing with MFC
直线-u'jdbc:hive2:// headnodehost:10001 /; transportMode = http'-f demo.hql #this用于将txt文件存储在azure中 直线-u'jdbc:hive2:// headnodehost:10001 /; transportMode = ...
c++ programingc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ programing and cc++ ...
The c programing language
Python-programing:Python代码
The c programing language 经典的C语言著作,被评为“C语言四书五经”之一,深入学习C语言必读。
Web-Programing-Assignment:SNU 2021-1 Web编程分配
programing in scala中文版的scala教程哦。
第1章 对象的演化 1 第2章 数据抽象 22 第3章 隐藏实现 42 第4章 初始化与清除 55 第5章 函数重载与缺省参数 69 第6章 输入输出流介绍 83 第7章 常量 124 第8章 内联函数 142 第9章 命名控制 157 第10章 引用和拷贝...
安装依赖项npm install node filename.js Python python filename.py 不Leetcode 等级朗格公司再来1个简单的JavaScript 2个简单的JavaScript 3简单的JavaScript 4简单的JavaScript 5简单的JavaScript 6简单的...
Programing with MFC Programing with MFC
Programing C# 3.0(5th edition)
Advanced Linux Programing
how to programing 的书中代码。很有用的!
学习<<C++ programing language>>时整理的细节和小程序测试。