Hive(五)之Hive-ef参数操作

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
  • 内部表:
    删除表数据时,连同数据源以及元数据信息同时删除
  • 外部表:
    1. 只会删除元数据信息。
    2. 共享数据,外部表相对而言也更加方便和安全。
  • 相同之处:
    如果你导入数据时,操作于HDFS上,则会将数据进行迁移(删除源文件),并在metastore留下记录,而不是copy数据源。


    创建内部表、外部表,并向外部表插入数据

    查看外部表的数据

    在HDFS上也有外部表的信息

    接下来要删除掉这个外部表


    删除外部表

    HDFS上仍然有fruit2这个外部表的数据

    HDFS上仍然有fruit2这个外部表的数据

    删除内部表:
    删除内部表:

    在HDFS上没有fruit内部表的信息了

hive > show tables -> 所展示出来的信息依赖于元数据信息,metastore中有的数据才能够进行show等操作。

删除外部表是不会删除数据本身的,是将metastore中的元数据删除,只是将数据和字段的双射关系删除(我的理解)。

你可能感兴趣的:(Hive(五)之Hive-ef参数操作)