Hive 数据仓库技术

HIve 的基本使用

1.概述

Hive 是建立在Hadoop上的数据仓库基础构架。用于进行数据的ETL(Extract、Translation、Load)提取、转化、加载。不提供OLTP(在线事务处理),多使用在大数据集的批处理作业。

2.架构

在这里插入图片描述

特性:

① Hive存储文件的系统使用的HDFS
② Hive计算模型使用的是 MapReduce
③ 实时性很差。
④ 容易扩展自己的存储能力和计算能力。

3.安装使用

3.1 前置条件:

·1. 可用的MySQL服务
MySQL数据库的编码必须是Latin1编码

·2. 正常运行的HDFS、YARN
必须配置HADOOP_HOME环境变量,这样Hive可以通过HADOOP_HOME环境变量感知用户的Hadoop计算集群的位置和规模。

3.2 安装步骤
① 解压安装包
② hive-site.xml

进入conf/文件夹,创建hive-site.xml文件。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://你的主机名:3306/hive?createDatabaseIfNotExist=true</value>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
  </property>

</configuration>
③ 将MySQL的驱动jar拷贝到lib目录下
cp ~/mysql-connector-java-5.1.10-bin.jar lib/
  • 注意 : 尽量不要使用 mysql-connector-java-5.1.18.jar 会出现各种错误。
④ 配置HIVE_HOME环境变量

4.启动

单用户模式
hive
多用户模式
  • 后台启动服务
hiveserver2 >/dev/null 2>&1 &  
  • 进入控制台
beeline -u jdbc:hive2://你的主机名:10000 -n root 

5.DDL

5.1 数据类型

Hive支持原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括数组,map,struct。下面是Hive数据类型的一个总结:

原始类型
类型 描述 字面量示例
BOOLEAN 布尔值,可选值true/false true
TINYINT 1字节的有符号整数 -128~127 1Y
SMALLINT 2个字节的有符号整数,-32768~32767 1S
INT 4个字节的带符号整数 1
BIGINT 8字节带符号整数 1L
FLOAT 4字节单精度浮点数1.0
DOUBLE 8字节双精度浮点数 1.0
DEICIMAL 任意精度的带符号小数 1.0
STRING 字符串,变长 “Abc”
VARCHAR 变长字符串 “Aac”
CHAR 固定长度字符串 “a”,’b’
BINARY 字节数组
TIMESTAMP 时间戳,纳秒精度 122327493795
DATE 日期 ‘2020-01-01
复杂类型
类型 描述 字面量示例
ARRAY 有序的的同类型的集合 array(1,2)
MAP key-value,key必须为原始类型,value可以任意类型 map(‘a’,1,’b’,2)
STRUCT 字段集合,类型可以不同 struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0)
5.2 库操作
  • ① 查看所有库
show databases;
  • ② 创建库
create database 库名;

指定位置的创建库(schema 等价 database)
关键字: location

create schema if not exists 库名 location 'hdfs:///指定的位置';
  • ③ 使用库
use 库名;
  • ④ 查看当前库
select current_database();

查看当前库详细信息

desc database 库名;
  • ⑤ 删除库
    默认直接删除 关键字:restrict
drop database 库名 ;

级联删除 关键字:cascade

drop database 表名 cascade;
5.3 表操作
默认分隔符

在创建完表之后,需要准备数据,其中hive默认的字段分割符号如下,因此上述建表等价写法如下:

分隔符 描述
\n 对于文本文件而言,一行表示一条文本记录,因此可以使用\n表示
^A(Ctrl+A) 用于分割字符的列,在创建表的时候可以使用八进制’\001’表示
^B(Ctrl+B) 用于分割ARRAY、STRUCT或者MAP中的元素,在创建表的时候可以使用八进制’\002’表示
^C(Ctrl+C) 用于分割MAP中的key,value,在创建表的时候可以使用八进制’\003’表示
  • 数据样本:
    在这里插入图片描述
①创建表
  • 使用不同分隔符:
# 默认分隔符格式(可省略)
create table if not exists 表名 (
  id int,
  name varchar(32),
  age int,
  salary double,
  birthDay date,
  hobbies array<string>,
  address struct<street:string,country:string>,
  detail map<string,double>
)
row format delimited
fields terminated by '\001'
collection items terminated by '\002'
map keys terminated by '\003'
lines terminated by '\n'
stored as textfile;
# -------------------------------------------------------------------

#自定义分隔符
create table if not exists 表名(
  id int,
  name string,
  sex boolean,
  age int,
  salary double,
  hobbies array<string>,
  card map<string,string>,
  address struct<country:string,city:string>
)
row format delimited
fields terminated by ','
collection items terminated by '|'
map keys terminated by '>'
lines terminated by '\n'
stored as textfile;

# 数据样本:
1,zhangsan,true,18,15000,TV|Game,001>建设|002>招商,china|bj 
2,lisi,true,28,15000,TV|Game,001>建设|002>招商,china|bj 
3,wangwu,false,38,5000,TV|Game,001>建设|002>招商,china|sh

#--------------------------------------------------------------------

#正则格式
create table if not exists 表名(
     ip string,
     app varchar(32),
     service string,
     last_time timestamp
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex"="^(.*)\\s(.*)\\s(.*)\\s(.*\\s.*)$"
);

#数据样本:
192.168.0.1 qq com.xx.xx.XxxService#xx 2018-10-10 10:10:00
192.168.2.1 qq com.xx.xx.XxxService#xx 2018-10-10 10:10:00
192.168.0.1 xx com.xx.xx.XxxService#xx 2018-10-10 10:10:00
192.168.202.1 qq com.xx.xx.XxxService#xx 2018-10-10 10:10:00

#--------------------------------------------------------------------

#CSV格式(无限制表格)
CREATE TABLE if not exists 表名(
  id int,
  item string,
  count int,
  price double
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = ",",
   "escapeChar"    = "\\"
);

#数据样本:
1,apple,3,20.5
2,orange,2,21.5
3,pear,2,22.5
4,banana,1,23.0

#--------------------------------------------------------------------

#JSON格式
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值