hive相关知识整理

Posted aims410

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive相关知识整理相关的知识,希望对你有一定的参考价值。

hive相关知识整理

  1. 无事事实表 就是指没有指标度量值的事实表,有多个维度外键,一般用来业务维度的关联。
  2. grouping sets函数
    (1)功能:根据给定的不同维度进行分组聚合,结果相当于挨个分组聚合然后union合并
    (2)语法:grouping sets(维度1,维度2,维度3……);
    (3)特点:语法简单,性能更好,只对表进行一次查询
    (4)场景:需要基于多种组合维度进行分析同样的指标放入一张结果表的时候
  3. grouping函数
    (1)功能:通过grouping来判断是否基于当前维度【列】实现了分组,实现过滤和判断
    (2)语法:grouping (维度1,维度2,维度3……);
    如果基于这个维度会返回0否则1
    如果有多个维度的话会返回二进制
    比如三个维度都不基于会返回 111 的十进制 7
  4. row_number函数
    (1)功能:实现计算去重
    如果按分区的字段为重复的会自动加一行row_number显示1、2、3……
    (2)语法:row_number() over(partition by 字段,字段……);
    例如:
    伪代码:
    row_number() over(partition by name,id,birthday,degree);
    
    | name | id | birthday | degree | row_number |
    | 张三 | 1001 | 2007-05-18 | 98 | 1 |
    | 张三 | 1001 | 2007-05-18 | 98 | 2 |
    | 张三 | 1001 | 2007-05-18 | 98 | 3 |
    row_number的值会自动加一
    所以可以用row_number做计算去重只取row_number为1的
  5. hive的优化:
    (1)属性优化
    ①关联优化
    ②小文件处理:合并小文件
    ③ 索引优化
    ④谓词下推:先过滤在处理
    sql优化(核心)
    ⑥设计优化:分桶表、分区表、文件存储类型 orc
    (2)数据倾斜
    ①使用分桶表
    ②开启map端聚合(规约) 减少进入reduce的个数
    ③开启参数hive.groupby.skewindata=true实现随机分区
    ④sql指定随机分区distribute by rand():将数据写入随机的分区中
    ⑤将大表转化为小表,避免走reduce join 尽量走 map join

hive 权限知识点整理

一,hive 权限授权模型

1、Storage Based Authorization in the Metastore Server
基于存储的授权(也就是HDFS的授权模型) - 可以对Metastore中的元数据进行保护,但是没有提供更加细粒度的访问控制(例如:列级别、行级别)。
2、SQL Standards Based Authorization in HiveServer2
(grant)基于SQL标准的Hive授权 - 完全兼容SQL的授权模型,推荐使用该模式。

①完全兼容SQL的授权模型
②除支持对于用户的授权认证,还支持角色role的授权认证
一个用户可以具有一个或多个角色
默认包含两种角色:public、admin
3、Default Hive Authorization (Legacy Mode)
hive默认授权 - 设计目的仅仅只是为了防止用户产生误操作,而不是防止恶意用户访问未经授权的数据。

二,选择HiveServer2模式

启动的时候也是用这种方式:HiveServer2/beeline 客户端方式启动

使用该权限控制模式会有一些限制,如下:
1、启用当前认证方式之后,dfs, add, delete, compile, and reset等命令被禁用。 2、通过set命令设置hive configuration的方式被限制某些用户使用。 (可通过修改配置文件hive-site.xml中hive.security.authorization.sqlstd.confwhitelist进行配置) 3、添加、删除函数以及宏的操作,仅为具有admin的用户开放。 4、用户自定义函数(开放支持永久的自定义函数),可通过具有admin角色的用户创建,其他用户都可以使用。 5、Transform功能被禁用。 ———————————————— 原文链接:https://blog.csdn.net/qq_36299025/article/details/94143198

三,修改配置

<property>
  <name>hive.security.authorization.enabled</name>
  <value>true</value>
  <description>开启权限配置</description> 
</property>
<property>
  <name>hive.server2.enable.doAs</name>
  <value>false</value>
  <description>默认情况下,HiveServer2以提交查询的用户执行查询访问(true),如果hive.server2.enable.doAs设置为false,查询将以运行hiveserver2进程的用户访问。</description>
</property>

<property>
  <name>hive.users.in.admin.role</name>
  <value>root</value>
 <description>指定超级管理员是哪个用户</description> 
</property>
# 授权、认证的实现类
<property>
  <name>hive.security.authorization.manager</name>
<value>org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory</value>
</property>
<property>
  <name>hive.security.authenticator.manager</name> 
 <value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://192.168.22.220:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>数据库账号</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>数据库密码</value> </property>

以上是关于hive相关知识整理的主要内容,如果未能解决你的问题,请参考以下文章

hadoop离线day08--数据仓库Apache Hive

Hive数仓项目之sqoop相关操作访问咨询主题看板_全量流程

Hive数仓项目架构说明环境搭建及数据仓库基础知识

数据仓库Hive 基础知识(Hadoop)

Hive数仓项目之数仓分层数仓工具的使用

小烨收藏数据仓库Hive 基础知识(Hadoop)