首页 > 其他分享 >hive初识

hive初识

时间:2023-06-03 15:22:05浏览次数:47  
标签:存储 hive replace substr 初识 数据 order

HIVE的认识:

定义:

hive 是基于 hadoop 的数据仓库工具,将结构化的数据映射成一张表,提供sql查询功能,可以对数据提取,转化,加载,

简而言之:查询和分析存储在 hadoop大规模的数据工具,离线的大数据分析

hive在hadoop的生态圈

hive 将 存储在HDFS中的结构化数据文件 映射成 类似关系型数据库表,并接受 sql语句,将其转化为Mapreduce (切成单元,分布到各节点去数据处理)程序去执行, hive必须依赖hadoop而存在

hive的架构设计

  • hive 客户端 支持java python 连接 与RDBMS(关系型数据库)类似
  • hive服务端 客户端与hive交互,服务端主要包括 CLI(控制台命令行)、 HiveServer 、Hive web interface(port:9999)、Driver(执行去调用底层的MAPreduce计算框架)、metastore(元数据服务)等组件
  • hive存储与计算 hive元数据 使用RDBMS(关系型数据库)存储,hive数据存储在HDFS(分布式文件系统)中,大部分查询由mapreduce 完成

hive工作流程

​ 简而言之:Hive接到命令之后,首先会去元数据库获取元数据,然后把元数据信息和作业计划发送Hadoop集群执行任务,再将最终的结果返回。

hive适用场景

  • 延迟高,对实时性要求低的场合
  • 结构化数据 ,离线分析统计 的大数据场景

hive 存储格式

  • textfile 默认格式 压缩后Gzip 不再支持mapreduce分割机制
  • sequencefile 可分割的文件格式,追加存储 ,支持压缩
  • rcfile 面向列的数据存储格式
  • orcfile 对rcfile 的优化,文件可切割,支持多种索引

hive数据单元

无主键,不支持行级操作,不支持update操作,

  • 数据库 Database

  • 表 table(内表和外表)

  • 分区 partition

  • 分桶 Buckets or Clusters

    ——分区/分桶 提高查询性能。分区是将数据按照某个列的值进行分组,而桶是将数据按照哈希值进行分组

hive内部表和外部表区别:

1.未被external修饰的是内部表【managed table】,被external修饰的为外部表【external table】。

2.内部表数据由Hive自身管理,外部表数据由HDFS管理。

3.内部表数据存储在hive.metastore.warehouse.dir【默认:/user/hive/warehouse】,外部表数据存储位置由用户自己决定。

4.删除内部表会直接删除元数据【metadata】及存储数据,~ 删除外部表仅仅删除元数据,HDFS上的文件不会被删除。

5.对内部表的修改会直接同步到元数据,而对外部表的表结构和分区进行修改,则需要修改【MSCK REPAIR TABLE table_name】

基本数据类型

  • 整数 TINYINT,SMALLINT,INT,BIGINT
  • 小数 FLOAT和DOUBLE
  • 文本 BINARY用于存储变长的二进制数据
  • 布尔 BOOLEAN
  • 二进制
  • 时间 TIMESTAMP则存储纳秒级别的时间戳,同时Hive提供了一些内置函数用于在TIMESTAMP与Unix时间戳(秒)和字符串之间做转换。

复杂数据类型

  • array 数组 和map 映射

    • array 具有相同类型的变量的集合 数据格式[‘1’,‘2’,‘3’]
    • map 一组键值对组合 {'A':1,'B':'2'} key基本类型,值任意类型
  • struct 结构体 {‘A’:'2'} key和value 都是任意类型

  • uniontype 联合体

元数据 -hive客户端 连接metastore 服务 -完成访问数据库的元数据的存取

  • 元数据存储在RDBMS
    • single user mode
    • muti user mode
    • remote server mode

hive 语法

https://blog.csdn.net/weixin_51981189/article/details/127469400

  • HQL 支持CTE,可将查询作为临时表共享使用
  • 支持嵌套子查询 无限制
  • 支持匹配正则 表达式 和虚拟列
  • union all 用于合并多个具有相同结构的结果集
    • 窗口函数:对数据进行实时分析处理,进一步细分分组结果
    • 解决排名问题,
    • 解决TOPN问题
    • 语法:
    • 注意:窗口函数是对where后者group by子句处理后的结果进行操作,因此按照SQL语句的运行顺序,窗口函数一般放在select子句中。
      • select 窗口函数 over (partition by 用于分组的列名, order by 用于排序的列名)
        • select
          uid,
          second_category,
          pay_money,
          sum(pay_money) over(partition by second_category order by pay_money desc ) from dwd_hq.dwd_order_detail
          where replace(substr(formal_date,1,10),'-','') >= '20230315' and replace(substr(formal_date,1,10),'-','') <= '20230325'
      • 排名函数:row_number(),rank(),dense_rank()
        • select
          uid,
          second_category,
          pay_money,
          rank() over(partition by second_category order by pay_money desc ) from dwd_hq.dwd_order_detail
          where replace(substr(formal_date,1,10),'-','') >= '20230315' and replace(substr(formal_date,1,10),'-','') <= '20230325'
      • 聚合函数:max(),min(),count(),sum(),avg(),median()
        • select sum(pay_money) from dwd_hq.dwd_order_detail where replace(substr(formal_date,1,10),'-','') >= '20230315' and replace(substr(formal_date,1,10),'-','') <= '20230325'
      • 向前向后取值:lag(),lead()
        百分位:percent_rank()
        取值函数:first_value(),last_value(),nth_value()
        分箱函数:ntile()
      • ***实例 ::: 神策用户-登录用户-7天内前三名(不同考试意向下)
      • select user_id from 神策 where time_id 7日内 group by exam order by create_time desc

数据倾斜(大数据常遇问题,尤其在分布式计算中最突出)

  • 定义:

    • 由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点
  • 表现:

    • 任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce子任务未完成,因为其处理的数据量和其他的 reduce 差异过大。单一 reduce 处理的记录数和平均记录数相差太大,通常达到好几倍之多,最长时间远大于平均时长
  • 出现情况:

    • join 表小 集中在key
    • group by 维度小,某值得数量过多
    • count distinct 特殊值过多
  • 产生原因

    • A:key 分布不均匀

      B:业务数据本身的特性

      C:建表考虑不周全

      D:某些 HQL 语句本身就存在数据倾斜

  • 解决方案:XXX

数仓的分层架构

ETL

ODS层:贴源层,与业务库保持一致,不做任何处理
DWD层:明细层,对数据进行规范话化,转换清洗。
DWS层:对数据按维度进行汇总,降低业务需求
ADS层:应用层,面向业务需求开发。
分层的好处:
清晰数据结构
数据血缘追踪
减少重复开发
把复杂问题简单化

标签:存储,hive,replace,substr,初识,数据,order
From: https://www.cnblogs.com/blog-123/p/17454034.html

相关文章

  • Spark集成Hive
    命令行集成Hive将hive中的hive-site.xml配置文件拷贝到spark配置文件目录下,仅需要以下内容<configuration><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value></property><property><na......
  • 初识c语言
    基本报错:如果我们在编译出现时要加上一句话在开头#define_CRT_SECURE_NO_WARNINGS1目的为了代码拥有跨平台性如何每次都加在源文件找到vs安装路径—找到newc++file.cpp文件,更改文件为#define_CRT_SECURE_NO_WARNINGS1可用一个工具notepad++强制更改;常量(不变的量)字面常量cons......
  • 初识Vue
    前端的发展史#1HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面->给后端(PHP、Python、Go、Java)->后端嵌入模板语法->后端渲染完数据->返回数据给前端->在浏览器中查看 -javascript=ECMAScript(5,6,13)+Dom+Bom#2Ajax的出现->后台发送异步请求,Re......
  • 学习日记——初识OOP
    0.目录1.对象2.类3.方法1.对象(1)万物皆对象世界是由多个看得见摸得着的物件组成的(2)身边的对象看的见摸得着的物件都称为对象,对象之间有区别是因为静态的属性和动态的行为有区别(3)对象的特征①静态的属性定义1:每个对象都有各自的静态的特征,在计算机中称之为属......
  • hive - beeline命令行可以使用的命令
       beeline>!help!allExecutethespecifiedSQLagainstallthecurrentconnections!autocommitSetautocommitmodeonoroff!batchStartorexecuteabatchofstatements!briefSetverbosemodeoff......
  • sparkSQL原理和使用——一般在生产中,基本都是使用hive做数据仓库存储数据,然后用spark
    一、sparkSQL概述1.1什么是sparkSQLSparkSQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。类似于hive的作用。1.2sparkSQL的特点1、容易集成:安装Spark的时候,已经集成好了。不需要单独安装。2、统一的数据访问方......
  • Hive扩展内容
    一个SQL语句的分析SELECTa.Key,SUM(a.Cnt)ASCntFROM(SELECTKey,COUNT(*)ASCntFROMTableNameGROUPBYKey,CASEWHENKey='KEY001'THENHash(Random())%50ELSE0END)aGROUPBYa.Key;这个SQL其实是一个解决数据倾......
  • Hive高级函数实战
    函数的基本操作和mysql一样的,hive也是一个主要做统计的工具,所以为了满足各种各样的统计需要,它也内置了相当多的函数showfunctions;#查看所有内置函数descfunctionfunctionName;#查看指定函数的描述信息descfunctionextendedfunctionName;#显示函数的扩展内容Hiv......
  • 【博学谷学习记录】超强总结,用心分享 | hive分区与分桶的区别
    【博学谷IT技术支持】公众号:积雷山摩云洞,欢迎关注!!!概念分区表:将数据分散到多个子目录中,在执行查询是,可以根据条件加快查询效率分桶表:是相对分区更细的颗粒度划分,分桶表是将表查分到不同的文件中,根据数据表某列的hash值进行分区,对某列数据分区就是对该列属性值的hash值取模,......
  • Hive核心实战
    Hive中数据库的操作showdatabases;#查看数据库列表usedefault;#选择数据库createdatabasemydb1;#创建数据库createdatabasemydb2location'/user/hive/mydb2';#指定hdfs目录的位置dropdatabasemydb1;#删除数据库default是默认数据库,默认就在这个库里面......