HIVE外部表 分區表


HIVE外部表 分區表
    外部表
        創建hive表,經過檢查發現TBLS表中,hive表的類型為MANAGED_TABLE.

        在真實開發中,很可能在hdfs中已經有了數據,希望通過hive直接使用這些數據作為表內容。
        此時可以直接創建出hdfs文件夾,其中放置數據,再在hive中創建表管來管理,這種方式創建出來的表叫做外部表。

        #創建目錄,上傳已有文件
        hadoop fs -mkdir /data
        hadoop fs -put student.txt /datax/a.txt    
        hadoop fs -put student.txt /datax/b.txt    
        #在hive中創建外部表管理已有數據
        create external table ext_student(id int ,name string) row format delimited fields terminated by '\t' location '/datax';
        經過檢查發現可以使用其中的數據。成功的建立了一張外部表。

        #vim ppp.txt
            1    x
            2    y
            3    z
        #hadoop fs - put  peo.avi
        再在該目錄下手動創建文件,能不能查詢出來呢?
        發現是可以的。

        不管是內部表還是外部表,新增的文件都可以自動被應用。

        在刪除表時,內部表一旦刪除對應元數據和hdfs中的文件夾和文件都會被刪除。外部表只刪除元數據,對應的hdfs中的文件夾和文件不會被刪除。
    分區表
        hive也支持分區表
        對數據進行分區可以提高查詢時的效率
        普通表和分區表區別:有大量數據增加的需要建分區表
        create table book (id bigint, name string) partitioned by (category string) row format delimited fields terminated by '\t';
        在創建分區表時,partitioned字段可以不在字段列表中。生成的文件自動就會具有該字段。
        
        分區表加載數據
        load data local inpath './book_china.txt' overwrite into table book partition (category='china');
        load data local inpath './book_us.txt' overwrite into table book partition (pubdate='2015-01-11');
        
        select * from book;
        select * from book where pubdate='2010-08-22';
        經檢查發現分區也是一個目錄。
        此時手動創建目錄是無法被hive使用的,因為元數據庫中沒有記錄該分區。
        如果需要將自己創建的分區也能被識別,需要執行:
            ALTER TABLE book add  PARTITION (category = 'zazhi') location '/user/hive/warehouse/datax.db/book/category=zazhi';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM