Hive的數據模型

內部表(Table)

內部表與數據庫中的Table在概念上是類似的

每一個Table在Hive上都有一個對應的目錄存儲數據

所有的Table數據(不包括External Table)都保存在這個目錄中

刪除表時,元數據和數據都會刪除

創建內部表

--創建t1表

CREATE TABLE t1(
    tid int,
    tname string,
    age int
);

指定存儲數據的位置

CREATE TABLE t2(
    tid int,
    tname string,
    age int
)
LOCATION '/mytable/hive/t2';

指定列分隔符

CREATE TABLE t3(
    tid int,
    tname string,
    age int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

從已有的表創建並指定分隔符爲逗號

CREATE TABLE t4 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
AS SELECT * FROM tablename;

分區表(Partition)

使用分區可以提高查詢的效率

partition 對應數據庫中的Partition列的密集索引

在Hive中,表中的一個Partition對應表下的一個目錄,所有的Partition的數據都存儲在對應的目錄中

創建分區表

CREATE TABLE partition_table(
    sid int,
    sname string
)PARTITIONED BY (gender string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

插入數據

INSERT INTO TABLE partition_table partition(gender='M')
SELECT sid,sname FROM table_name WHERE gender='M';

查看對比分區表與沒有分區表的執行計劃,執行計劃由從上往下,從右往左的順序。

explain SELECT * FROM partition_table WHERE gender='M';
explain SELECT * FROM student1;

外部表

指向已經在HDFS中存在的數據,可以創建Partition

它和內部表在元數據的組織是相同的,而實際數據的存儲則有較大的差異

外部表只有一個過程,加載數據和創建表同時完成,並不會移動數據到數據倉庫的目錄中,只是與外部數據建立一個鏈接。當刪除一個外部表時,僅刪除該鏈接。

創建外部表

CREATE EXTERNAL TABLE external_student(
    sid int,
    sname string,
    age int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 'hdfs_location';

桶表(Bucket Table)

降低系統的熱塊,提高查詢的速度

桶表是對數據進行哈希取值,然後放到不同的文件中

創建桶表

CREATE TABLE bucket_table(
    sid int,
    sname string,
    age int
)
CLUSTERED BY(sname) INTO 5 BUCKETS;

視圖(View)

視圖是一種虛表,是一個邏輯概念;可以跨越多張表

視圖建立在已有表的基礎之上,視圖賴以建立的這些表稱爲基表

視圖可以簡化複雜的查詢

創建視圖

CREATE VIEW onion_referrers(url COMMENT 'URL of Referring page')
  COMMENT 'Referrers to The Onion website'
  AS
  SELECT DISTINCT referrer_url
  FROM page_view
  WHERE page_url='http://www.theonion.com';

刪除視圖

DROP VIEW onion_referrers;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章