Hive之——Hive表操作
阿新 • • 發佈:2019-01-08
一、Hive基本使用——資料型別
1、基本資料型別
tinyint, smallint, int, bigint, boolean, float, double, string, binary, timestamp, decimal, char, varchar, date
2、集合型別
- array: array型別是由一系列相同資料型別的元素組成,這些元素可以通過下標來訪問,例array[i]
- map: map包含key->value鍵值對,可以通過key訪問元素,例map['key']
- struct: 可以包含不同資料型別的元素,這些元素可以是通過"點語法"方式獲得,裡struct.key1
二、Hive表操作
- 顯示所有表
show tables;
- 顯示錶的表述資訊
desc [extended, formatted] tablename;
- 顯示建表語句
show create table tablename;
- 刪除表
drop table tablename;
三、相關注意項
1、關閉Hadoop的安全模式
hadoop dfsadmin -safemode leave
2、hive命令列顯示當前所在的資料庫
set hive.cli.print.current.db=true;
3、hive命令列顯示查詢的列表
set hive.cli.print.header=true;
四、建表例項
#建立資料表 drop table testtable; create table if not exists testtable ( name string comment 'name value', address string comment 'address value' ) row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile; #檢視資料表描述資訊 desc testtable; desc extended testtable; desc formatted testtable; #從本地檔案載入資料並覆蓋掉原表中的資料 load data local inpath '/usr/local/src/data' overwrite into table testtable; 從本地檔案載入資料,不覆蓋原表中的資料 load data local inpath '/usr/local/src/data' into table testtable; #建立一個外部表 drop table if exists employees; create external table if not exists employees( name string, salary float, subordinates array<string>, deductions map<string, float>, address struct<street:string, city:string, state:string, zip:int> ) row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':' lines terminated by '\n' stored as textfile location '/data/'; #插入employees中的資料格式 liuyazhuang 123 a1,a2,a3 k1:1,k2:2,k3:3 s1,s2,s3,9
- 提示
1、select * from 表 [limit count]
2、通過分割槽表的分割槽條件查詢
五、Hive建表的其他操作
1、由一個表建立另一個表
create table lyz1 like lyz;
2、從其他表查詢建立表
create table lyz1 as select name, addr from lyz;
六、Hive不同檔案讀取對比
1、stored as textfile
直接檢視檔案hadoop fs -text
2、stored as sequencefile
hadoop fs -text
3、stored as rcfile
hive -service rcfilecat path
4、stored as inputformat 'class' outformat 'class'
七、Hive使用SerDe
- SerDe是"Serializer"和"Deserializer"的簡寫
- Hive使用SerDe(和FileFormat)來讀、寫表的行
- 讀寫資料的順序如下:
- HDFS檔案->InputFileFormat-><key, value>->Deserializer->row物件
- Row物件->Serializer-><key, value>->OutputFileFormat->HDFS
八、Hive分割槽表
1、分割槽
在Hive select查詢中一般會掃描整個表內容,會消耗很多時間做沒必要的工作
分割槽表指的是在建立時指定partition的分割槽空間
2、分割槽語法
create table tablename(
name string
)
partitioned by (key type, ...)
3、建立一個分割槽表
drop table if exists employees;
create table if not exists employees(
name string,
salary float,
subordinates array<string>,
deductions map<string, float>,
address struct<street:string, city:string, state:string, zip:int>
)
partitioned by (st string, type string)
row format delimited
fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n'
stored as textfile;
4、Hive分割槽表操作
1) 增加分割槽alter table tablename add if not exists partition(country='xxx'[, state='yyy']);
2) 刪除分割槽alter table tablename drop if exists partition(country='xxx'[,state='yyyy']);
3) 查看錶中的分割槽show partitions tablename;
九、Hive分桶
1、分桶
對於每一個表(table)或者分割槽,Hive可以進一步組成桶,也就是說桶是更為系列度的資料範圍劃分。Hive是針對某一列進行分桶。
Hive採用對列值雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶中。
2、好處
獲得更高的查詢處理效率
使取樣更高效
3、分桶例項
drop table if exists bucketed_user;
create table if not exists bucketed_user(
id int,
name string
)
clustered by(id) sorted by(name) into 4 buckets
row format delimited fields terminated by '\t'
sorted as textfile;
set hive.enforce.bucketing=true;
insert overwrite table bucketed_user select addr, name from testtext;