#數(shù)據(jù)的導(dǎo)入
load方式:
load data [local] inpath '/path' [overwrite] into table tableName partition(type='');
注:
1. Load 操作只是單純的復(fù)制/移動(dòng)操作,將數(shù)據(jù)文件移動(dòng)到 Hive 表對(duì)應(yīng)的位置
2. 指定了 local 會(huì)從本地文件系統(tǒng)中加載數(shù)據(jù), 如果沒(méi)有指定 local, 會(huì)從hdfs上加載數(shù)據(jù)
3. 指定了 overwrite 關(guān)鍵字,首先將目標(biāo)表下的數(shù)據(jù)刪除后,然后將新數(shù)據(jù)添加到表中
4. 在加載數(shù)據(jù)時(shí), hive與mysql的區(qū)別
hive是讀時(shí)模式,也就是說(shuō)在加載數(shù)據(jù)時(shí),hive不會(huì)檢查加載的數(shù)據(jù)是否符合規(guī)范;
關(guān)系型數(shù)據(jù)庫(kù)(mysql)是嚴(yán)格寫(xiě)時(shí)模式,如果寫(xiě)入的數(shù)據(jù)有誤,會(huì)報(bào)錯(cuò);
insert方式:
insert into table tablename [partition(type='')] select * from xxx ;
insert overwrite table tablename [partition(type='')] select * from xxx ;
as方式 既能創(chuàng)建表,還同時(shí)具備導(dǎo)數(shù)據(jù)功能:
create table if not exists 要?jiǎng)?chuàng)建的表名稱(chēng)
as
select 字段a,字段b from 已經(jīng)存在的表 where xxx ;
#導(dǎo)出數(shù)據(jù):
1、從hive表導(dǎo)出到本地目錄
2俯邓、從hive表導(dǎo)出到hdfs目錄
3骡楼、 > 重定向到文件中
1、
insert overwrite local directory '/home/hivedata/exp2'
row format delimited fields terminated by '\t'
select * from aa7;
2稽鞭、
insert overwrite directory '/hivedata/exp2'
row format delimited fields terminated by ','
select * from aa7;
3鸟整、
hive -e "use 數(shù)據(jù)庫(kù)名;select * from 表名" > /home/hivedata/exp3;
#修改表
動(dòng)態(tài)添加分區(qū):
可以在select語(yǔ)句里面通過(guò)使用分區(qū)值來(lái)動(dòng)態(tài)指明分區(qū)
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert into table 表名 partition (age) select id, name, tel, age from 表名;
修改分區(qū)中的數(shù)據(jù)路徑:
ALTER TABLE 表名 PARTITION (date='2016') SET LOCATION "數(shù)據(jù)路徑" ;
修改分區(qū)名稱(chēng):
ALTER TABLE 表名 PARTITION (date='原來(lái)的分區(qū)字段名稱(chēng)') RENAME TO PARTITION ( date='要修改后的字段名稱(chēng)') ;
添加列:
ALTER TABLE 表名 ADD COLUMNS ( 添加字段的名稱(chēng) 數(shù)據(jù)類(lèi)型 );
//在所有存在的列后面,但是在分區(qū)列之前添加一列
例如給hive表temptable 添加字段 a,b
alter table temptable add columns ( a string, b string );
表的重命名:
alter table 舊表名 rename to 新表名;