Hive加載數(shù)據(jù)
在Hive中建好表之后尼斧,需要將數(shù)據(jù)加載進來己单,以便做后續(xù)查詢分析涕滋,本文介紹向Hive表中加載數(shù)據(jù)的幾種方式。
建表時候直接指定
如果你的數(shù)據(jù)已經(jīng)在HDFS上存在浪耘,已經(jīng)為結構化數(shù)據(jù),并且數(shù)據(jù)所在的HDFS路徑不需要維護塑崖,那么可以直接在建表的時候使用location指定數(shù)據(jù)所在的HDFS路徑即可七冲。
CREATE [EXTERNAL] TABLE t_lxw1234 (
day STRING,
url STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
stored as textfile
location '/tmp/lxw1234/';
這里內(nèi)部表和外部表都可以指定,但需要注意规婆,如果是內(nèi)部表澜躺,那么在DROP該表的時候,同時會將LOCATION所指定的目錄一起刪除抒蚜。
從本地文件系統(tǒng)或者HDFS的一個目錄中加載
如果數(shù)據(jù)在本地掘鄙,或者HDFS的某一個目錄下,需要加載到目標中或分區(qū)中嗡髓,那么使用LOAD DATA命令即可加載數(shù)據(jù):
- 加載本地文件
LOAD DATA LOCAL INPATH ‘/home/lxw1234/t_lxw1234/’
INTO TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’);
- 加載HDFS文件
LOAD DATA INPATH ‘/user/lxw1234/t_lxw1234/’
INTO TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’);
從一個子查詢中加載數(shù)據(jù)
INSERT overwrite TABLE t_lxw1234 PARTITION (day = ‘2015-06-15’)
SELECT day,url from source_table;
導出Hive中的數(shù)據(jù)到文件系統(tǒng)
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/lxw1234/'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
SELECT * FROM t_lxw1234;
Ps:其他
- order by(全局排序) vs. sort by(分區(qū)內(nèi)排序)
- distribute by vs. cluster by(類似distribute by 操漠,自動排序)
- Hive查詢中有兩個虛擬列:
- INPUT__FILE__NAME:數(shù)據(jù)對應的HDFS文件名;
- BLOCK__OFFSET__INSIDE__FILE:該行記錄在文件中的偏移量饿这;