Hive 資料模型
Hive 資料表有五種類型:内部表,外部表,分區表,桶表,視圖表,預設以 tab 分隔
* MySQL (Oracle) 表預設以逗号分隔,是以,要想導入 MySQL(Oracle) 資料,需要設定分隔符,在建表語句後加:
row format delimited fields terminated by ',';
内部表: 相當于 MySQL 中的表,将資料儲存到Hive 自己的資料倉庫目錄中:/usr/hive/warehouse
例子:
create table emp
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int
);
導入資料到表中:本地、HDFS
load語句、insert語句
load語句相當于ctrl+X
load data inpath '/scott/emp.csv' into table emp; ----> 導入HDFS
load data local inpath '/root/temp/***' into table emp; ----> 導入本地檔案
建立表,并且指定分隔符
create table emp1
)row format delimited fields terminated by ',';
建立部門表,儲存部門資料
create table dept
(deptno int,
dname string,
loc string
load data inpath '/scott/dept.csv' into table dept;
外部表:相對于内部表,資料不在自己的資料倉庫中,隻儲存資料的元資訊
例子:
(*)實驗的資料
[root@bigdata11 ~]# hdfs dfs -cat /students/student01.txt
1,Tom,23
2,Mary,24
[root@bigdata11 ~]# hdfs dfs -cat /students/student02.txt
3,Mike,26
(*)定義:(1)表結構 (2)指向的路徑
create external table students_ext
(sid int,sname string,age int)
row format delimited fields terminated by ','
location '/students';
分區表:将資料按照設定的條件分開存儲,提高查詢效率,分區-----> 目錄
(*)根據員工的部門号建立分區
create table emp_part
comm int
)partitioned by (deptno int)
row format delimited fields terminated by ',';
往分區表中導入資料:指明分區
insert into table emp_part partition(deptno=10) select empno,ename,job,mgr,hiredate,sal,comm from emp1 where deptno=10;
insert into table emp_part partition(deptno=20) select empno,ename,job,mgr,hiredate,sal,comm from emp1 where deptno=20;
insert into table emp_part partition(deptno=30) select empno,ename,job,mgr,hiredate,sal,comm from emp1 where deptno=30;
桶 表: 本質上也是一種分區表,類似 hash 分區 桶 ----> 檔案
建立一個桶表,按照員工的職位job分桶
create table emp_bucket
)clustered by (job) into 4 buckets
使用桶表,需要打開一個開關
set hive.enforce.bucketing=true;
使用子查詢插入資料
insert into emp_bucket select * from emp1;
視圖表:視圖表是一個虛表,不存儲資料,用來簡化複雜的查詢
查詢部門名稱、員工的姓名
create view myview
as
select dept.dname,emp1.ename
from emp1,dept
where emp1.deptno=dept.deptno;
select * from myview;
本文轉自 tianshuai369 51CTO部落格,原文連結:http://blog.51cto.com/songqinglong/2058475