內部表(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;