Hive 基于hadoop来构建数仓的工具(三) 概念及原理介绍

参数配置

  • 三种方式:
    1. 配置文件 (全局有效 默认 hive-default.xml 自定义配置会覆盖默认配置)
    2. 命令行参数 (对hive启动实例有效 bin/hive --hiveconf)
    3. 参数声明 (对hive连接的当前session有效 set)
    • 注意: 系统级别的参数,只能使用2和1,这些参数读取在session建立之前,例如log4j

优先级: 3>2>1

  • hive shell 命令行
    bin/hive 命令
    -i 初始化hql文件
    -e 从命令行执行指定的hql
    -f 执行hql脚本
    -v 输出执行的hql语句

内嵌函数

  • 概念: 可以通过show functions语句来查看到的函数

  • 内嵌函数分类:

    1. 内置函数
      1. 数学函数
        e.g: round, floor, ceil, rand, sin ,asin ,cos, acos ,abs
      2. 字符函数
        e.g: length, reverse, concat ,concat_ws, substr, upper, lower, trim, ltrim ,rtrim regexp_replace ,regexp_extract ,parse_url ,get_json_object ,split ,find_in_set ,instr
      3. 收集函数
        e.g:
      4. 转换函数
        e.g: cast
      5. 日期函数
        e.g:
        1. from_unixtime 将时间戳转换为标准日期格式,用于取年月日,做分组
        2. unix_timestamp 将标准日期转换为时间戳格式,用于计算时间差
        to_date ,year ,month, day, hour ,minute ,second ,weekofyear ,datediff ,date_add ,date_sub
      6. 条件函数
        e.g: IF COALESCE CASE WHEN THEN
    2. 聚合函数
      e.g:
    3. 表生产函数
      e.g: explode, parse_url_tuple ,json_tuple

自定义函数

  • 自定义函数分类:
    1. UDF 普通函数 一进一出
      步骤:
      1. 继承UDF类,并重载evaluate方法
      2. 将自定义类打成jar包,并上传到服务器
      3. 将jar包使用 hive命令 add jar xxx.jar 添加到classpath
      4. 创建临时函数与开发好的java class 关联 (create temporary function 函数名 as '类全 路径名')
      5. 使用自定义函数
    2. UDAF 聚合函数 多进一处
      步骤: 继承UDAF类,重写iterate方法
      方法: init,iterate(迭代计算,真正实现聚合的方法,返回最终结果),terminatePartial(局部 聚合的方法,分布式计算中会调用,得到局部聚合结果),merge(实现聚合的方法,本质上要调 用iterate)
    3. UDTF 表生成函数 一进多出
      步骤: 继承UDTF类,重写process方法
      方法: initialize(初始化),process(真正实现转换的方法),close(关闭资源的方法)
      注意: udtf只能直接在select语句中使用,不能嵌套使用,不能与cluster by/group by/sort by/distribute by 一起使用,可以与order by 共用,查询结果是一张表,不可以和其他字段一 起使用,一般配合lateral view 使用;tableA lateral view explode() as a,b,c
      e.g:
      1. explode()函数,它是一个可以将map或者array类型的字段展开的函数,array中一个元素一条数据,map中一个kv一条数据,

反射函数

  • 反射函数:reflect(类路径,方法名,参数1,参数2,...)
    1. 该函数可以支持在sql中调用java中自带函数,可以是一个实例对象的方法,也可以是静态类的方法,但是该方法必须返回的是一个基础类型,或者是hive能识别的序列化类型

窗口函数

  • 场景:当业务需要即显示聚合之后的数据,又要显示聚合之前的数据时,便引入了窗口函数

  • 意义:窗口函数又叫olap函数/分析函数,窗口函数兼具有分组和排序两种功能,带rows between 的也叫windows子句

  • 语法: over(partition by xxx order by xxxx)

  • 功能实现:

    1. 聚合函数() + over(partition by xxx order by xxxx)
      e.g: SUM、AVG、COUNT、MAX、MIN、LAG、LEAD、FIRST_VALUE、LAST_VALUE
      lag: 取每个分区内某列前n个值
      lead: 取每个分区内某列后n个值
      first_value: 取每个分区内某列第一个值
      last_value: 取每个分区内某列最后一个值
    2. 排序函数() + over(partition by xxx order by xxxx)
      e.g: ROW_NUMBER、RANK、DENSE_RANK、NTILE
  • 补充:

    • partition by,是按照某一列进行分区,这一列值相同的行会放到一起
      如果不指定rows between 默认为从分区内的起点到当前行
      如果不指定order by,则将分组内所有值累加,分组内排序,指定order by 则默认从起点到当前行

    • 举例: 聚合函数(col) over(partition by xxx order by xxx rows between 指定范围) as col_n

    • 指定范围: rows between num_line preceding and num_line following
      -- preceding 往前
      -- following 往后
      -- current row 当前行
      -- unbounded 无边界

    • 排序函数:
      1. row_number(): 从1开始,按照顺序,生成分组内记录的序列, 1 2 3 4 5
      2. rank():生成分组内数据项的排名,排名相等会在名次中留下空位, 1 2 3 3 5
      3. dense_rank():生成分组内数据项的排名,排名相等不会在名次中留下空位, 1 2 3 3 4

    • 比率函数:
      1.ntile():将每个分区内排序后的结果均分成N份,如果不能均分,会优先分配数字小的

数仓分层结构及意义

  • 数据源: 一般有(业务数据库数据,爬虫数据,数据流数据,日志数据,文档数据)
  • ETL: 一个过程,用于数据的预处理,不属于分层结构
  • ODS: 操作数据层/原数据层,临时存储层, 刚经过etl预处理的过滤之后的数据,一般以ods_tb命名
  • DWD: 详细数据层,此层数据为ods层数据进行进一步etl转换和补全后得到的数据,构建宽表,一致,准确,干净
  • DWS: 汇总数据层,将dwd层中构建的宽表,根据每个主题中的业务拆分不同的分析模型子表,后期在主题中实现分析应用
  • ADS: 数据应用层,web前端展示直接读取的数据源,一般有(数据挖掘,数据分析,即席查询,报表展示)
  • 意义:
    1. 减少数据之间的耦合性;如果不分层的话,源数据业务系统的业务规则发生变化将会影响整个数据清洗过程,工作量巨大
    2. 用空间换时间;同过分层来拆分数据清洗的过程,通过大量预处理和各个层次的步骤分析来简化清洗的过程

数据仓库的特性

  • 面向主题: 区别于数据库的面向业务,主题是各个子业务系统数据库的一个数据综合体,即对应企业中某一宏观分析领域所涉及的分析对象;例如保险行业中,车险,财险,寿险是各个业务,如果分析保险行业发展,则这些保险数据综合起来是一个保险主题

  • 集成性: 因为面向主题的特性,数据仓库中的数据都是由各个子业务系统的数据集合而来,

  • 非易失性:也叫不可更新性,因为数据仓库时面向分析,支持企业决策的,所以不需要像传统数据库那样保证数据的实时更新,只需要保存过去的数据,用来反映过去一段时间以来历史数据的规律和内容即可,规律是客观存在的,不需要人为加以干预,所以只需要保证数仓中历史数据的加载和更新即可,不需要对数仓中的数据进行频繁的修改和删除;

  • 时变性: 数据是历史的,需要保持更新以便更好的服务企业决策,但由于企业业务的各种发展和变化,数据在过去的时间内也会不断地产生变化,进入数仓的数据也会呈现各种不同的变化

你可能感兴趣的:(Hive 基于hadoop来构建数仓的工具(三) 概念及原理介绍)