视图和索引的创建、修改和删除

主要语法如下,用户可自行实现。

  1.  
    create view view_name as....; #创建视图
  2.  
    alter view view_name set tblproperties(…); #修改视图

因为视图是只读的,所以 对于视图只允许改变元数据中的 tblproperties属性。

  1.  
    #删除视图
  2.  
    drop view if exists view_name;
  3.  
    #创建索引
  4.  
    create index index_name on table table_name(partition_name/column_name)
  5.  
    as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild....;

 

这里’org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’是一个索引处理器,即一个实现了索引接口的Java类,另外Hive还有其他的索引实现。

    alter index index_name on table table_name partition(...) rebulid; #重建索引

 

如果使用 deferred rebuild,那么新索引成空白状态,任何时候可以进行第一次索引创建或重建。

  1.  
    show formatted index on table_name; #显示索引
  2.  
    drop index if exists index_name on table table_name; #删除索引

用户自定义函数

在新建用户自定义函数(UDF)方法前,先了解一下Hive自带的那些函数。show functions; 命令会显示Hive中所有的函数名称:

若想要查看具体函数使用方法可使用describe function 函数名:

首先编写自己的UDF前需要继承UDF类并实现evaluate()函数,或是继承GenericUDF类实现initialize()函数、evaluate()函数和getDisplayString()函数,还有其他的实现方法,感兴趣的用户可以自行学习。

另外,如果用户想在Hive中使用该UDF需要将我们编写的Java代码进行编译,然后将编译后的UDF二进制类文件(.class文件)打包成一个JAR文件,然后在Hive会话中将这个JAR文件加入到类路径下,在通过create function语句定义好使用这个Java类的函数。

  1.  
    add jar <jar文件的绝对路径>; #创建函数
  2.  
    create temporary function function_name;
  3.  
    drop temporary function if exists function_name; #删除函数

 

3)数据操作

主要实现的是将数据装载到表中(或是从表中导出),并进行相应查询操作,对熟悉SQL语言的用户应该不会陌生。

向表中装载数据

这里我们以只有两个属性的简单表为例来介绍。首先创建表stu和course,stu有两个属性id与name,course有两个属性cid与sid。

  1.  
    create table if not exists hive.stu(id int,name string)
  2.  
    row format delimited fields terminated by '\t';
  3.  
    create table if not exists hive.course(cid int,sid int)
  4.  
    row format delimited fields terminated by '\t';

 

向表中装载数据有两种方法:从文件中导入和通过查询语句插入。

a.从文件中导入

假如这个表中的记录存储于文件stu.txt中,该文件的存储路径为/usr/local/hadoop/examples/stu.txt,内容如下。

stu.txt:

  1.  
    1 xiapi
  2.  
    2 xiaoxue
  3.  
    3 qingqing

下面我们把这个文件中的数据装载到表stu中,操作如下:

    load data local inpath '/usr/local/hadoop/examples/stu.txt' overwrite into table stu;

 

如果stu.txt文件存储在HDFS 上,则不需要 local 关键字。

b.通过查询语句插入

使用如下命令,创建stu1表,它和stu表属性相同,我们要把从stu表中查询得到的数据插入到stu1中:

    create table stu1 as select id,name from stu;

 

上面是创建表,并直接向新表插入数据;若表已经存在,向表中插入数据需执行以下命令:

    insert overwrite table stu1 select id,name from stu where(条件);

这里关键字overwrite的作用是替换掉表(或分区)中原有数据,换成into关键字,直接追加到原有内容后。

从表中导出数据

a.可以简单拷贝文件或文件夹

命令如下:

    hadoop fs -cp source_path target_path;

 

b.写入临时文件

命令如下:

    insert overwrite local directory '/usr/local/hadoop/tmp/stu' select id,name from stu;

查询操作

和SQL的查询完全一样,这里不再赘述。主要使用select…from…where…等语句,再结合关键字group by、having、like、rlike等操作。这里我们简单介绍一下SQL中没有的case…when…then…句式、join操作和子查询操作。

case…when…then…句式和if条件语句类似,用于处理单个列的查询结果,语句如下:

  1.  
    select id,name,
  2.  
    case
  3.  
    when id=1 then 'first'
  4.  
    when id=2 then 'second'
  5.  
    else 'third'
  6.  

posted on 2021-10-22 15:07  sean1246  阅读(66)  评论(0)    收藏  举报