欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据分析之hive

程序员文章站 2022-05-27 22:40:42
...

hive学习笔记:


一、hive基本指令:


    hive 进入hive窗口指令(启动hive之前必须启动集群):
    退出hive窗口:
  

exit;
quit;


二、hive数据类型:


    hive数据类型与Java相似,与MySQL的区别没有varchar类型,有的是string类型(储存字符串);
    类型转化用 cast函数 【Cast(字段名 as 转换的类型 )】
    1、hive的原子数据是可以进行隐式转换的;
        隐式转换的规则如下:
            (1)任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成
                 INT,INT 可以转换成 BIGINT。
            (2)所有整数类型、FLOAT 和 STRING 类型都可以隐式地转换成 DOUBLE。
            (3)TINYINT、SMALLINT、INT 都可以转换为 FLOAT。
            (4)BOOLEAN 类型不可以转换为任何其它的类型。


二、DDL


    1)避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法)
      

 create database if not exists db_hive;


    2)创建一个数据库,指定数据库在 HDFS 上存放的位置 [使用location关键字]
     

 create database db_hive2 location '/db_hive2.db';


    3)查看库或表的基本语句
      

show databases;
show tables;


        #可以在查询数据库的时候加上过滤 【show databases like '%a%'】
        显示数据库信息
          

 desc database [库名]


        显示详细信息
          

 desc database extended [库名]


    4)切换数据库使用use关键字
    5)删除数据库 : 
      

 drop database [库名]


        #判断数据库是否存在  if exists
          

 drop database if exists [库名];


        #如果数据库不为空 需要强制删除  采用cascade命令
          

 drop database [库名] cascade;


    6)创建表:
      

 create table [if not exists][表名](字段名,字段属性....) row format delimited fields terminated by ',';


    
    7)修改表
      

 alter tale [表名] rename to [新表名]


    
    8)查询表结构:
      

 desc [表名]


    9)删除表:
      

 drop table [表名]


        

三、DML


    1、向表中导入数据
      

 load data [local] inpath '数据路劲'[overwrite] into table [表名]


        (1)load data:表示加载数据
        (2)local:表示从本地加载数据到 hive 表;否则从 HDFS 加载数据到 hive 表
        (3)inpath:表示加载数据的路径
        (4)overwrite:表示覆盖表中已有数据,否则表示追加
        (5)into table:表示加载到哪张表
        (6)student:表示具体的表
    
    2、通过查询语句向表中插入数据(Insert)
      

 insert into/overwrite table [表名1] select id,name from [表名2]


        #insert into:以追加数据的方式插入到表或分区,原有数据不会删除      insert overwrite:会覆盖表中已存在的数据
    
    3、查询语句中创建表并加载数据(As Select)
        根据查询结果创建表(查询的结果会添加到新创建的表中)
          

  create table if not exists [表名] as select id, name from [表名];


    
    4、数据导出
        Insert 导出
        1)将查询的结果导出到本地
      

 insert overwrite local directory '/opt/module/hive/data/export/student' select * from [表名];
        


        2)将查询的结果格式化导出到本地
      

 insert overwrite local directory '/opt/module/hive/data/export/student1' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from [表名];


        
        3)将查询的结果导出到 HDFS 上(没有 local)
      

insert overwrite directory '/user/atguigu/student2' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from [表名];


        
    5、清除表中数据
        

truncate table [表名];


    
    6、常用函数
        1)求总行数(count)
        

select count(*) cnt from [表名];


        2)求工资的最大值(max)
        

select max(sal) max_sal from [表名];


        3)求工资的最小值(min)
      

  select min(sal) min_sal from [表名];


        4)求工资的总和(sum)
        

select sum(sal) sum_sal from [表名]; 


        5)求工资的平均值(avg)
        

select avg(sal) avg_sal from [表名];


        
    7、Limit语句
        limit语句用于限制返回行数
            

select * from [表名]limit 5;


    8、Where语句
        where语句用于筛选过滤;
            

select * from [表名] where [条件];


            
    9、Like和Rlike
        like 选择条件可以包含字符或者数字
            %代表0或者多个        _代表一个字符
          

 select * from [表名] where [列名] like 'a%';  //匹配以a开头的数据
 select * from [表名] where [列名] like ’_a%'; //匹配第二个字母为a


        
        Rlike是hive中like的扩展 可以超过正则表达式来匹配条件
            

select * from [表名] where [列名] rlike ’[a]'; //匹配带a的信息


    10、Group by 语句
            group by语句常常和聚合函数一起使用  按照一个或者多个列结果进行分组  然后对每个组执行聚合操作
              

 select t.deptno, avg(t.sal) avg_sal from emp t group by t.deptno;

    11、排序
        order by 全局排序  只有一个reduce
        使用order by 排序 ASC :升序(默认) Desc:降序
            

select * from [表名] order by sal;
select * from [表名] order by sal desc;


            


四、函数


    1、系统内置函数
        1)查看系统内置函数  show function;
        2)显示自带的函数用法 desc function 【函数】
        3)详细显示自带函数  desc function extebded 【函数】
    2、常用函数
        1)空字段赋值 nvl()
            select nvl(字段名,值) from 【表名】
        2)行转列 concat()
            CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;
            CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将
            为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
            COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 Array 类型字段。
    
    3、自定义函数
        UDF  继承UDF类
        实现evaluate方法