`
superlxw1234
  • 浏览: 552325 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:44553
社区版块
存档分类
最新评论

[一起学Hive]之九-Hive的查询语句SELECT

    博客分类:
  • hive
阅读更多

         关键字:Hive SELECT、ORDER BY、SORT BY、DISTRIBUTE BY、CLUSTER BY、Hive子查询、Hive虚拟列

 

八、Hive的查询语句SELECT

        在所有的数据库系统中,SELECT语句是使用最多,也最复杂的一块,Hive中的查询语句SELECT支持的语法当然也比较复杂,本文只能尽力去介绍。

 

8.1 基础查询语法

 

        Hive中的SELECT基础语法和标准SQL语法基本一致,支持WHERE、DISTINCT、GROUP BY、ORDER BY、HAVING、LIMIT、子查询等;
语法如下:

    [WITH CommonTableExpression (, CommonTableExpression)*]
    SELECT [ALL | DISTINCT] select_expr, select_expr, ...
    FROM table_reference
    [WHERE where_condition]
    [GROUP BY col_list]
    [CLUSTER BY col_list
    | [DISTRIBUTE BY col_list] [SORT BY col_list]
    ]
    [LIMIT number]

 

        下面介绍Hive中比较特殊的一些查询语法。

 

8.2 ORDER BY和SORT BY

 

       ORDER BY用于全局排序,就是对指定的所有排序键进行全局排序,使用ORDER BY的查询语句,最后会用一个Reduce Task来完成全局排序。
       SORT BY用于分区内排序,即每个Reduce任务内排序。
看下面的例子:
原表数据为:

hive> select * from lxw1234_com;
OK
5
3
6
2
9
8
1

 

使用ORDER BY

hive> select * from lxw1234_com order by id;
1
2
3
5
6
8
9

 

 

使用SORT BY

hive> set mapred.reduce.tasks=2;
hive> select * from lxw1234_com sort by id;
2
5
6
9
1
3
8

设定了2个reduce,从结果可以看出,每个reduce内做了排序。
如果reduce数为1,那么ORDER BY和SORT BY的结果是一样的:

 

hive> set mapred.reduce.tasks=1;
hive> select * from lxw1234_com sort by id;
1
2
3
5
6
8
9

 

真实业务环境中,我们的需求大多需要使用ORDER BY全局排序来完成。

 

8.3 DISTRIBUTE BY和CLUSTER BY

       distribute by:按照指定的字段或表达式对数据进行划分,输出到对应的Reduce或者文件中。
       cluster by:除了兼具distribute by的功能,还兼具sort by的排序功能。

 

##distribute by

 

    hive> set mapred.reduce.tasks=2;
    hive>INSERT overwrite LOCAL directory '/tmp/lxw1234/'
    SELECT id FROM lxw1234_com
    distribute BY id;

 

执行后在本地的/tmp/lxw1234目录中生成了000000_0和000001_0两个文件:
cat 000000_0
8
2
6
cat 000001_0 ##id%2=1的记录
1
9
3
5

 

##cluster by

    hive> set mapred.reduce.tasks=2;
    hive> INSERT overwrite LOCAL directory '/tmp/lxw1234/'
    SELECT id FROM lxw1234_com
    CLUSTER BY id;
    cat 000000_0
    2
    6
    8
    cat 000001_0
    1
    3
    5
    9

 

     注意:使用cluster by之后,每个文件中的id都进行了排序,而distribute by没有。

 

8.4 子查询

      子查询和标准SQL中的子查询语法和用法基本一致,需要注意的是,Hive中如果是从一个子查询进行SELECT查询,那么子查询必须设置一个别名。

    SELECT col
    FROM (
    SELECT a+b AS col
    FROM t1
    ) t2

 

另外,从Hive0.13开始,在WHERE子句中也支持子查询,比如:

    SELECT *
    FROM A
    WHERE A.a IN (SELECT foo FROM B);
     
    SELECT A
    FROM T1
    WHERE EXISTS (SELECT B FROM T2 WHERE T1.X = T2.Y)

 

还有一种将子查询作为一个表的语法,叫做Common Table Expression(CTE):

    with q1 as (select * from src where key= '5'),
    q2 as (select * from src s2 where key = '4')
    select * from q1 union all select * from q2;
     
    with q1 as ( select key, value from src where key = '5')
    from q1
    insert overwrite table s1
    select *;

 

8.5 虚拟列

Hive查询中有两个虚拟列:
INPUT__FILE__NAME:数据对应的HDFS文件名;
BLOCK__OFFSET__INSIDE__FILE:该行记录在文件中的偏移量;

    hive> select id,INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE from lxw1234_com;
    5 hdfs://cdh5/tmp/lxw1234/1.txt 0
    3 hdfs://cdh5/tmp/lxw1234/1.txt 2
    6 hdfs://cdh5/tmp/lxw1234/1.txt 4
    2 hdfs://cdh5/tmp/lxw1234/1.txt 6
    9 hdfs://cdh5/tmp/lxw1234/1.txt 8
    8 hdfs://cdh5/tmp/lxw1234/1.txt 10
    1 hdfs://cdh5/tmp/lxw1234/1.txt 12

 

Hive查询中还包括:

 

Hive的内置操作和函数: http://superlxw1234.iteye.com/admin/blogs/2216500
Hive窗口分析函数:http://superlxw1234.iteye.com/admin/blogs/2205770

 

 

 

12
6
分享到:
评论
1 楼 annmi_cai 2016-03-11  
顶顶更健康!

相关推荐

    hive-jdbc-uber-2.6.5.0-292.jar

    Hive JDBC允许Java应用作为客户端,与远程Hive服务端建立连接,执行SQL语句,包括创建表、加载数据、执行查询等操作。它提供了标准的JDBC接口,使得开发者可以使用熟悉的SQL语法与Hive进行交互,极大地简化了Hadoop...

    hive-jdbc-1.2.1-standalone

    5. 执行SQL语句,如`SELECT`, `INSERT`, `UPDATE`, `DELETE`等。 6. 处理查询结果,例如通过`ResultSet`对象获取数据。 7. 关闭`Statement`和`Connection`以释放资源。 Hive JDBC适用于各种场景,如ETL(提取、转换...

    apache-hive-2.3.9-bin.tar大数据HIVE.zip

    Apache Hive 是一个基于 Hadoop 的数据仓库工具,用于组织、查询和分析大量数据。它提供了一个SQL-like(HQL,Hive SQL)接口,使得非专业程序员也能方便地处理存储在Hadoop分布式文件系统(HDFS)中的大规模数据集...

    hive-1.1.0-cdh5.7.0.tar

    HQL支持SELECT、FROM、WHERE、GROUP BY等标准SQL语句,同时也引入了分桶(Bucketing)、分区(Partitioning)和倾斜 join(Skewed Join)等特性以提高查询效率。 3. **表和分区**:Hive中的表可以被划分为多个分区...

    apache-hive-1.2.2-bin_编译版本.tar.gz

    Apache Hive 是一个基于 Hadoop 的数据仓库工具,它允许用户使用 SQL 类似的查询语言(HQL)来查询、管理和处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集。`apache-hive-1.2.2-bin.tar.gz` 是 Apache ...

    hive-1.1.0-cdh5.7.0.tar.gz.rar

    Hive是Apache软件基金会开发的一个数据仓库工具,它允许用户使用SQL-like查询语言(HQL)来处理存储在Hadoop分布式文件系统(HDFS)上的大数据集。Hive-1.1.0-cdh5.7.0是Cloudera Data Hub (CDH)平台中的一个版本,...

    apache-hive-1.2.1-bin.tar.zip

    Apache Hive 是一个基于Hadoop的数据仓库工具,它允许用户通过SQL-like的语言(称为HQL,Hive Query Language)对大规模数据集进行分析和查询。在本压缩包"apache-hive-1.2.1-bin.tar.zip"中,包含了Apache Hive ...

    apache-hive-1.1.0-bin.tar.gz

    5. **优化器**:Hive 内置了一套查询优化器,根据元数据和查询语句来优化执行计划,如选择最佳的 join 策略或分区裁剪。 6. **执行引擎**:负责在 Hadoop 上执行由编译器生成的 MapReduce 作业。 在 `apache-hive-...

    apache-hive-3.1.2-bin.tar.zip

    1. **Hive架构**:Hive将用户的SQL语句转换为MapReduce任务在Hadoop集群上执行,提供了一种将结构化数据文件映射为数据库表并提供简单的SQL查询功能的方式。 2. **元数据存储**:Hive使用MySQL或Derby等数据库存储...

    配置后的hive-1.1.0-cdh5.7.0.tar.gz

    Hive是Apache软件基金会开发的一个数据仓库工具,它允许用户使用SQL-like语言(HQL,Hive Query Language)对大规模存储在Hadoop分布式文件系统(HDFS)中的数据进行查询、分析和处理。Hive-1.1.0-cdh5.7.0是...

    hive-jdbc所需jar(精简可用)

    在大数据处理领域,Hive是一个基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,使得用户能够通过SQL语句对存储在Hadoop分布式文件系统(HDFS)中的大数据进行分析。...

    03.hive查询语法--子查询.zip

    子查询,也被称为嵌套查询或内部查询,是在一个查询语句中嵌套另一个查询语句,用于获取主查询所需的数据。Hive中的子查询可以分为单行子查询、多行子查询以及关联子查询,它们在数据处理中扮演着关键角色。 1. **...

    Hive教程--命令

    示例假设需要使用 SELECT 语句查询 employee 表和 department 表,按照 employee 表的 department_id 字段和 department 表的 id 字段连接。 hive> SELECT * FROM employee JOIN department ON employee.department...

    hive-2.1.0.rar

    例如,`CREATE TABLE`语句用于定义新的数据表,`LOAD DATA`用于将数据加载到表中,`SELECT`则用于查询数据。 3. **数据存储与表结构**: Hive中的数据通常存储在HDFS上,表可以分为Managed Table和External Table...

    java调用hive需要的jar

    在Java编程环境中,调用Hive服务以执行SQL查询或数据操作是一项常见的任务。Hive是基于Hadoop的数据仓库工具,允许用户通过SQL接口(HQL)处理大规模数据集。为了在Java应用程序中与Hive交互,我们需要依赖特定的JAR...

    apache-hive-1.2.2-windows_linux.zip

    此外,熟悉 HQL 的语法,如 SELECT、FROM、WHERE、JOIN 和 GROUP BY 语句,能够帮助他们更有效地查询和分析大数据。 Hive 的优势在于其可扩展性和容错性,得益于 Hadoop 的分布式特性。然而,由于 Hive 的查询执行...

    hive--web信息检索与数据抓取-hive.pdf

    Hive是建立在Hadoop生态系统之上,它将SQL语句转换为MapReduce任务执行,简化了大数据分析的过程。Hive中的表实质上是HDFS上的文件目录,每个表名对应一个目录,而分区表则会通过分区值形成子目录。Hive提供了类似于...

    hive学习笔记-比较全的知识

    Hive处理HQL查询语句的解释、优化和查询计划生成,而Hadoop负责执行查询计划。Hive的所有数据存储在Hadoop的HDFS中。值得注意的是,Hadoop和Hive默认使用UTF-8编码。 ### Hive与传统关系数据库的异同 - **查询语言...

    Hive简明教程-大数据技术系列

    例如,你可以学习如何使用LOAD DATA命令将数据导入Hive表,使用SELECT语句进行基本查询,以及如何运用GROUP BY和JOIN操作来处理复杂的数据分析任务。此外,Hive支持UDF(用户自定义函数),这使得用户可以根据需要...

Global site tag (gtag.js) - Google Analytics