Hive DDL DML SQL操作

本文介绍了Hive,一个由Facebook开源的数据仓库系统,主要用于处理海量结构化日志数据。Hive提供了一种类似SQL的查询语言HQL,并将其转化为MapReduce任务执行。文章详细阐述了Hive的基本数据类型、复杂数据类型、架构、数据存储概念,以及内部表、外部表、分区和分桶等特性。此外,还讨论了Hive的动态分区和自定义函数(UDF)的使用。
摘要由CSDN通过智能技术生成

概述:

hive是什么呢?

(1).由Facebook开源,最初用于解决海量结构化的日志数据统计问题 
(2).是一个构建在Hadoop之上的数据仓库 (虽然是数据仓库,但是它并不存储任何数据)
(3).Hive定义了一种类似于SQL查询语言:HQL(非常类似于MySQL中的SQL语句,同时做了扩展) 
(4).通常用于离线数据处理(与MapReduce原理一样,只不过它是将HQL语句转换成MapReduce程序运行) 
(5).可以认为是一个HQL=>MapReduce的语言翻译器 
(6).底层支持多种不同的执行引擎(默认是MapReduce) 
(7).支持不同的压缩格式、存储格式以及自定义函数 
(8).Hive中的数据库及表就是HDFS中的目录/文件夹,数据是文件,元数据信息可以存储在任意的一个关系型数据库中(比如:MySQL、SqlServer、Oracle等,默认是Derby),数据存储在HDFS中

 

Hive的工作原理简单来说就是一个查询引擎

HIve构建于Hadoop集群之上

1)HQL中对查询语句的解释、优化、查询都是由HIve完成的

2)所有的数据都是存储在Hadoop(HDFS)中

3)HQL语句全部转化为MapReduce任务,在Hadoop中执行,当然也有一些没有MR任务的如:select * from A

4)Hadoop和HIve都是采用UTF-8来进行编码的

 

Hive中的基本数据类型

红色部分为最常用

è¿éåå¾çæè¿°

Hive中的复杂数据类型

由上图可见,Hive中有三种复杂的数据类型:Array   Map   Struct  其中Array 和Map与Java中Array和Map相似,

而Struct与C语言中的Struct类型,它封装了一个命名字段的集合,复杂数据类型允许任意层次的嵌套。

复杂数据类型的声明必须用尖括号声明其中的数据类型,参考如下:

CREATE TABLE A(
	col1 ARRAY< INT>,
	col2 MAP< STRING,INT>,
	col3 STRUCT< a:STRING,b:INT,c:DOUBLE>
)

 

Hive架构图

 

Hive结构体系主要分为以下几个部分:

(1)用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。

(2)Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

(3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。

(4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

Hive的执行命令:因为Hive是基于Hadoop之上的,我们首先启动Hadoop集群,然后去hive目录中bin/下的hiveserver2

[hadoop@Master hive]$ bin/hiveserver2

hiveserver2启动后,我们再去启动beeline命令,远程服务(默认端口号 10000)

[hadoop@Master hive]$ bin/beeline -u jdbc:hive2://Master:10000 -n hadoop

hive的远程服务端口号也可以在hive-default.xml文件中配置,修改hive.server2.thrift.port对应的值即可。

< property>
    < name>hive.server2.thrift.port< /name>
    < value>10000< /value>
    < description>Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.< /description>
< /property>

 

Hive数据存储的概念:

  1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)

  2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

  3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。

       (1):db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹

    (2):table:在hdfs中表现所属db目录下一个文件夹

    (3):external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径

        普通表: 删除表后, hdfs上的文件都删了

        External外部表删除后, hdfs上的文件没有删除, 只是把文件删除了

    (4): partition:在hdfs中表现为table目录下的子目录

    (5):bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中

 

写到这里,我们开始真正进入到Hive来进行实际的操作,如果大家学过SQL语句的话会感觉到很简单,基本相同。

创建数据库:Create

Create database mydb; //创建一个数据库  //对应的HDFS路径为:/user/hive/warehouse/mydb.db

是否存在关键字:if not exists 


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值