- 浏览: 358492 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
希恩杰:
采样器的目的是啥?使数据均匀分布到所有分区?使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 2355在之前的CentOS 5.4 hadoop集 ... -
CentOS 6.4 hadoop集成Hive
2013-07-09 01:58 2419在本节中,我们来学习如何安装Hive。在之前我 ... -
深入学习《Programing Hive》:Tuning
2013-05-20 12:07 4153HiveQL是一种 ... -
深入学习《Programing Hive》:模式设计(Schema Design)
2013-05-19 23:00 2200对那些使用传统数据库的用户来说,Hive看上去 ... -
深入学习《Programing Hive》:Hive自定义函数之GenericUDF
2013-05-18 15:39 0上节我们学习了如何实现自己的用户自定义函数, ... -
深入学习《Programing Hive》:Hive自定义函数之UDF
2013-05-18 15:29 7090为了满足用户的个性化需求,Hive被设计成了一 ... -
深入学习《Programing Hive》:RCFile
2013-05-17 17:41 3534在当前的基 ... -
深入学习《Programing Hive》:数据压缩
2013-05-17 15:19 2722Hive使用的 ... -
深入学习《Programing Hive》:HiveQL索引
2013-05-16 17:49 3431Hive提供有限的索引功能,这不像传统的关系型 ... -
深入学习《Programing Hive》:HiveQL查询(3)
2013-05-15 15:02 2158DISTRIBUTE BY ... -
深入学习《Programing Hive》:HiveQL查询(2)
2013-05-15 13:07 5169浮点比较陷阱 在WHERE查询 ... -
深入学习《Programing Hive》:数据操纵DML(Data Manipulation Language)
2013-05-14 17:27 3798本节继续讨 ... -
深入学习《Programing Hive》:Hive的DDL数据定义操作
2013-05-07 23:24 1919在上一节《深入学习《Programing H ... -
深入学习《Programing Hive》:Hive的数据模型(表)
2013-05-07 01:01 1987Hive的数据类型 Hive的 ... -
深入学习《Programing Hive》:初识Hive
2013-05-06 22:56 2173Hive是一个基于Hadoop分布式系统上的数 ...
相关推荐
HIVE编程指南中文版,是由programing hive翻译过来
在编程领域,编程1通常指的是初学者阶段的学习与实践,主要涵盖了基础的编程概念、语法和逻辑思维。在这个“编程的最终评估1”中,我们可以期待一个总结性的任务或者项目,目的是检验学习者对基本编程知识的理解和...
Hive编程指南中文版翻译,Hive programing
只要它可以帮助正在学习新算法的人,它是否从某个地方复制并不重要。 图形示例也将非常有帮助。 不要忘记包括测试。 不要删除以前的算法实现。 只需使用您自己的实现添加一个新文件。 美化和清理您的代码以便于阅读...
《Programming with MFC》是关于Microsoft Foundation Classes (MFC) 的编程指南,MFC 是微软为Windows应用程序开发提供的...通过深入学习MFC,开发者可以更好地理解和控制Windows应用程序的生命周期,提高开发效率。
直线-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++ ...
"Algorithm-competitive-programming.zip"这个压缩包文件,显然是为了帮助学习者深入理解和掌握算法以及如何在竞争编程中运用它们。让我们一起探讨其中蕴含的知识点。 1. **算法基础**:算法是一系列精确的步骤,...
根据提供的文件信息,实际内容与要求的C编程语言知识点不符,该文件内容为一份小品剧本,因此将基于剧本中的元素进行无关内容的剔除,接下来将围绕...掌握这些基础概念对于学习更高级的语言和技术也是非常有帮助的。
通过深入研究这个"programing-GIS:代码和笔记本",学习者不仅可以掌握GIS编程的基本技能,还能了解如何将这些技能应用于实际问题,比如城市规划、环境保护、交通分析等领域。这将是一个宝贵的学习资源,帮助开发者将...
以上只是Python编程中的一些基础知识点,Python的生态庞大,还有更多高级特性和框架,如网络编程、并发处理、网络爬虫、机器学习、深度学习等,都需要进一步深入学习。Python-programing-main这个压缩包可能包含了...
1. 学习不同的解题策略:每个平台可能有其特定的解题风格,了解这些风格可以帮助我们拓宽思维,找到更适合特定问题的解决方案。 2. 理解代码优化:比较不同解法,我们可以看到哪些代码更高效,哪些地方可以进行优化...
《集体智慧编程》是一本深入探讨如何利用网络和大规模数据来构建智能系统的经典著作。这本书主要关注的是如何通过编程技术来挖掘和利用互联网上的集体智慧,从而实现机器学习和人工智能的应用。书中涵盖了一系列的...
压缩包中的"web-programing-main"可能包含了示例代码、练习项目和教程资源,供学习者实践和巩固所学知识。通过实际操作,你可以更好地理解如何将理论应用于实践中,创建自己的简单网站。 总的来说,这个课程将引导...
第1章 对象的演化 1 第2章 数据抽象 22 第3章 隐藏实现 42 第4章 初始化与清除 55 第5章 函数重载与缺省参数 69 第6章 输入输出流介绍 83 第7章 常量 124 第8章 内联函数 142 第9章 命名控制 157 第10章 引用和拷贝...
可视化编程是一种将编程过程与视觉元素相结合的技术,它允许用户通过图形化界面构建代码,而无需直接编写文本形式的程序。...对于学习者来说,它提供了深入理解TypeScript和可视化编程原理的机会。
安装依赖项npm install node filename.js Python python filename.py 不Leetcode 等级朗格公司再来1个简单的JavaScript 2个简单的JavaScript 3简单的JavaScript 4简单的JavaScript 5简单的JavaScript 6简单的...