`

HIVE教程(一)HIVE基本介绍

    博客分类:
  • Hive
阅读更多

HIVE教程(一)
HIVe基本介绍
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive是十分适合数据仓库的统计分析和Windows注册表文件。

hive 是一种底层封装了Hadoop 的数据仓库处理工具,使用类SQL 的hiveQL 语言实现数据查询,所有hive 的数据都存储在Hadoop 兼容的文件系统(例如,Amazon S3、HDFS)中。hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS 中hive 设定的目录下,因此,hive 不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。hive 的设计特点如下。 
● 支持创建索引,优化数据查询。
● 不同的存储类型,例如,纯文本文件、HBase 中的文件。
● 将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
● 可以直接使用存储在Hadoop 文件系统中的数据。
● 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。
● 类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。
一、基本介绍
1、HIVE类型
Hive所有数据类型分为四种类型,列类型,文字,Null 值,复杂类型
列类型:
整型:TINYINT,SMALLINT,INT,BIGINT
字符串类型:字符串类型(1 to 65355),CHAR(255)
时间戳:它支持传统的UNIX时间戳可选纳秒的精度。它支持的java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”和格式“YYYY-MM-DD HH:MM:ss.ffffffffff”
日期:DATE值在年/月/日的格式形式描述 {{YYYY-MM-DD}}.
小数点:DECIMAL(precision, scale),decimal(10,0)
2、创建数据库
CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>
IF NOT EXISTS是一个可选子句,通知用户已经存在相同名称的数据库
例如:
CREATE DATABASE [IF NOT EXISTS] userdb;
验证数据库
SHOW DATABASES;
3、删除数据库
DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IF EXISTS] database_name
[RESTRICT|CASCADE];
例如:DROP DATABASE IF EXISTS userdb;

4、创建表
语法:
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name

[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[ROW FORMAT row_format]
[STORED AS file_format]
例子:
 CREATE TABLE IF NOT EXISTS employee ( eid int, name String,
 salary String, destination String)
 COMMENT ‘Employee details’
 ROW FORMAT DELIMITED
 FIELDS TERMINATED BY ‘\t’
 LINES TERMINATED BY ‘\n’
 STORED AS TEXTFILE;
5、修改表
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
查询重命名表,把 employee 修改为 emp
ALTER TABLE employee RENAME TO emp;
ALTER TABLE employee CHANGE name ename String;
ALTER TABLE employee CHANGE salary salary Double;

5、删除表
DROP TABLE [IF EXISTS] table_name;


6、Hive分区
    增加分区:
    ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec
[LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...;

partition_spec:
: (p_column = p_col_value, p_column = p_col_value, ...)
ALTER TABLE employee
 ADD PARTITION (year=’2013’)
location '/2012/part2012';
重命名分区
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;

删除分区
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
ALTER TABLE employee DROP [IF EXISTS]
   > PARTITION (year=’1203’);

二、基本语法
1、关系运算符

A LIKE B    如果字符串模式A匹配到B,否则FALSE。
A RLIKE B 如果A或B为NULL;TRUE,如果A任何子字符串匹配Java正则表达式B;否则FALSE
A REGEXP B 等同于RLIKE.
2、算术运算符
+,-,*,/,%,&,|,^,~
3、逻辑运算符
A AND B 同 A && B
A OR B 同A || B
NOT A 同 !A
4、基本查询
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];
例子:SELECT * FROM employee WHERE Salary>=40000;
(1)ORDER BY
ORDER BY子句用于检索基于一列的细节并设置排序结果按升序或降序排列。
SELECT Id, Name, Dept FROM employee ORDER BY DEPT;
生成一个查询用于检索员工的详细信息。

(2)GROUP BY
GROUP BY子句用于分类所有记录结果的特定集合列。它被用来查询一组记录。
SELECT Dept,count(*) FROM employee GROUP BY DEPT;
检索每个部门的员工数量
(3)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]

JOIN

    JOIN子句用于合并和检索来自多个表中的记录。 JOIN和SQLOUTER JOIN 类似。连接条件是使用主键和表的外键。

    下面的查询执行JOIN的CUSTOMER和ORDER表,并检索记录:
hive> SELECT c.ID, c.NAME, c.AGE, o.AMOUNT
   > FROM CUSTOMERS c JOIN ORDERS o
   > ON (c.ID = o.CUSTOMER_ID);

    成功执行查询后,能看到以下回应:
+----+----------+-----+--------+
| ID | NAME     | AGE | AMOUNT |
+----+----------+-----+--------+
| 3  | kaushik  | 23  | 3000   |
| 3  | kaushik  | 23  | 1500   |
| 2  | Khilan   | 25  | 1560   |
| 4  | Chaitali | 25  | 2060   |
+----+----------+-----+--------+


    LEFT OUTER JOIN

    HiveQL LEFT OUTER JOIN返回所有行左表,即使是在正确的表中没有匹配。这意味着,如果ON子句匹配的右表0(零)记录,JOIN还是返回结果行,但在右表中的每一列为NULL。

    LEFT JOIN返回左表中的所有的值,加上右表,或JOIN子句没有匹配的情况下返回NULL。

    下面的查询演示了CUSTOMER 和ORDER 表之间的LEFT OUTER JOIN用法:
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE
   > FROM CUSTOMERS c
   > LEFT OUTER JOIN ORDERS o
   > ON (c.ID = o.CUSTOMER_ID);

    成功执行查询后,能看到以下回应:
+----+----------+--------+---------------------+
| ID | NAME     | AMOUNT | DATE                |
+----+----------+--------+---------------------+
| 1  | Ramesh   | NULL   | NULL                |
| 2  | Khilan   | 1560   | 2009-11-20 00:00:00 |
| 3  | kaushik  | 3000   | 2009-10-08 00:00:00 |
| 3  | kaushik  | 1500   | 2009-10-08 00:00:00 |
| 4  | Chaitali | 2060   | 2008-05-20 00:00:00 |
| 5  | Hardik   | NULL   | NULL                |
| 6  | Komal    | NULL   | NULL                |
| 7  | Muffy    | NULL   | NULL                |
+----+----------+--------+---------------------+


    RIGHT OUTER JOIN

    HiveQL RIGHT OUTER JOIN返回右边表的所有行,即使有在左表中没有匹配。如果ON子句的左表匹配0(零)的记录,JOIN结果返回一行,但在左表中的每一列为NULL。

    RIGHT JOIN返回右表中的所有值,加上左表,或者没有匹配的情况下返回NULL。

    下面的查询演示了在CUSTOMER和ORDER表之间使用RIGHT OUTER JOIN。
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE
   > FROM CUSTOMERS c
   > RIGHT OUTER JOIN ORDERS o
   > ON (c.ID = o.CUSTOMER_ID);

    成功执行查询后,能看到以下回应:
+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
| 3    | kaushik  | 3000   | 2009-10-08 00:00:00 |
| 3    | kaushik  | 1500   | 2009-10-08 00:00:00 |
| 2    | Khilan   | 1560   | 2009-11-20 00:00:00 |
| 4    | Chaitali | 2060   | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+


    FULL OUTER JOIN

    HiveQL FULL OUTER JOIN结合了左边,并且满足JOIN条件合适外部表的记录。连接表包含两个表的所有记录,或两侧缺少匹配结果那么使用NULL值填补

    下面的查询演示了CUSTOMER 和ORDER 表之间使用的FULL OUTER JOIN:
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE
   > FROM CUSTOMERS c
   > FULL OUTER JOIN ORDERS o
   > ON (c.ID = o.CUSTOMER_ID);

    成功执行查询后,能看到以下回应:
+------+----------+--------+---------------------+
| ID   | NAME     | AMOUNT | DATE                |
+------+----------+--------+---------------------+
| 1    | Ramesh   | NULL   | NULL                |
| 2    | Khilan   | 1560   | 2009-11-20 00:00:00 |
| 3    | kaushik  | 3000   | 2009-10-08 00:00:00 |
| 3    | kaushik  | 1500   | 2009-10-08 00:00:00 |
| 4    | Chaitali | 2060   | 2008-05-20 00:00:00 |
| 5    | Hardik   | NULL   | NULL                |
| 6    | Komal    | NULL   | NULL                |
| 7    | Muffy    | NULL   | NULL                | 
| 3    | kaushik  | 3000   | 2009-10-08 00:00:00 |
| 3    | kaushik  | 1500   | 2009-10-08 00:00:00 |
| 2    | Khilan   | 1560   | 2009-11-20 00:00:00 |
| 4    | Chaitali | 2060   | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+




三、逻辑判断
1、if
例子:
if(merchandise_gds_orders_week is null, 0, merchandise_gds_orders_week) as orders_week,
嵌套if
if(merchandise_gds_orders / merchandise_gds_is_4_page > 1.0, 1.0, if(merchandise_gds_is_4_page = 0, 0.0, merchandise_gds_orders / merchandise_gds_is_4_page))
2、case when
总结一下:两种表达方式是等效的
方法一:

case
when tb1.os = 'android' then 'android'
when tb1.os = 'ios' then 'iPhone'
else 'PC'
end as os,


case tb1.os
when 'android' then 'android'
when 'ios' then 'iPhone'
else 'PC'
end as os,

HIVE教程(一)HIVE基本介绍

分享到:
评论

相关推荐

    Hive教程--命令

    Hive 教程--命令 Hive 是一种数据库技术,可以定义数据库和表来分析结构化数据。主题结构化数据分析是以表方式存储数据,并通过查询来分析。 创建数据库 创建数据库是 Hive 中最基本的操作之一。Hive 中的数据库...

    Hive教程.pdf

    ### Hive简明教程知识点概述 #### 一、Hive简介 - **定义**: Hive是一种基于Hadoop的数据仓库工具,它可以将结构化的数据文件映射成一张数据库表,并提供类SQL查询功能,使得Hadoop能够更好地处理大数据。 - **...

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf

    《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第5章 Hive数据操作.pdf《Hive数据仓库案例教程》教学课件 第...

    Hive 简明教程.pdf

    Hive 简明教程 第一部分:完全以日常使用为目标,整理了常用的Hive 语法,而抛弃了不常用的部分,用来 满足不懂技术的分析人员来快速使用Hive 进行常见的日常数据分析。 第二部分:如果想能写出高效的Hive 语句,...

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

    1. **Hive数据仓库基础**:这一部分主要讲解数据仓库的基本概念,包括数据仓库的特性、数据仓库与数据库的区别,以及Hive数据仓库的原理。学生需要理解Hive架构,以及它在大数据处理中的角色。 2. **Hive环境搭建**...

    hive教程资料.rar

    这个"hive教程资料.rar"压缩包很可能包含了一系列学习Hive的基础到高级知识的资源,比如SQL查询语句、课堂笔记以及可能的数据可视化相关材料。 首先,我们来看"课堂临时sql.sql"。这很可能是Hive SQL查询的实例集合...

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

    《Hive简明教程-大数据技术系列》是针对Hive这一大数据处理工具的全面解析,旨在帮助初学者快速掌握其核心概念和实用技巧。本文将深入探讨Hive的语法、原理以及相关的技术细节。 首先,Hive是Apache软件基金会开发...

    Hive基本操作命令大全

    本文档将详细介绍Hive的基本操作命令,从创建表、加载数据、查询数据到数据管理等方面进行整理。 创建表 Hive提供了多种方式创建表,例如: * 创建一个简单的表:`CREATE TABLE pokes (foo INT, bar STRING);` * ...

    Hive学习必备——配置Hive环境教程 免费分享哦~

    在这篇文章中,我们将详细介绍如何配置Hive环境,包括安装Hive、配置Hadoop环境、配置Hive Metastore数据库等步骤。同时,我们还将使用Xshell6工具来远程连接到Hive服务器,并学习如何使用Hive命令行工具来执行查询...

    hive客户端安装_hive客户端安装_hive_

    本教程将详细讲解如何在Linux环境下安装Hive客户端,以便进行数据操作和分析。 一、Hadoop环境准备 在安装Hive客户端之前,确保你已经安装了Hadoop并且集群处于正常运行状态。Hadoop是Hive的基础,提供了分布式存储...

    HIVE安装及详解

    HIVE是一种基于Hadoop的数据仓库工具,主要用于处理和分析大规模数据。下面是关于HIVE的安装及详解。 HIVE基本概念 HIVE是什么?HIVE是一种数据仓库工具,主要用于处理和分析大规模数据。它将结构化数据文件转换为...

    hive基本操作

    hive 基本操作的命令和hive 实用命令等,有利与学习hive和mysql

    大数据实验六实验报告:熟悉Hive的基本操作

    通过这个实验,学生能够掌握Hive的基本操作,包括创建表(内部表和分区表)、数据导入、数据查询以及动态分区的使用,这些都是大数据分析中的关键步骤。同时,了解如何在Windows环境下配置和使用Ubuntu虚拟机,以及...

    尚硅谷大数据视频_Hive视频教程

    在【尚硅谷大数据视频_Hive视频教程.txt】文件中,可能包含了每一课的详细笔记、关键点总结,或者是一些练习题和解答,帮助你巩固所学知识,确保理论与实践相结合。 通过这个视频教程,你不仅能够掌握Hive的基础...

    Hive基本命令整理

    Hive基本命令整理 作为大数据处理的重要工具,Hive 提供了许多实用的命令来帮助开发人员高效地处理和分析数据。下面是 Hive 中的一些基本命令整理,涵盖了表的创建、加载数据、查看结构信息、更新表名、添加新列、...

    hive 教程 简单 容易上手

    学习Hive和Spark SQL,需要理解大数据处理的基本概念,同时熟悉SQL语言。通过实际操作,逐步掌握如何在Hive中创建表、导入数据、执行查询,以及如何利用Spark SQL提升查询效率。不断实践和探索,才能更好地掌握这两...

    hive 简明教程

    Hive是一个建立在Hadoop之上...最后,附录A部分介绍了Hive的安装和配置过程,包括安装Hive、配置Hive、安装MySQL数据库以及启动和测试Hive的步骤。这部分内容为读者提供了将Hive部署到个人计算机或服务器上的操作指导。

    Hive_JDBC.zip_hive java_hive jdbc_hive jdbc pom_java hive_maven连

    本教程将深入讲解如何使用Hive JDBC在Java项目中建立与Hive的连接,并通过Maven来管理依赖。 首先,让我们了解Hive JDBC的基本概念。JDBC是Java中用于数据库访问的标准API,它定义了一组接口和类,使得开发者可以...

Global site tag (gtag.js) - Google Analytics