hive总结

  • 基础命令
    查看数据库:show databases;
    创建数据库:create database human_resource;
    当数据库太多时,用正则表达式匹配来帅选需要的数据库名:show databases like 'h.*';
    删除数据库:drop database if exists 数据库名称;
    建表:create table if not exists mydb.employess(字段名 类型 COMMENT'字段名称',)comment '表描述'
    location '自定hive下对应的位置'
    选择数据库:use datanase_name;
    列出所有表:show tables;show tables in mydb;
    查看分区:show partitions table_name;
    创建分区表:
    create external table if not exists table_name(
    id int,
    name string,
    remark string
    )partition by (year int,month int,day,int)
    row format delimited fields terminated by '\t';
    添加分区:alter table table_name add partition(year=2019,month=7,day=15)
    location 'hdfs://master_server/data/table_name/2019/07/15'
    删除分区:hadoop fs -rmr /data/table_name/2019/07/15
    删除表:drop table if exists table_name;
    表重命名:alter table table_name rename to new_table_name;
    增加列:alter table table_name add columns(
    message_info string comment '字段描述'
    );
    通过查询语句向表中插入数据:insert overwrite table table_name partition(dt='20190815')
    select * from table_name_a where dt ='20190815'
    单个查询语句中创建表并加载数据:create table table_name as
    select name,salary,address,remark_info from tabe_name2 where dt='20190815'
    导出数据:insert overwrits local directory '/home/table_name'
    select name,salary,address,remark_info from table_name where dt='20190815'
    笛卡尔积join:table_a有5行数据,table_b有6行数据,通过笛卡尔积后有30条数据
    select * from table_a join table_b;
    使用视图来降低查询复杂度:create view table_name_view as select * from table_a join table_b on a.id=b.id where a.dt='20190815';

  • 函数
  1. 列出所有函数:show functions;
  2. 展示函数简短的介绍:describe function function_name;
  3. 查看函数详细文档:describe function extended function_name;
  4. 调用函数:select function_name(参数,参数) as coumns_name from table_name;

 

  • 开发

列出所有函数:show functions;

展示函数简短的介绍:describe function function_name;

查看函数详细文档:describe function extended function_name;

调用函数:select function_name(参数,参数) as coumns_name from table_name;

自定义函数开发:

package com.citydo.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

使用@Description(name="nav",value="_FUNC_(value,default_value) - Returns default value id value is null else returns value",extended="Example:\n >select _FUNC_(null,'bal') from src limit 1;\n")

public class UDF_NAME extendeds UDF(){

    public String evaluate(String 参数){

        return value;

    }

}

自定义函数的引用:

add jar 包名所在的路径/function_name.jar;

create temporary function function_name as '包名.类名';

GenericUDF:支持更好的null值处理,传参要求两个参数,如果第一个参数非null就返回要的值,如果第一个参数是null就返回第二个参数的值

public class DUFFunctionName extends GenericUDF{

    @override

    public Object evalute(DeferredObject[] arguments) throws HiveException{

        return value;

    }

    //最后一个要要实现的方法就是getDisplayString(),其中hadoop task内部,在使用这个函数时来展示调试信息

    @Override

    public String getDisplayString(String[] children){

        StringBuilder sb=new String();

        sb.append("if ");

        sb.append(children[0]);

        sb.append("is null \n returns ");

        sb.append(children[1]);

        return sb.toString();

    }

}

UDAF开发见(Hive编程指南208页)
 

  • 调优
  1.   使用EXPLAIN
  2.     限制调整
  3.     join优化
  4.     并行执行整
  5.     调整mapper和reducer个数
  6.     JVM重用
  7.     索引
  8.     动态分区调

你可能感兴趣的:(大数据,hive)