hive 表資料載入、表刪除試驗
阿新 • • 發佈:2019-02-14
1. 非分割槽表
(1)load 載入資料
本地文字檔案a.txt中有一行'aaa',執行下面的命令。
在a.txt中新增一行'bbb',然後在執行下面的命令。
(2)load overwrite 載入資料
執行下面的命令。
編輯a.txt,使其只有一行'ccc',然後在執行下面的命令。
(3)刪除表
對於外部表,除了刪除表只刪除元資料而保留表資料目錄外,資料載入行為與內部表相同。
2. 分割槽表
(1)load 載入資料
本地文字檔案a.txt中有一行'aaa',執行下面的命令。
(2)load overwrite 載入資料(與非分割槽表類似,實驗略)
(3)alter table add partition 載入資料
執行下面的命令。
(4)刪除資料表
對於外部表,除了刪除表只刪除元資料而保留表資料目錄外,資料載入行為與內部表相同。
總結:
1. load與load overwrite的區別是:
load 每次執行生成新的資料檔案,檔案中是本次載入的資料。
load overwrite如表(或分割槽)的資料檔案不存在則生成,存在則重新生成資料檔案內容。
2. 內部表與外部表的區別是(無論是否分割槽):
刪除表時,內部表會刪除表的元資料和表資料目錄,外部表只會刪除元資料而保留資料目錄。
3. 分割槽表比非分割槽表多了一種alter table ... add partition的資料載入方式。
4. 對於分割槽表(無論內部還是外部),load與load overwrite會自動建立名為分割槽鍵值的目錄,而alter table ... add partition,只要用location指定資料檔案所在的目錄即可。
(1)load 載入資料
本地文字檔案a.txt中有一行'aaa',執行下面的命令。
CREATE TABLE t1 (name STRING);
LOAD DATA LOCAL INPATH '/home/grid/a.txt' INTO TABLE t1;
SELECT * FROM t1;
dfs -ls /user/hive/warehouse/test.db/t1;
執行命令及結果如圖1所示。
在a.txt中新增一行'bbb',然後在執行下面的命令。
LOAD DATA LOCAL INPATH '/home/grid/a.txt' INTO TABLE t1; SELECT * FROM t1; dfs -ls /user/hive/warehouse/test.db/t1;
執行命令及結果如圖2所示。
(2)load overwrite 載入資料
執行下面的命令。
CREATE TABLE t2 (name STRING);
LOAD DATA LOCAL INPATH '/home/grid/a.txt' OVERWRITE INTO TABLE t2;
SELECT * FROM t2;
dfs -ls /user/hive/warehouse/test.db/t2;
執行命令及結果如圖3所示。
編輯a.txt,使其只有一行'ccc',然後在執行下面的命令。
LOAD DATA LOCAL INPATH '/home/grid/a.txt' OVERWRITE INTO TABLE t2; SELECT * FROM t2; dfs -ls /user/hive/warehouse/test.db/t2;
執行命令及結果如圖4所示。
(3)刪除表
drop table t1;
drop table t2;
show tables;
dfs -ls /user/hive/warehouse/test.db;
執行命令及結果如圖5所示。
對於外部表,除了刪除表只刪除元資料而保留表資料目錄外,資料載入行為與內部表相同。
2. 分割槽表
(1)load 載入資料
本地文字檔案a.txt中有一行'aaa',執行下面的命令。
CREATE TABLE t1 (name STRING) PARTITIONED BY (country STRING, state STRING); LOAD DATA LOCAL INPATH '/home/grid/a.txt' INTO TABLE t1 PARTITION (country = 'US', state = 'CA'); SELECT * FROM t1; dfs -ls /user/hive/warehouse/test.db/t1/country=US/state=CA;
執行命令及結果如圖6所示。
(2)load overwrite 載入資料(與非分割槽表類似,實驗略)
(3)alter table add partition 載入資料
執行下面的命令。
SELECT * FROM t1;
ALTER TABLE t1 ADD PARTITION(country = 'US', state = 'CB') LOCATION '/a';
dfs -cp /user/hive/warehouse/test.db/t1/country=US/state=CA/a.txt /a;
dfs -ls /a;
SELECT * FROM t1;
dfs -rm /user/hive/warehouse/test.db/t1/country=US/state=CA/a.txt;
SELECT * FROM t1;
執行命令及結果如圖7所示。
(4)刪除資料表
dfs -ls /user/hive/warehouse/test.db;
dfs -ls /;
drop table t1;
show tables;
dfs -ls /user/hive/warehouse/test.db;
dfs -ls /;
執行命令及結果如圖8所示。
對於外部表,除了刪除表只刪除元資料而保留表資料目錄外,資料載入行為與內部表相同。
總結:
1. load與load overwrite的區別是:
load 每次執行生成新的資料檔案,檔案中是本次載入的資料。
load overwrite如表(或分割槽)的資料檔案不存在則生成,存在則重新生成資料檔案內容。
2. 內部表與外部表的區別是(無論是否分割槽):
刪除表時,內部表會刪除表的元資料和表資料目錄,外部表只會刪除元資料而保留資料目錄。
3. 分割槽表比非分割槽表多了一種alter table ... add partition的資料載入方式。
4. 對於分割槽表(無論內部還是外部),load與load overwrite會自動建立名為分割槽鍵值的目錄,而alter table ... add partition,只要用location指定資料檔案所在的目錄即可。