Hive基础文献

针对Hive整理了部分资料,有需要的同学们可以看下,仅展示Hive中部分资料,如有遗漏,请谅解,希望能帮到有需要的同学!

笔者:Zaki

适用范围:掌握基本SQL语法,日常查询统计;

  1. 关系型&非关系型:关系型(二维表,行列组成,响应速度毫秒级:本地SQL),非关系型(数据体量超过GB级,多范式,每个属性都和主键有直接关系)

  1. 事务:原子性、一致性、隔离性、持久性,如账户一方增加则另一方必须减少

  1. 数据仓库:多元化系统--数据仓库--BI系统,避免BI系统对各大系统发起数据提取(攻击指令),BI属于下游系统

  1. 建表:create table;Hive中使用分隔符对每行字段进行分隔【row format delimited fields terminated by ‘,’】

  1. Hive集合数据类型【提高数据吞吐量,达到TB/PB级】:STRUCT(通过“点”访问元素内容),MAP(键--值),ARRAY(数组,按照元素序列获取)

数据类型

描述

访问

STRUCT

STRUCT(firName STRING, lastName STRING)

字段名.firName

MAP

MAP("Salary","8000","Late","100")

通过键获取值

ARRAY

ARRAY("Salary","Late")

按元素获取,编号从0开始,同python一致

  1. Hive数据库:存储以来HDFS,计算依赖MapReduce

  1. HiveQL数据定义语言:

操作

语法

备注说明

建表

create database sogou

建表报错覆盖

create database if not exists sogou

查所有数据库

show databases

筛选数据库

show databases like 's.*'

创建数据库目录

create database bank comment 'Inter Banking'

Inter Banking'作为目录的业务描述

删除数据库

drop database sougou

删表报错

drop database if exists sogou

数据库存在再删除,不存在则不

执行删除操作

删除执行错误

drop database if exists enterpricse cascade

enterpricse为数据库,若存在单个数据库对应

多个表,必须先删表,加上cascade使Hive自动

优先删除表

查表

show table in enterprise

查enterprise库下的所有表

建外部表

create external table

Hive控制内部表的数据生命周期,即删除内部表所有数据都清除,建立外部表在数据共享的情况下进行表删除,但其数据生命周期不受Hive控制

修改表

after table tableName rename to otherTableName

修改表名

删除表

drop table if exists product

防止执行报错

  1. Hive中的分区表:

类型

理论

说明

MySQL

将一张表分解成多个更小的、容易管理的部分,逻辑上只有一张表,底层是由多个物理分区组成,物理分区可以分布在不同的物理服务器上

Hive

数据存储在HDFS上,Hive的分区是创建层级目录的一种方式

Hive创建分区用partitioned by,此处定义的列是目录名

类型

语法

说明

区别

静态分区表

partition by (sex string , native string)

创建多个分区,分区字段的顺序决定了HDFS系统上的目录顺序(sex为父目录,native为子目录);但过滤仅为native则扫描所有的sex

插入数据必须先知道有哪些分区类型

动态分区表

开启动态分区功能:

set hive exec.dynamic.partition=True;

set hive.exec.dynamic.partition.mode=nonstrict;

set hice.exec.max.dynamic.partitons.prenode=1000

此属性的默认值为strict,意思是不允许分区列全是动态的。将其值设置为nonstrict,将所有的分区列设置为动态的;最大动态分区为1000

不用指定分区目录,由系统自动选择

  1. Hive中的外部导入和导出:

  1. 插入符合条件的数据:insert overwrite table sgou.sougou_xj select * from sogou.sougou_500w where keyword like ‘%仙剑奇侠传%’

  1. 单个查询语句创建表并加载数据:create table sougou.sougou_xj_backup as select * from sogou.sogou_xj;

  1. HiveQL数据查询语句(展示部分)

语法

区别

order by

对查询结果集全局排序,消耗时间长

sort by

局部排序,消耗时长短,用于数据量级较大

inner join

内连接【等值连接&不等值连接】

join

自然连接,2张表中寻找哪些数据类型和列名相同的字段,自动连接起来,无法匹配的记录不会保留;可以不使用on

left outer join

左外连接,左表查询信息全部显示,右表符合条件显示,不符合空值填充

right outer join

右外连接,右表查询信息全部显示,左表符合条件显示,不符合空值填充

full outer join

全外连接,查询结果为左外连接和右外连接的和

自连接,将自身表的镜像当成另外一个表

  1. HiveQL数据查询进阶(内置函数&日志解析&Sqoop)

  1. 内置函数

HiveQL查询进阶

项目

类型

语法(部分)

内置函数

数学函数

四则运算,ceil【向上取】,floor【向下取】

字符函数

lower【转小写】,upper【转大写】,length【长度】,trim【去前后空格】

get_json_object【用于处理json格式数据】

收集函数

转换函数

cast

日期函数

to_date

条件函数

case when

聚合函数

count,sum,min,max,avg等

表生成函数

  1. Hive构建搜索引擎日志数据分析系统(后台常用分析用户访问情况,此处不做展示)

举例【UID分析】:select sum(IF (uids.cnt =1,1,0)) , sum(IF (uids.cnt =2,1,0)), sum(IF (uids.cnt =3,1,0)), sum(IF (uids.cnt >3,1,0)) from (select uid count(*) as cnt from sogou.sogou_ext_20111230 group by uid ) as uids;

  1. Sqoop应用与开发(此处不做过多展示)

介绍:Sqoop是一款ETL工具,负责将大数据平台处理完的结果数据导入关系型数据库中,或者将关系型数据库中的数据导入大数据平台

  1. Hive数据库对象与用户自定义函数

Hive数据库对象与用户自定义函数

项目

类型

语法(部分)

Hive视图

创建视图

create view [if not exists ] db_name.view_name as select …………

视图是只读型,不能对视图进行插入、删除、修改等操作;

删除视图语法:

drop view [if exists ] [db_name.]view_name;--结构语法

drop view if exists sogou.sogou_view

Hive分桶表

分桶表是相对于分区来说的,根据某列字段属性值的哈希值进行区分,对字段进行取模运算,余数相同的则分配在同一个桶中,一个桶对应一个文件,而分区表则是目录;

通过clustered by(字段名) into bucket_num buckets 分桶;

create table sogou_bucket(uid string, keword string) comment 'test'

clustered by(uid) into 5 buckets row …………分隔符;

启动MapReduce作业方式,不能使用load data loacl inpath加载数据;

set hive.enforce.bucketing=true--含义为分桶是否被强制执行;

自定义函数UDF

当前所有函数名称【包含自定义】

show functions;

describe function 函数名;--函数的简介;

UDF需要继承org.apache.hadoop.hive.ql.UDF,需要实现evaluate函数,该函数支持重载;

自定义聚合函数UDAF

UDAF必须要继承org.apache.hadoop.hive.ql.UDAF类和实现

org.apache.hadoop.hive.ql.exec.UDAFEvaluator接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值