Hive外部表\內部表關聯數據


CREATE TABLE page_view(
     viewTime INT, 
     userid BIGINT,
     page_url STRING, 
     referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS TEXTFILE;

這里創建了表page_view,有表的注釋,一個字段ip的注釋,分區有兩列,分別是dt和country。
[ROW FORMAT DELIMITED]關鍵字,是用來設置創建的表在加載數據的時候,支持的列分隔符。
不同列之間用一個'\001'分割,

集合(例如array,map)的元素之間以'\002'隔開,

map中key和value用'\003'分割。

[STORED AS file_format]關鍵字是用來設置加載數據的數據類型,默認是TEXTFILE,如果文件數據是純文本,就是使用 [STORED AS TEXTFILE],然后從本地直接拷貝到HDFS上,hive直接可以識別數據。

創建外部表

如果數據已經存在HDFS的'/user/Hadoop/warehouse/page_view'上了,如果想創建表,指向這個路徑,就需要創建外部表:

CREATE EXTERNAL TABLE page_view(
     viewTime INT, 
     userid BIGINT,
     page_url STRING, 
     referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     country STRING COMMENT 'country of origination')
 COMMENT 'This is the staging page view table'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '/user/hadoop/warehouse/page_view';

創建表,有指定EXTERNAL就是外部表,沒有指定就是內部表,內部表在drop的時候會從HDFS上刪除數據,而外部表不會刪除。

外部表和內部表一樣,都可以有分區,如果指定了分區,那外部表建了之后,還要修改表添加分區。
外部表如果有分區,還可以加載數據,覆蓋分區數據,但是外部表刪除分區,對應分區的數據不會從HDFS上刪除,而內部表會刪除分區數據。

外部表關聯數據

-- 這種需要先創建分區
use test;
alter table fct_path_list_off_5levels partition (date="2017-09-14") set location 'hdfs://nameservice1/user/hive/warehouse/test.db/fct_path_list_off_5levels/date=2017-09-14';


-- 創建分區的時候指定數據文件
use test;
alter table fct_path_list_off_5levels add partition (date="2017-09-14") location 'hdfs://nameservice1/user/hive/warehouse/test.db/fct_path_list_off_5levels/date=2017-09-14';



免責聲明!

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



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