Hive

**

数据仓库

**
数据仓库简写为DW或DWH,是面向主题的、集成的、非易失的和时变的数据集合。

元数据,主要记录数据仓库中模型的定义。各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态。

**

Hive

**
它是基于Hadoop的一个数据仓库工具。本质上是将SQL转化为MapReduce程序利用HDFS存储数据,利用MapReduce查询分析数据。

Hive组件

用户接口、元数据存储、解释器、编译器、优化器、执行器、

分层架构
源数据(ODS)、数据仓库(DW)、数据应用(DA或APP)。

为什么要分层?

  1. 用空间换取时间,提高最终使用数据的效率。
  2. 一步变多步,降低失败率,不需要重新处理。
  3. 进行数据集中格式统一便于分析。

Hive命令行

  1. -i 初始化HQL文件
  2. -e 从命令行执行指定的HQL
  3. -f 执行HQL脚本
  4. -v 输出执行的HQL语句到控制台
  5. -p 连接Hive Server的端口号

本地模式:客户端和hive服务在一台机器上
远程模式:客户端在其他机器上通过协议远程访问hive服务。

连接协议:!connect jdbc:hive2://node01:10000

hive的内外部表
内部表:表的结构化数据文件放置在默认的路径下,不能随意放。
/user/hive/warehouse/dbname.db/table_name

外部表:表的结构化文件可以位于hdfs的任意路径下,需要通过location指定清楚位置。

分区表是一种优化表,可以减少查询时的权标扫描。

分区表的创建语句
create table user(id int,name string,country string) partitioned by (countryside string) row format delimited fields terminated by ‘,’;
注意:分区字段不能是表中已经存在的字段。

分区表的数据导入
load data local inpath ‘/root/hivedata/user.txt’ into table user partition(countryside=‘china’);

分区表的使用
select * from user where countryside=“china”;

分桶表可以减少join查询时笛卡尔积。
分桶表创建
开启分桶功能
set hive.enforce.bucketing=true;
set mapreduce.job.reduces-4;

create table student(sno int,sname string,sex string ,sage int ,sdept string) clustered by(sno) into 4 buckets row format delimited fields terminated by ‘,’;

导入分桶表
insert overwrite table student select * from stu cluster by(sno);
注意:分桶的字段必须是表中已经存在的。
分桶功能默认是关闭的,需要手动开启。
分桶表数从本质上来说就是数据文件被分开了。
分桶表的数据直接导入不能分开,只能简介导入,通过分桶查询导入。

当是同一个字段的时候
cluster by =distribute by + sort by

select * from student distribute by(sno) sort by (sno);
select * from student cluster by(sno);
是等效的。

hive中join操作
inner join :内关联,只显示符合join条件的结果。
outer join :外关联,符合条件的显示,不符合的显示null。
left join :左关联 以左表为准,左表显示全部,右表关联上的显示,关联不上的显示null。
right join :右关联,以右表为准,右表显示全部,左表关联上的显示,关联不上的显示Null.
left semi join :相当于内关联只显示左表的部分。
cross join:交叉相乘,笛卡尔积。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值