天天看點

Hive 資料模型

                                                                             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;

本文轉自 菜鳥的征程 51CTO部落格,原文連結:http://blog.51cto.com/songqinglong/2058475