01. Hive操作HQL语句的两个参数
假设公司让你定时在凌晨3点执行hive的数据清洗操作,执行完第一个任务紧接着执行第二个任务,如何让hive定时执行这样的操作?
- 写一个Java程序,使用JDBC定时执行这样的操作,但是由于JDBC复杂,费时费力,所有不常用
- 常用:(任务调度框架,定时周期性的执行某个任务)
oozie -> 流式任务调度框架
azakban -> 流式任务调度框架
crontab(京东)
之前对hive进行操作的时候(建库、建表等)都是在hive的命令行中执行。所以官方提供了两种方法:
bin/hive -e "hive语句" # hive语句可以直接写到双引号中。
bin/hive -f 文件.hql # 复杂的hql语句写到文件中,-f 可以执行hql脚本
bin/hive -e
bin/hive -f
创建员工表
02. 导入数据
hive (default)> load data local inpath '/opt/modules/CDH/hive-0.13.1-cdh5.3.6/hql/emp.txt'into table db_hive.emp;
hive (default)> load data local inpath '/opt/modules/CDH/hive-0.13.1-cdh5.3.6/hql/dept.txt'into table db_hive.dept;
导入数据
03. Hive历史命令存放地
cat ~/.hivehistory
Hive历史命令
主要用于排查逻辑错误或者查看常用命令
04. Hive临时生效设置
固定语法:set 属性名=属性值
例如:set hive.cli.print.header=false;
05. Hive的内部表和外部表
集群数据迁移的时候,需要对当前某个目录下的数据进行迁移,要对数据进行分开管理,这时候就要用到location
的关键字
hive> CREATE TABLE custom_table(id int, name string) location '/custom/z/hive/somedatabase'
hive默认创建的是内部表( inner):
hive> CREATE TABLE
显示指定: external
hive> CREATE EXTERNAL TABLE
- 内部表:
删除表数据时,连同数据源以及元数据信息同时删除 - 外部表:
- 只会删除元数据信息。
- 共享数据,外部表相对而言也更加方便和安全。
-
相同之处:
如果你导入数据时,操作于HDFS上,则会将数据进行迁移(删除源文件),并在metastore留下记录,而不是copy数据源。
创建内部表、外部表,并向外部表插入数据
查看外部表的数据
在HDFS上也有外部表的信息
接下来要删除掉这个外部表
删除外部表
HDFS上仍然有fruit2这个外部表的数据
HDFS上仍然有fruit2这个外部表的数据
删除内部表:
删除内部表:
在HDFS上没有fruit内部表的信息了
hive > show tables
-> 所展示出来的信息依赖于元数据信息,metastore中有的数据才能够进行show等操作。
删除外部表是不会删除数据本身的,是将metastore中的元数据删除,只是将数据和字段的双射关系删除(我的理解)。