转载请注明出处:https://blog.csdn.net/l1028386804/article/details/80547441
一、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;