HIVE系统学习(一)

第一章、基础知识

1、Hive诞生背景

Hive的出现是为了解决存储在HDFS之上的结构化和半结构化数据的存储和分析,通过他所提供的类似与SQL的HQL方便SQL用户有效的使用数据模型

2、Hive使用场景

Hive最适合于数据仓库应用程序,使用该程序进行相关的静态数据分析,不需要快速的相应给出结果,而且数据本身不会频繁的发生变化

3、Hive缺点

Hive不是一个完整的数据库

Hive不支持记录级别的更新、插入、删除操作

Hive查询延时较大

Hive不支持事务

Hive不符合ANSI SQL标准

4、Hive底层依赖

MapReduce:

是一种计算模型,该模型可以将大型数据处理任务分割成很多单个、可以在服务器集群中并行的执行的任务

HDFS:

Hadoop之上的分布式文件系统,通常默认每个块是64M或者它的整数倍,这样保证最小的磁盘寻址次数进行写入和读取,从而提高性能,同时每份数据会冗余多份

5、Hive的替代工具

Pig:是一种数据流语言,用户需要定义一些列的声明语句来定义某些关系之间的联系,每个新的关系都会执行新的数据转换过程,Pig会查找这些声明,然后创建一些有序的MapReduce任务

HBase:是一个分布式、可伸缩的数据存储、其支持行级别的数据更新、快速查询、行级事务

第二章、基础操作

1、Hive命令

  1. 启动:hive
  • hive -help

2、beeline使用

  1. jdbc:hive2://10.100.3.112:10000

3、hcat命令行

hcat { -e "<query>" | -f "<filepath>" } [ -g "<group>" ] [ -p "<perms>" ] [ -D"<name>=<value>" ]

选项

描述

实例

-e

通过命令行执行DDL语句

hcat -e  "show tables"

-f

执行包含DDL语句的脚本

hcat -f xx.sql

-g

为创建的表指定组

hcat -g mygroup

-p

为创建的表指定目录权限

hcat -p rwxr-xr-x

-D

将键值对以java系统属性传递给HCatalog

hcat -D log.level=INFO

-h

提示用法帮助信息

hcat -h或 hcat

4、hive参数的传递

  1. -hivevar tbname='t4' -hivevar count=10 -e 'select * from ${hivevar:tbname} limit ${hivevar:count}'
  2. -hivevar tbname=’a’ -hivevar count=10 -f filename.hql
  3. -hiveconf tbname=’a’ – hiveconf count=10 -f filename.hql
  4. -hiveconf tbname=’a’ -hiveconf count=10 -e ‘select * from ${hivevar:tbname} limit ${hivevar:count}’

5、辅助命令

  1. :提示hive中能够支持的函数和运算符
  2. functions:显示所有的函数
  1. function 函数名:提示函数的解释信息

第三章、数据类型和文件格式

1、基本数据类型

数据类型

长度

实例

TINYINT

1byte有符合整数

20

SMALINT

2byte有符合整数

20

INT

4byte有符合整数

20

BIGINT

8byte有符合整数

20

BOOLEAN

布尔类型,true,false

true

FLOAT

单精度浮点数

3.14159

DOUBLE

双精度浮点数

3.14159

STRING

字符串,可以使用单引号或者双引号

'zhangsan' ,"zhangsan"

TIMESTAMP

整数,浮点数或者字符串

BINARY

字节数组

2、集合数据类型

数据类型

描述

实例

STRUCT

和C语言中的struct或者对象类似,都可以通过点符号来访问元素内容,例如,如果某个列的数据类型是STRUCT{first STRING,last STRING},那么第1个元素可以通过 字段.first来应用

struct('john','doe')

MAP

MAP是一组键值对元组集合,使用元组表示法(例如['key'])可以访问元素。例如如果某个列的数据是MAP,那么可以通过字段名['key']来访问

map('first','john','last','doe')

ARRAY

数组是一组具有相同类型和名称变量的集合,这些变量称为数组的元素,数组从0开始

Array('john','doe')

第四章、数据定义

1、Hive中数据库

Hive中数据库的概念本质上仅仅是表的一个目录和命名空间,Hive会为每个数据库创建一个目录,数据库中的表会以目录中的子目录的形式存储

2、Hive数据库目录的位置

这个目录可以设置,hive.metastore.warehouse.dir,默认目录是/user/hive/warehouse,数据库的目录默认以.db结尾

3、Hive中数据库创建

  1. 命令进入后默认是default库
  • create database [IF NOT EXISTS ] 表名;
  • show databases;
  • show databases Like/RLike '*字符*'
  • use 库名
  • set hive.cli.print.current.db=true
  • drop database [IF EXISTS]  表名 [CASCADE] (加上这个参数会先删除库里面的表数据,在删除库)

4、Hive中表的创建

  • create table [if not exists] 表名(id INT);
  1. 对传统的SQL进行了扩展,比如增加了位置存储,以及存储的格式
  2. 自动给表增加两个属性,一个是last_modified_by(最后一次修改表的用户),last_modified_time(最后一次修改表时间)
  • create table if not exists 表名 like 表名
  • show tables [in 库名];
  • show tables '*字符*’
  • describe  [formatted/extended]  表名

5、Hive中表分类

  • HQL语句并不适合外部表,而且删除的数据数据不会删除
    • create external table stocks(id String,name String) row format delimited fields terminated by ',' location '路径'
    1. table employees(id String,name String) partitioned by (age String);
    • show partitions 表名;

6、自定义存储格式

  • stored as textfile
  • SEQUENCEFILE和RCFILE
  • DerDe

第五章、HiveQL数据操作

1、向表中装载数据

  1. data [local] inpath '${env:HOME}/路径' overwrite into table 表明 [partition (id ='字段名')]
  2. :表示的本地路径还是hdfs路径
  3. :有就覆盖,没有就写入
  1. :可以是一个目录,但是里面不能有文件夹

2、通过查询向表中增加数据

  1. overwrite/into table 表明 select * from 表名
  2. :会覆盖里面的内容
  3. :表示数据的追加

3、动态分区插入

  1. overwrite table 表名 partition(country,state) select ... se.cnty,se.st from 表名 se
  2. 最后两列来确定分区字段的值

4、单个查询语句中创建表并加载数据

  1. table 表名 AS select 字段 from 表名

5、导出数据

insert overwrite local directory '路径'  select 字段 from 表名

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值