大牛级大数据架构师教你HIVE知识,看了之后秒懂啊!

hive是基于Hadoop的一个date仓库工具,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。


转移子(蜂巢元date)

HIVEdate存储在HDFS中,大多数查询和计算都是由MapReduce完成的。

Hivedate仓库于date库的异同

(1)由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为date库。其实从结构上来看,Hive和date库除了拥有类似的查询语言, 再无类似之处。 (2)date存储位置。 hdfs raw local fs (3)date格式。 分隔符 (4)date更新。hive读多写少。Hive中不支持对date的改写和添加,所有的date都是在加载的时候中确定好的。 INSERT INTO … VALUES添加date,使用UPDATE … SET修改date 不支持的 HDFS 一次写入多次读取 (5) 执行。hive通过MapReduce来实现的 而数据库通常有自己的执行引擎。 (6)执行延迟。由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架 (7)可扩展性 (8)数据规模。

hive几种基本表类型:内部表、外部表、桶表

在这里相信有许多想要学习大数据的同学,大家可以加下大数据学习群532218147,即可免费领取一整套系统的大数据学习教程

内部表(管理表)和外部表的区别:

创建表格

表类型一、管理表或内部表Table Type: MANAGED_TABLE

create table if not exists dept( deptno int, deptname string, address string )row format delimited fields terminated by ' ';//HDFS文件到Hive表中load data inpath '/input/dept.txt' into table dept;//用来指定原文件的列分隔符 row format delimited fields terminated by ' ';load 如果操作的HDFS上的文件,代表着会移动或者剪切文件desc formatted dept; //描述表结构信息 Location: hdfs://bigdata/user/hive/warehouse/db01.db/dept Table Type: MANAGED_TABLE 1234567891011121314151617

表类型二、外部表

create external table emp( empno int, empname string, empjob string, mgno int, birthday string, salary float, bonus float, depno int)row format delimited fields terminated by ' 'location '/input/demo';//描述表结构 desc formatted emp; Location: hdfs://bigdata/input/demo Table Type: EXTERNAL_TABLE 删除内部表drop table dept;删除外部表drop table emp;清空表数据truncate table student;1234567891011121314151617181920212223242526

外部表

create external table dept_part( deptno int, deptname string, address string ) partitioned by (province string)row format delimited fields terminated by ' 'location '/input/demo';//手动增加partition字段及外部目录:alter table dept_part add partition (province='BOSTON') location '/input/demo/BOSTON';//手动增加partition字段(自动生成partition目录)alter table dept_part add partition (province='NEW YORK');1234567891011121314

表类型四:桶表

进一步将内部表、外部表组织成桶表。

create table test_bucket_table( id int, name string ) clustered by (id) into 5 bucket;12345

创建表的方式

方式一 create + load

create [external] table table_name( col1_name col1_type, ... coln_name coln_type ) row format delimited fields terminated by ' '; //load laod data [local] inpth '本地文件(linux)/HDFS' [overwrite] into table table_name;123456789

方式二 like + load

//复制表结构 create table tableB like tableA; //首先必须要有tableA //load laod data [local] inpth '本地文件(linux)/HDFS' [overwrite] into table table_name;12345

方式三 as 创建表的同时加载date

create table tableB row format delimited filelds termianted by ',' as select * from tableA; //首先必须要有tableA create table emp_as row format delimited fields terminated by ',' as select empno,empname,salary from emp_part1;1234

方式四 create + insert

//创建表create table emp_insert( id int, name string, job string, salary float)row format delimited fields terminated by ',';//insert into insert into table emp_insert select empno,empname,empjob,salary from emp_part1 where day='20170308' and hour='14';1234567891011

date的方式

方式一

//加载本地文件到Hive表 --使用存储介质(移动硬盘) laod data local inpth '本地文件(linux)' [overwrite] into table table_name;123

方式二

//加载HDFS文件到hive表 --通过Flume等日志收集框架 laod data inpth 'HDFS文件' [overwrite] into table table_name;123

方式三

// laod data [local] inpth '文件' overwrite into table; //**hdfs dfs -put 本地目录及文件 表在HDFS所在的目录 desc formatted table_name; --找到table_name在HDFS上的目录123456

方式四

//创建表时通过select查询语句 create table tableB row format delimited filelds termianted by ',' as select * from tableA; 123

方式五

//先创建表,通过insert into table table_namea select * fom tableB12

方式六

//创建外部表示通过location指定数据所在目录 create extrnal table_name( col1_name col1_type, ... coln_name coln_type ) row format delimited fields terminated by ' '; location 'HDFS上的目录'123456789


几种导出date的方式

1.insert overwrite ... 导出到本地目录 insert overwrite local directory '/home/user01/export' row format delimited fields terminated by ' ' select * from emp_part1; 2.insert overwrite ... 导出到HDFS之上 insert overwrite directory '/export' select * from emp_part1 where day='20170308'; 3.hive -e 'HQL query' >> test bin/hive -e 'select * from db01.student' >> test.txt 4)sqoop12345678910

Hive 自定义函数函数

UDF的一种方式来处理原始文件的内容。某些字段包含[]。

Hive4种排序

命令/ /可以指定DESC递减ASC递增序

按[partition图输出]分配

集群

三种分组的区别

ROWSO号:无论COL2字段的值是否相等,行数都递增,例如,两个记录的值相等,但一个是第一个,第一个,第二个是第二个。

秩:当两个记录的COL2相等时,记录的行数是相同的,但下一个COL2值的行数增加n(n是重复次数),例如,有两个并列的第一,下一个第三,没有第二。

当两个上下记录的COL2相等时,下一个COL2值的行数增加了1,例如,两个是第一个并列的,而下一个是第二个。

另外,大数据初学者有什么不懂的可以关注微信公众号:程序员大牛和转发——我刚整理了一份大数据2018最新的0基础入门和进阶教程,无私分享


猜你喜欢

转载自blog.csdn.net/qq_41893518/article/details/80647948