Hive的使用
先启动hive,start-dfs.sh,start-yarn.sh
常用命令
1、执行hql命令的几种方式
(1)进入hive终端。
(2)不进入终端,hive –e “hql命令”,适合短命令的执行。
(3)不进入终端,hive –f *.hql,命令存放在hql文件中,适合执行复杂或多条命令。
2、数据库操作
下面操作有时在mysql下,有时在hive下,有时在centos终端下,为了方便操作,可以在xshell下同时打开三个窗口。
(1)创建数据库:
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
(2)显示所有数据库:show databases [ like “**”];
(3)hive数据库元数据信息存在于mysql数据库中,可以登录mysql查看:
数据库是我们前面设置的:hadoop_hive,表是DBS
(先通过use hadoop_hive切换到hadoop_hive)
从表中可以知道hive数据库hive1存放在hdfs的位置,查看一下,目前为空。
(4)查看数据库信息也可以用
desc database [extended] dbName
(6)
切换当前数据库:use dbName;
默认提示符不显示当前数据库,可以通过设置让它显示出来。set hive.cli.print.current.db=true;
上述方法只对当前会话有效,如果永久有效,可以在hive-site.xml中增加如下配置:
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
(7)删除数据库drop database dbName;
(数据库是空的才可以,要级联删除最后加CASCADE)
3、表操作
(1)创建表
格式一:直接建表
完整格式:
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[SKEWED BY (col_name, col_name, ...) -- (Note: Available in Hive 0.10.0 and later)]
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] -- (Note: Available in Hive 0.6.0 and later)
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)] -- (Note: Available in Hive 0.6.0 and later)
[AS select_statement]; -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)
(内部表和外部表(加EXTERNAL)的区别:
内部表创建通常分创建表和加载数据两步;
外部表在创建表时就指定数据所在位置;
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
)
举例:创建雇员表emp(在hive1下),字段含义为:雇员编号,名字,岗位,经理编号,雇佣日期,薪水,津贴,部门编号。
CREATE TABLE emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
(2)查看表结构
describe 表名,查看详细的在命令后加formatted或extended
(3)修改表alter table
例如重命名:alter table emp rename to emp2;
(4)删除表 drop table 表名
(5)加载数据
格式1:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
LOCAL:本地系统,如果没有local那么就是指的HDFS的路径
OVERWRITE:是否数据覆盖,如果没有那么就是数据追加
格式2:用查询结果创建一个表
Create table emp1 as select * from emp;
(6)导出数据
```sql
INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/hivedaochu'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
select empno,ename,sal,deptno from emp;
11、查询
(1)查询emp中所有数据:select * from emp
(2) select empno,ename from emp;
(3) 显示前3条:select empno,ename from emp limit 3;
(4)查询部门号为20的记录:select * from emp where deptno=20
(5)统计函数(count,max,min,sum,avg)
(6)分组(group by)
(7)连接查询