HIVE

来源:互联网 发布:虚拟币交易所源码 编辑:程序博客网 时间:2024/05/19 00:38

目标不同,设计需求就不同
业务仓库需要考虑三范式
数据仓库不用三范式,用宽表,以空间换时间

星型模型 把所有事实放在一个表里面,关联维度力度表

hive是局域hadoop的一个数据仓库,将结构化的数据文件映射为一张数据表,提供SQL查询功能,封装了mapreduce
这里写图片描述

HIVE将SQL语言编译为MapReduce,然后放在YARN里面执行
MySQL里面存储的是HIVE的配置信息,比如字段之间是用什么分隔符来分割的
HDFS里面保存了要处理的数据
简单的可以理解为HIVE就是将SQL语言转换为了MapReduce,其操作的并不是真实的数据包,还是原始的数据。

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name[(col_name data_type [COMMENT col_comment], ...)][COMMENT table_comment][PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)][CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS][ROW FORMAT row_format] [STORED AS file_format][LOCATION hdfs_path]

外部表

create external table t_test(id int,name string) \
row format delimited fields terminated by ‘\t’ \
stored as testfile \
location ‘/dir03’

load data local impath ‘/home/hadoop/test’ into table t_test

drop外部表时,原始数据不会被删除,内部表则会删除

建立分区表

create table t_test(id int,name string) \
partitioned by (class string) \
row format delimited \
fields terminated by ‘,’

load data local inpath ‘/home/hadoop/test’ into table t_test partition(class=yi)
在导入数据的时候会自动建立分区
在查询数据的时候会把分区字段加入
select count(1) from t_test where class=yi

分桶

分桶其实就是设置partioner,所以要合理的设置reducetask。它的作用是提高join的效率
create table t_test(id string,name string) \
clustered by (id) sort by (id) into 4 buckets;

insert into table t_test
select id,name from t_buck cluster by (id) in to t_test
show databases
use database_name
show tables
desc t_test
desc extended t_test
desc formatted t_test
tr

原创粉丝点击