`
ruishen
  • 浏览: 52872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

hive 数据查询复杂SQL

 
阅读更多

排序和聚集

正常在数据少的情况下

直接使用order by来操作即可,因为是全排序所以要在一个reduce中完成

from records

select year,temperature

order by year asc,temperature desc;

如果数据量大,并且不需要全排序,只是需要每个reduce中的数据排序即可。如下根据year来指定(distribute by)到相同的reduce中,然后根据sort by来排序

from records

select year,temperature

distribute by year

sort by year asc,temperature desc;

当然一般如果不用指定排序默认字段是排序asc的且在同一个reduce中

from records

select year,temperature

cluster by year;

--------------------------------------------------

from records

select year,temperature

cluster by year,temperature;

MapReduce脚本

连接

内连接

Hive中的连接就是把我们查询操作根据连接条件解析成对对应的maper的输出key,value就是数据对象关联的两条记录。Reducer去处理连接查询的操作。

数据准备

/root/hcr/tmp/sample2.txt数据文件

1990ruishenh0

1992ruishenh2

1991ruishenh1

1993ruishenh3

1994ruishenh4

1995ruishenh5

1996ruishenh6

1997ruishenh7

1998ruishenh8

create table records2 (year string,namestring) row format delimited fields terminated by '\t'

loaddata local inpath'/root/hcr/tmp/sample2.txt' overwrite into tablerecords2;

joinon

select records.*,records2.*

from records join records2 on(records.year=records2.year)

在hive中的join on 操作可以多个条件连接,比如 a join b on a.id=b.aid and a.type=b.atype

select records.*,records2.*

from records join records2 on(records.year=records2.year and records.quality!=1)

hive中同样也是支持多表做连接的

selectr1.year,r2.name,r2.year,r4.y,r4.standard fromrecords2 r2 join records r1 on (r1.year=r2.year) join records4 r4 on(r4.y=r2.year);

但是执行后报错,//找问题TODO

提示到因为join子句一般把大数据的表都放到后边;

外连接

左外连接以左表为主查询,关联不到为null

select * from records r left outer joinrecords2 r2 on r.year=r2.year;

右外连接 以右表为主查询,关联不到为null

select * from records r right outer joinrecords2 r2 on r.year=r2.year;

半连接

select * from records2 r left semi join records r2 on r.year=r2.year;

map 连接 /*+MAPJOIN(records2)*/

From records r join records2 r2 onr.year=r2.year

select /*+MAPJOIN(records2)*/ r2.*,r.*;

子查询

子查询是内嵌在另一个SQL语句中的SELECT语句。Hive对子查询的支持很有限。它只允许子查询出现在SELECT语句的FROM子句中。

from

(

From records r

select r.year,MAX(r.temperature)asmax_temperature

where r.temperature !=9999 and (r.quality=0or r.quality=1 or r.quality=2)

group by r.year

) mt

select mt.year,avg(mt.max_temperature)

group by mt.year ;

因为在外层查询要用到子查询的字段,所以必须赋值别名,比如上文中的mt,而且在子查询中的返回的列名中必须不能存在重复的列名。(比如不能有两个records.year,和records2.year)

视图

Hive中的数据就是一个虚拟的存在写好的sql一样,它不会物化实际。且不能向基表加载或者插入数据。

创建视图

create viewmax_records

as

select r.year,MAX(r.temperature)asmax_temperature

From records r

where r.temperature !=9999 and (r.quality=0or r.quality=1 or r.quality=2)

group by r.year ;

查询视图

Select * from max_records;

重现上边子查询操作:

select year,avg(max_temperature)

from max_records

group by year;

分享到:
评论

相关推荐

    利用Hive进行复杂用户行为大数据分析及优化案例

    利用Hive进行复杂用户行为大数据分析及优化案例(全套视频+课件+代码+讲义+工具软件),具体内容包括: 01_自动批量加载数据到hive 02_Hive表批量加载数据的脚本实现(一) 03_Hive表批量加载数据的脚本实现(二) ...

    基于 Antlr4 的 Hive SQL 解析.zip

    5. **测试和优化**:编写测试用例,确保解析器能够正确处理各种复杂的Hive SQL查询,同时优化性能,降低资源消耗。 6. **实现元数据追踪**:如果题目涉及到“线系”(lineage),可能还需要追踪查询中的数据来源和...

    《Hive数据仓库案例教程》教学大纲.pdf

    4. **Hive数据定义**:讲解如何创建、查询、修改和删除数据库及表,包括分区表和桶表的创建。学生将学会如何设计适合大数据处理的表结构。 5. **Hive数据操作**:这部分涵盖数据的插入、更新和删除操作,以及数据...

    HIVE-SQL开发规范.docx

    - 支持SQL查询,转换为MapReduce任务执行。 - 提供元数据管理,包括表和列的定义。 - 支持分区和桶,提高查询性能。 - 可扩展性,支持多种数据源和存储格式。 2. Hive SQL 语法规则 在编写Hive SQL时,应遵循以下...

    Hive SQL练习题库

    #### 四、SQL查询练习 有了上述的基础,我们可以开始进行一些基础的 SQL 查询练习,如查询某个学生的全部信息、查询某门课程的成绩分布等。这部分主要涉及 SQL 查询的基础语法,包括 SELECT、FROM、WHERE 等子句的...

    Hive复杂数据类型使用介绍

    Hive复杂数据类型使用介绍 Hive作为一个大数据分析工具,提供了多种数据类型,其中包括了复杂数据类型如Array、Map和Struct。这些复杂数据类型可以满足各种复杂的数据存储需求。 一、Array类型 Array类型是Hive中...

    大数据 hive 实战数据

    Hive作为数据仓库工具,能够实现数据的离线批处理,支持复杂的查询和分析,适合处理结构化和半结构化的数据。 在实际操作中,我们可能会使用Hive进行ETL(Extract, Transform, Load)过程,从原始数据中抽取、转换...

    连接hive-使用sqldeveloper作为客户端.zip

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得分析师可以利用熟悉的SQL语法对存储在Hadoop集群上的大规模数据进行分析。...

    项目实战——Spark将Hive表的数据写入ElasticSearch(Java版本)

    1. **Hive数据源**: Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL语法进行数据查询和分析。在本项目中,我们首先需要从Hive表中提取数据。Hive提供了丰富的接口供外部应用访问,包括Hive JDBC和Hive ...

    hive sql详解 经典

    驱动器解析SQL查询并生成执行计划,执行器负责在Hadoop集群上执行这些计划。 2. **HiveQL**: HiveQL是Hive的SQL方言,支持常见的SQL操作,如SELECT、FROM、WHERE、GROUP BY等,同时也有针对大数据处理的独特功能...

    hive中定义的复杂数据类型导入到es中问题总结.doc

    ### Hive中的复杂数据类型导入至Elasticsearch (ES) 的问题总结 #### 一、背景介绍 在大数据处理领域,Apache Hive 和 Elasticsearch (ES) 是两种非常重要的工具。Hive 主要用于对存储在 Hadoop 文件系统 (HDFS) 中...

    大数据技术:Hive SQL 数据导入与复杂查询实战指导

    内容概要:本篇文章详细介绍了Hive这一大数据处理工具的多项数据操作流程,涵盖导入、导出、分区设置以及各种查询语句的应用实例,如基于特定条件筛选员工信息和利用聚合函数进行数据分析。此外,文档演示了静态与...

    java_hive简单查询

    在Java开发中,有时我们需要与大数据处理平台如Hive进行交互,执行SQL查询来获取或处理数据。本教程将深入探讨如何使用Java API与Hive进行集成,实现简单的查询操作。我们将围绕以下知识点展开讨论: 1. **Hive简介...

    Hive数据仓库工具----220222.rar

    《Hive数据仓库工具》 在大数据处理领域,Hive是一个不可或缺的数据仓库工具,它由Facebook于2007年开源,旨在为大规模数据集提供简单的SQL查询、数据汇总以及面向列的存储管理。Hive的设计目标是将SQL查询语言...

    使用javaJDBC连接hive数据,实现简单的操作!

    Hive是一个基于Hadoop的数据仓库工具,它允许我们对大规模数据集进行SQL-like查询。 首先,我们需要在Java项目中引入Hive JDBC驱动。这通常通过Maven或Gradle的依赖管理来完成。对于Maven,可以在`pom.xml`文件中...

    数据分析系统Hive

    它通过提供一种 SQL 类似的查询语言 HQL,使得用户能够轻松地对存储在 Hadoop 分布式文件系统 (HDFS) 中的数据进行复杂的查询操作。Hive 的设计初衷是为了简化海量结构化日志数据的统计问题,它支持数据抽取 ...

    Hive sql系统学习教程

    3. **数据分析**: Hive更适合处理大规模的批处理作业,适用于复杂的数据分析,而SQL更适合实时查询和事务处理。 4. **数据类型和函数**: Hive支持更多种数据类型,如数组、映射、结构等,且内置函数丰富,允许用户...

    hive搭建及使用入门简介(内含PPT、各种表创建sql及hive搭建使用笔记)

    通过Hive,用户可以将复杂的数据处理任务转换为简单的SQL语句,极大地降低了大数据分析的门槛。 在“Hive搭建”部分,你将了解到如何在本地或集群环境中设置Hive。这通常包括安装Java环境、配置Hadoop、下载和安装...

    hive 操作相关的测试数据集

    9. **Hive与MapReduce**:Hive的本质是将SQL查询转换为MapReduce作业进行执行,因此理解MapReduce的工作原理对于优化Hive查询至关重要。 10. **Hive与Spark集成**:近年来,Hive也支持与Spark的集成,利用Spark的...

Global site tag (gtag.js) - Google Analytics