#hive 启动
hive>quit; --退出hive
hive> exit; --exit会影响之前的使用,所以需要下一句kill掉hadoop的进程
>hadoop job -kill jobid
hive>create database database_name; 创建数据库
如果数据库已经存在就会抛出一个错误信息,使用如下语句可以避免抛出错误信息:
hive>creat database if not exists database_name
hive> show databases; 查看数据库
如果数据库比较多的话,也可以用正则表达式来查看:
hive> show databases like 'h.*';
hive> use default; --使用哪个数据库
hive>show tables; --查看该数据库中的所有表
hive>show tables ‘*t*’; --支持模糊查询
hive> describe tab_name; --查看表的结构及表的路径
hive> describe database database_name; --查看数据库的描述及路径
可以用下面的命令来修改数据库的路径:
hive> creat database database_name location '路径';
hive> drop database if exists database_name; --删除空的数据库
hive> drop database if exists database_name cascade; --先删除数据库中的表再删除数据库
hive>show partitions t1; --查看表有哪些分区
修改表:
hive>alter table table_name rename to another_name; --修改表名
hive>drop table t1 ; --删除表t1
或者: hive> drop table if exists t1;
hive不支持修改表中数据,但是可以修改表结构,而不影响数据
有local的速度明显比没有local慢:
hive>load data inpath '/root/inner_table.dat' into table t1; 移动hdfs中数据到t1表中
hive>load data local inpath '/root/inner_table.dat' into table t1; 上传本地数据到hdfs中
hive> !ls; 查询当前linux文件夹下的文件
hive> dfs -ls /; 查询当前hdfs文件系统下 '/'目录下的文件
1.创建表
#建表(默认是内部表)
create table trade_detail(id bigint, account string, income double, expenses double, time string)
row format delimited fields terminated by '\t';
#建分区表
#普通表和分区表区别:有大量数据增加的需要建分区表
create table td_part(id bigint, account string, income double, expenses double, time string)
partitioned by (logdate string)
row format delimited fields terminated by '\t';
#建外部表
create external table td_ext(id bigint, account string, income double, expenses double, time string)
row format delimited fields terminated by '\t' location '/td_ext';
2.加载数据列表
#把本地数据装载到数据表,也就是在metastore上创建信息
load data local inpath '/root/a.txt' into table trade_detail;
#把HDFS上的数据装载到数据表
load data inpath '/target.txt' into table trade_detail;
#加载数据到分区表必须指明所属分区
load data local inpath './book.txt' overwrite into table book
partition (pubdate='2010-08-22');
3.Hive 的shell下可以执行HDFS和Linux命令
在Hive shell下执行hadoop命令行:
#比如:hadoop fs -ls /,在hive下可以这样执行:
hive> dfs -ls /;
在Hive shell下执行linux系统命令:
!cmd;
例如:!pwd;打印当前工作目录
在Hive shell下执行sql文件:
hive> source my.sql;
hive -S 以静默模式启动hive(不打印日志信息,纸打印结果);
hive -e "HiveQL",不进入hive的交互模式,直接执行命令;
当然也可以结合静默模式一起使用:hive -S -e "HiveQL"
4.另外一些常用的命令
#描述表结构
desc tablename;
#查看创建表信息
show create table tablename;
#查看表的分区
show partitions tablename;
基础命令
1 show databases; #查看某个数据库
2 use 数据库; #进入某个数据库
3 show tables; #展示所有表
4 desc 表名 #显示表结构
5 show partitions 表名; #显示表名的分区
6 show create table_name; #显示创建表的结构
7
8 #建表语句
9 use xxdb; create table xxx; #内部表
10 create table xxx like xxx; #创建一个表,结构与其他一样
create table xxx as xxx; #创建一个表,结构数据与其他一样,相当于复制一个表
11 use xxdb ;create external table xxx(1 int) partitoned by (d string) #分区表
12 alter table table-name set TBLPROPROTIES('EXTERNAL'='TURE'); #内部表转外部表
13 alter table table-name set TBLPROPROTIES('EXTERNAL'='FALSE'); #外部表转内部表
14
15 表结构修改
16 use xxxdb; alter table table_name rename to new_table_name; #重命名表
17 alter table table_name add columns(newscol1 int conment '新增'); #增加字段
18 alter table table_name change col_name new_col_name new_type; #修改字段
19 alter table table_name replace columns(col1 int,col2 string,col3string); #删除字段(COLUMNS中只放保留的字段)
20 use xxxdb; drop table table_name; #删除表
21
22 #删除分区
23 #注意:若是外部表,则还需要删除文件(hadoop fs -rm -r -f hdfspath)
24 alter table table_name drop if exists partitions (d='2016-07-01');
25 #字段类型
26 #tinyint ,smallint,int,bigint,float,decimal,boolean,string
27 #复合数据类型
28 #struct,array,map
复合数据类型
1 #array
2 create table person (name string ,work_locations array<string>)
3 ROW FORMAT DELIMITED
4 FIELDS TERMINATED BY '\t'
5 COLLECTION ITEMs TERMINATED BY ','