Hive学习—2

hive数据类型

1) 原子数据类型

  • TinyInt:1byte有符号整数
  • SmallInt:2byte有符号整数
  • Int:4byte有符号整数
  • BigInt:8byte有符号整数
  • Float:单精度浮点数
  • Double:双精度浮点数
  • Boolean:布尔类型
  • String:字符串
  • TimeStamp:整数

2) 复杂数据类型

  • Array\<Type>

    • 由一系列相同数据类型的元素组成
    • 这些元素可以通过 下标 来访问
    • 查询时如果查到返回响应值,没查到则返回null
      建表:
      create table person(name string,work_locations array\<string>)
      row format delimited fields terminated by ‘\t’
      collection items terminated by ‘,’;
      导入数据:
      load data local inpath ‘/home/sigeon/person.txt’ into table person;
      查询
      Select work_locations[0] from person;
  • Map<KType, VType>

    • 包含 key-value 键值对
    • 可以通过 key 来访问元素
      建表语句:
      create table score(name string, scores map)
      row format delimited fields terminated by ‘\t’
      collection items terminated by ‘,’
      map keys terminated by ‘:’;
      导入数据:
      load data local inpath ‘/home/sigeon/score.txt’ into table score;
      查询语句:
      Select scores[‘Chinese’] from score;
  • Struct<Param1:Type1, Param1:Type1, … >

    • 可以包含不同数据类型的元素
      类似于c语言中的结构体
    • 这些元素可以通过 点语法 的方式来得到
      建表语句:
      create table course(id int,course struct<name:string, score:int>)
      row format delimited fields terminated by ‘\t’
      collection items terminated by ‘,’;
      导入数据:
      load data local inpath ‘/ home/sigoen/course.txt’ into table course;
      查询语句:
      Select c.course.score from course c;
  • 几个分隔符

指定分隔符要按从外向内的顺序,字段 -> 集合元素 ->map k-v

  • ROW FORMAT:指定分隔符的关键字
  • DELIMITED FIELDS TERMINATED BY:字段分隔符
  • COLLECTION ITEMS TERMINATED BY:集合元素分隔符(Array 中的各元素、Struct 中的各元素、 Map 中的 key-value 对之间)
  • MAP KEYS TERMINATED BY:Map 中 key 与 value 的分隔符
  • LINES TERMINATED BY:行之间的分隔符

hive视图

  • 和关系型数据库一样,Hive也提供了视图的功能

  • Hive 的视图和关系型数据库的视图有很大的区别:

    • 1、只有逻辑视图,没有物化视图;
    • 2、视图只能查询,不能增删改 (Load|Insert/Update/Delete) 数据;
    • 3、视图在创建时候,只是保存了一份元数据 (存在TBLS中),当查询视图的时候,才开始执行视图对应的那些子查询
      视图元数据只存储了hql语句,而不是执行结果
  • 视图操作

    • 创建视图

      1
      create view my_view as <select * from mytable> [limit 500];
    • 查看视图

      • show tables; // 显示所有表和视图
      • show views; //显示所有视图
      • desc [formatted] view_name; // 查看某个具体视图的(详细)信息
        视图类型:VIRTUAL_VIEW
    • 删除视图

      • drop view [if exists] view_name
    • 使用视图

      • select count(distinct uid) from my_view;

hive函数

  • 函数分类

    • UDF(自定义函数 User-Defined Function)作用于单个数据行,产生一个数据行作为输出。(数学函数,字 符串函数)
    • UDAF(用户定义聚集函数 User-Defined Aggregation Funcation):接收多个输入数据行,并产 生一个输出数据行。(count,max)
    • UDTF(表格生成函数 User-Defined Table Function):接收一行输入,输出多行(explode)
  • 内置函数

    • 查看函数命令

      • 查看内置函数: show functions;
      • 显示函数的详细信息: desc function [extended] fun_name;
        extended:显示扩展信息
    • 分类

      • 关系运算

        • 分类
          \1. 等值比较: =
          \2. 等值比较:<=>
          \3. 不等值比较: <>和!=
          \4. 小于比较: <
          \5. 小于等于比较: <=
          \6. 大于比较: >
          \7. 大于等于比较: >=
          \8. 区间比较
          \9. 空值判断: IS NULL
          \10. 非空判断: IS NOT NULL
          \10. LIKE 比较: LIKE
          \11. JAVA 的 LIKE 操作: RLIKE
          \12. REGEXP 操作: REGEXP
      • 数学运算

        • 分类
          \1. 加法操作: +
          \2. 减法操作: –
          \3. 乘法操作: *
          \4. 除法操作: /
          \5. 取余操作: %
          \6. 位与操作: &
          \7. 位或操作: |
          \8. 位异或操作: ^
          9.位取反操作: ~
      • 逻辑运算

        • 分类
          \1. 逻辑与操作: AND 、&&
          \2. 逻辑或操作: OR 、||
          \3. 逻辑非操作: NOT、!
      • 复合类型构造函数

        • 分类
          1. array 结构
          2. map 结构
            \3. struct 结构
            \4. named_struct 结构
            \5. create_union
      • 复合类型操作符

        • \1. 获取 array 中的元素
        • \2. 获取 map 中的元素
        • \3. 获取 struct 中的元素
      • 集合操作函数

        • \1. map 类型大小:size

        • \2. array 类型大小:size

        • \3. 判断元素数组是否包含元素:array_contains

        • \4. 获取 map 中所有 value 集合

        • \5. 获取 map 中所有 key 集合

        • \6. 数组排序

        • \7. 获取素组或map集合的单个元素(k-v对):explode()

          当同时查询炸裂字段和普通字段时,需要使用横向虚拟视图:lateral view

          • 如:select name,addr.city from usr_addr lateral view(address) addr as city;
            这里一般需要给 查询结果 和 结果字段 起别名,不然没办法获得每个字段,如果只是查询所有的话就不需要了
      • 类型转换函数

        • \1. 二进制转换:binary
        • \2. 基础类型之间强制转换:cast
      • 数值计算函数

        • \1. 取整函数: round
        • \2. 指定精度取整函数: round
        • \3. 向下取整函数: floor
        • \4. 向上取整函数: ceil
        • \5. 向上取整函数: ceiling
        • \6. 取随机数函数: rand
        • \7. 自然指数函数: exp
        • \8. 以 10 为底对数函数: log10
        • \9. 以 2 为底对数函数: log2
        • \10. 对数函数: log
        • \11. 幂运算函数: pow
        • \12. 幂运算函数: power
        • \13. 开平方函数: sqrt
        • \14. 二进制函数: bin
        • \15. 十六进制函数: hex
        • \16. 反转十六进制函数: unhex
        • \17. 进制转换函数: conv
        • \18. 绝对值函数: abs
        • \19. 正取余函数: pmod
        • \20. 正弦函数: sin
        • \21. 反正弦函数: asin
        • \22. 余弦函数: cos
        • \23. 反余弦函数: acos
        • \24. positive 函数: positive
        • \25. negative 函数: negative
      • 字符串函数

        • \1. 字符 ascii 码函数:ascii
        • \2. base64 字符串
        • \3. 字符串连接函数:concat
        • \4. 带分隔符字符串连接函数:concat_ws
        • \5. 数组转换成字符串的函数:concat_ws
        • \6. 小数位格式化成字符串函数:format_number
        • \7. 字符串截取函数:substr, substring
          序号从1开始,可以传负数,代表从右开始
        • \9. 字符串查找函数:instr
          找到返回一个正整数,未找到返回0
        • \10. 字符串长度函数:length
        • \11. 字符串查找函数:locate
        • \12. 字符串格式化函数:printf
        • \13. 字符串转换成 map 函数:str_to_map
        • \14. base64 解码函数:unbase64(string str)
        • \15. 字符串转大写函数:upper,ucase
        • \16. 字符串转小写函数:lower,lcase
        • \17. 去空格函数:trim
        • \18. 左边去空格函数:ltrim
        • \19. 右边去空格函数:rtrim
        • \20. 正则表达式替换函数:regexp_replace
        • \21. 正则表达式解析函数:regexp_extract
        • \22. URL 解析函数:parse_url
        • \23. json 解析函数:get_json_object
        • \24. 空格字符串函数:space
        • \25. 重复字符串函数:repeat
        • \26. 左补足函数:lpad
        • \27. 右补足函数:rpad
        • \28. 分割字符串函数: split
        • \29. 集合查找函数: find_in_set
        • \30. 分词函数:sentences
        • \31. 分词后统计一起出现频次最高的 TOP-K
        • \32. 分词后统计与指定单词一起出现频次最高的 TOP-K
      • 日期函数

        • \1. UNIX 时间戳转日期函数: from_unixtime
        • \2. 获取当前 UNIX 时间戳函数: unix_timestamp
        • \3. 日期转 UNIX 时间戳函数: unix_timestamp
        • \4. 指定格式日期转 UNIX 时间戳函数: unix_timestamp
        • \5. 日期时间转日期函数: to_date
        • \6. 日期转年函数: year
        • \7. 日期转月函数: month
        • \8. 日期转天函数: day
        • \9. 日期转小时函数: hour
        • \10. 日期转分钟函数: minute
        • \11. 日期转秒函数: second
        • \12. 日期转周函数: weekofyear
        • \13. 日期比较函数: datediff
        • \14. 日期增加函数: date_add
        • \15. 日期减少函数: date_sub
      • 条件函数

        • \1. If 函数: if( 条件 ,true返回参数,false返回参数 )
        • \2. 当param1不为null返回param1,否则返回param2:nvl(param1, param2)
        • \2. 非空查找函数: coalesce
        • \3. 条件判断函数:case
      • 混合函数

        • 分类
          \1. 调用 Java 函数:java_method
          \2. 调用 Java 函数:reflect
          \3. 字符串的 hash 值:hash
      • XPath 解析 XML 函数

        • 分类
          \1. xpath
          \2. xpath_string
          \3. xpath_boolean
          \4. xpath_short, xpath_int, xpath_long
          \5. xpath_float, xpath_double, xpath_number
      • 汇总统计函数(UDAF)

        • \1. 个数统计函数: count
        • \2. 总和统计函数: sum
        • \3. 平均值统计函数: avg
        • \4. 最小值统计函数: min
        • \5. 最大值统计函数: max
        • \6. 非空集合总体变量函数: var_pop
        • \7. 非空集合样本变量函数: var_samp
        • \8. 总体标准偏离函数: stddev_pop
        • \9. 样本标准偏离函数: stddev_samp
        • 10.中位数函数: percentile
        • \11. 中位数函数: percentile
        • \12. 近似中位数函数: percentile_approx
        • \13. 近似中位数函数: percentile_approx
        • \14. 直方图: histogram_numeric
        • \15. 集合去重数:collect_set
        • \16. 集合不去重函数:collect_list
      • 表格生成函数 Table-Generating Functions (UDTF)

        • 分类
          1.数组拆分成多行:explode(array)
          2.Map 拆分成多行:explode(map)
  • 自定义函数

    • \1. 需要继承 org.apache.hadoop.hive.ql.exec.UDF 类,实现一个或多个 evaluate() 方法
    • \2. 将hive的jar包放在hive的classpath路径下,进入hive客户端,执行命令:add jar \;
    • \3. 检查jar包是否添加成功,执行命令:list jars;
    • \4. 给自定义函数 添加别名,并在hive中 注册 该函数,执行命令:create temporary function myfunc as ‘主类全路径名’;
      myfunc:自定义函数别名
      该方法创建的是临时函数,当前客户端关闭就没有了,下次重复第3,4步;
      真实 生产中就是使用该方法!
    • \5. 查看hive函数库有没有成功添加,执行命令:show functions;
    • \6. 调用函数时通过函数名和参数列表确定调用的是具体哪一个方法
如果帮到你, 可以给我赞助杯咖啡☕️
0%