数仓基础与hive入门

news/2024/4/25 13:29:00/文章来源:https://blog.csdn.net/Sun123234/article/details/129231041

目录

    • 1、数仓
      • 数据仓库主流开发语言--SQL
    • 2、Apache Hive入门
      • 2.1 hive定义
      • 2.2 为什么使用Hive
      • 2.3 Hive和Hadoop关系
      • 2.4 场景设计:如何模拟实现Hive功能
      • 2.5 Apache Hive架构、组件
    • 3、Apache Hive安装部署
      • 3.1 metastore配置方式
    • 4、Hive SQL语言:DDL建库、建表
      • 4.1 数据库与建库
      • 4.2 表与建表
        • 4.2.1 数据类型
        • 4.2.2 分隔符指定语法
        • 4.2.3 案例:结构化文件映射成表
      • 4.3 Hive Show语法
      • 4.4 注释comment中文乱码问题解决

1、数仓

数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。

数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持

  • 数据仓库本身并不“生产”任何数据,也不需要“消费”任何的数据
  • 数仓为了分析数据而来
  • 业务数据存储在联机事务处理系统(OLTP)中,前台接收数据后,快速给出处理结果
    关系型数据库(RDBMS)是OLTP典型应用,比如:Oracle、MySQL、SQL Server等。
  • ,数仓是一个用于存储、分析、报告的数据系统,目的是构建面向分析的集成化数据环境。我们把这种面向分析、支持分析的系统称之为OLAP(联机分析处理)系统
    在这里插入图片描述

数仓主要特征:面向主题、集成性、非易失性、时变性

数据仓库主流开发语言–SQL

结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据

SQL应用广泛原因:学习成本低,对数据分析友好

结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据
非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和音频、视频信息等。

SQL主要语法分为两个部分:数据定义语言 (DDL)和数据操纵语言 (DML) 。

  • DDL语法使我们有能力创建或删除表,以及数据库、索引等各种对象,但是不涉及表中具体数据操作:
    CREATE DATABASE - 创建新数据库
    CREATE TABLE - 创建新表
  • DML语法是我们有能力针对表中的数据进行插入、更新、删除、查询操作:
    SELECT - 从数据库表中获取数据
    UPDATE - 更新数据库表中的数据
    DELETE - 从数据库表中删除数据
    INSERT - 向数据库表中插入数据

2、Apache Hive入门

2.1 hive定义

Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。

Hive核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行

2.2 为什么使用Hive

使用Hadoop MapReduce直接处理数据所面临的问题:

  • 人员学习成本太高 需要掌握java语言
  • MapReduce实现复杂查询逻辑开发难度太大

使用Hive处理数据的好处:

  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
  • 避免直接写MapReduce,减少开发人员的学习成本
  • 支持自定义函数,功能扩展很方便
  • 背靠Hadoop,擅长存储分析海量数据集

2.3 Hive和Hadoop关系

从功能来说,数据仓库软件,至少需要具备下述两种能力:
存储数据的能力、分析数据的能力

Apache Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助Hadoop。
Hive利用HDFS存储数据,利用MapReduce查询分析数据。

这样突然发现Hive没啥用,不过是套壳Hadoop罢了。其实不然,Hive的最大的魅力在于用户专注于编写HQLHive帮您转换成为MapReduce程序完成对数据的分析

hive可以理解为sql on hadoop

2.4 场景设计:如何模拟实现Hive功能

Hive能将数据文件映射成为一张表,这个映射是指什么?
文件和表之间的对应关系

Hive软件本身到底承担了什么功能职责?
SQL语法解析编译成MapReduce

在hive中能够写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。

映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据 metadata)。

元数据信息应该包括:

  • 表对应着哪个文件(位置信息)
  • 表的列对应着文件哪一个字段(顺序信息)
  • 文件字段之间的分隔符是什么

用户写完sql之后,hive需要针对sql进行语法校验,并且根据记录的元数据信息解读sql背后的含义,制定执行计划
并且把执行计划转换成MapReduce程序来具体执行,把执行的结果封装返回给用户。
基于上面分析,hive架构图应该如下:
在这里插入图片描述

2.5 Apache Hive架构、组件

在这里插入图片描述
Hive组件:

  • 用户接口:包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。

  • 元数据存储:通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
    我们分析的表数据在HDFS上,而元数据是存储在MySQL上的

  • Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器
    完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行

  • 执行引擎
    Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark3种执行引擎。

3、Apache Hive安装部署

Metadata元数据:描述数据的数据
元数据存储在关系型数据库中,如hive内置的Derby、或者第三方如MySQL等

Metastore即元数据服务。Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据
有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全
使用Metastore原因 :保证元数据的安全

在这里插入图片描述

3.1 metastore配置方式

metastore服务配置有3种模式:内嵌模式、本地模式、远程模式。
区分3种配置方式的关键是弄清楚两个问题:

  • Metastore服务是否需要单独配置、单独启动?
  • Metadata是存储在内置的derby中,还是第三方RDBMS,比如MySQL。
  • 企业推荐模式–远程模式部署

在这里插入图片描述
在这里插入图片描述

4、Hive SQL语言:DDL建库、建表

4.1 数据库与建库

在这里插入图片描述
数据在表中,表在库中

数据定义语言 (Data Definition Language, DDL),是SQL语言集中对数据库内部的对象结构进行创建,删除,修改等的操作语言,这些数据库对象包括database、table等
DDL核心语法由CREATE、ALTER与DROP三个所组成。DDL并不涉及表内部数据的操作。

HQL中create语法(尤其create table)将是学习掌握Hive DDL语法的重中之重。
建表是否成功直接影响数据文件是否映射成功,进而影响后续是否可以基于SQL分析数据

create database:
create database用于创建新的数据库
COMMENT:数据库的注释说明语句
LOCATION:指定数据库在HDFS存储位置,默认/user/hive/warehouse/dbname.db
WITH DBPROPERTIES:用于指定一些数据库的属性配置。

node1中:

create database ithei

可以回到node1:9870中Hadoop的/user/hive/warehouse/中找到ithei.db文件
use database
选择特定的数据库,切换当前会话使用哪一个数据库进行操作

drop database
删除数据库
默认行为是RESTRICT,这意味着仅在数据库为空时才删除它。
要删除带有表的数据库(不为空的数据库),我们可以使用CASCADE

#删除库itca ,itca库下没有表可以直接删除
drop database itca

4.2 表与建表

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
(col_name data_type [COMMENT col_comment], … )
[COMMENT table_comment]
[ROW FORMAT DELIMITED …];

create table [if not exists] [库名.]表名 (列名 数据类型 [comment "注释内容"],...) 
[row format delimited
fields terminated by "\t"];

4.2.1 数据类型

Hive数据类型指的是表中列的字段类型;

  • 整体分为两类:原生数据类型(primitive data type)和复杂数据类型(complex data type)。
  • 最常用的数据类型是字符串String和数字类型Int。

在这里插入图片描述

4.2.2 分隔符指定语法

ROW FORMAT DELIMITED语法用于指定字段之间等相关的分隔符,这样Hive才能正确的读取解析数据。

LazySimpleSerDe是Hive默认的,包含4种子语法,分别用于指定字段之间、集合元素之间、map映射 kv之间、换行的分隔符号

在这里插入图片描述

4.2.3 案例:结构化文件映射成表

文件archer.txt:
在这里插入图片描述
datagrip中写sql

数值类型int
字符串类型string

--1、创建一张表,将文件archer.txt映射成功
-- 表名
-- 字段、名称、类型、顺序
-- 字段之间的分隔符
create table ithei.t_archer(id int comment "ID编号",name string comment "英雄名称",hp_max int comment "最大生命",mp_max int comment "最大法力",attack_max int comment "最高物攻",defense_max int comment "最大物防",attack_range string comment "攻击范围",role_main string comment "主要定位",role_assist string comment "次要定位"
)
row format delimited
fields terminated by "\t";  --字段之间的分隔符是tab键 制表符

在datagrip中可以直接连接
可以在hdfs网页上上传文件数据,也可以node上上传:

cd ~
mkdir hivedata
cd hivedata/
hadoop fs -put archer.txt /user/hive/warehouse/itheima.db/t_archer
select * from t_archer;#可以显示出上传的表数据
  • Hive建表时如果没有row format语法指定分隔符,则采用默认分隔符;
  • 默认的分割符是’\001’,是一种特殊的字符,使用的是ASCII编码的值,在文本中显示SOH,在vim编辑中显示^A

4.3 Hive Show语法

1,显示所有数据库
SCHEMAS和DATABASES的用法 功能一样

show databases;
show schemas;

2,显示当前数据库下所有表

show tables;
show tables [in 库名] --指定某个数据库

3,显示一张表的元数据信息

desc formatted 表名;
--会显示字段名,类型,注释等等信息

4.4 注释comment中文乱码问题解决

mysql默认编码不支持中文,支持的是latin1编码。如果中文注释出现???的乱码格式。下面方法解决:

node上:

mysql -u root -p 回车,输入密码
进入MySQL
show databases;
use hive3;
show tables;

在MySQL中复制下面的代码进去执行。ctrl +d结束

alter table hive3.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table hive3.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table hive3.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table hive3.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table hive3.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

此时改好了编码,但是已经创建的表中文还是错误,需要删除表后再创建即可

drop table 表名;  #删除
create table 表名(..) #载创建即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74940.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【谷歌grc】recaptcha browser-error 错误

grc 谷歌人机验证错误 https://www.google.com/recaptcha/api/siteverif 返回错误信息 browser-error [{"success": false,"error-codes": ["browser-error"] }]之前都是调通能用的,突然之间就不能用了,查了半天也没有找…

蓝库云|什么是供应链管理?SCM对制造业的重要性

企业在产品的销售经营上,往往不会考量到供应链管理(SCM)的流程规划,但现今的商业环境与以往不同,高度竞争与客户不断提升的期望,藉由做好供应链管理(SCM),才能更准时的提供优质产品与优良服务,增强企业竞争…

Qt 小项目 图片浏览系统

目录 引言 实现功能: 效果: 实现图片浏览所用知识: 实现流程: 实现环境和UI设计 具体实现 引言 本系统支持,自动播放,左右拖动切换,点击列表切换,点击按钮切换;是一个标准的…

职场性别报告,男女薪酬仍有差距,男性平均薪酬比女性高29.7%

性别是否影响职业?女性求职比男性更加困难?男性薪酬比女性更有优势?人们一说到警察、建筑师通常会想到高大魁梧的男性形象,一说到幼师、护士往往想到的都是温柔的女性形象,职业好似与性别挂钩;女性求职通常…

vue脚手架多页自动化生成实践

前言 在前端开发过程中,常常面对多种业务场景。到目前为止,前端对于不同场景的处理通常会采用不同的渲染方案来组合处理,常见的渲染方案包括:CSR(Client Side Rendering)、SSR(Server Side Rendering)、SSG(Static Site Generati…

LVGL8.3 集成 ST7789V 显示驱动和 CST816T 触摸屏驱动

LVGL8.3 集成 ST7789V 显示驱动和 CTS816S 触摸屏驱动起因效果(正常显示,触摸屏可调换X,Y轴)使用方式前提操作步骤最后参考起因 LVGL的ESP32 Drivers库中已经包含了大多数显示和触摸芯片的驱动,基本上只需要在MenuCon…

一些无线通信系统模型的概念

一些无线通信系统模型的概念 扩频通信,指的是系统的带宽WWW远大于其信息传输速率R(bits/s)R(bits/s)R(bits/s), 定义展频带因子BeWRB_e \frac{W}{R}Be​RW​, 易知在扩频通信系统中,BeB_eBe​远大于1. 在频率上产生如此大的冗余度,主要是为了减轻无线通信或卫星通信中经常产生…

SpringMVC——响应处理(1)【包含源码分析】

Controller public class JsonReturnController {ResponseBodyGetMapping("/getPet")public Pet getPet(){Pet petnew Pet();pet.setAge(5);pet.setName("lily");return pet;} }项目启动后 浏览器输入 http://localhost:8080/getPet 。 debug DispatcherS…

设备驱动模型--存储技术原理分析笔记 基于2.6.43内核

本文为读书笔记,详细内容参考《存储原理技术分析》1- 驱动模型2- 总线类型2.1- 重要数据结构总线bus_type 和 bus_type_private 互相可以找到对方struct bus_type {const char *name;struct bus_attribute *bus_attrs;struct device_attribute *dev_attrs;s…

BPMN2.0是什么,BPMN能解决企业流程管理中哪些问题?

一、前言: 在任何行业和企业中,一定存在着各式各样的流程,请假流程、报销流程、入职流程、离职流程、出差流程、合同审批流程、出入库流程等等…… 无论是管理者、技术人员还是业务人员,每天肯定也在使用各种流程,但…

Spring彻头彻尾的讲解,按照Spring框架启动流程,逐步剖析问题,不再是大杂烩!

文章目录1. 定义Spring Bean篇1.1 定义Spring Bean的几种方式1.1.1 XML文件定义Spring Bean1.1.2 JavaConfig定义Spring Bean1.1.3 Component注解定义SpringBean1.2 装配Spring Bean的四种常用方式1.2.1 手动装配 XML文件1.2.2 自动装配 XML文件1.2.3 手动装配 JavaConfig文…

C++常见类型及占用内存表

GPS生产厂家在定义数据的时候都会有一定的数据类型,例如double、int、float等,我们知道它们在内存中都对应了一定的字节大小,而我在实际使用时涉及到了端序的问题(大端序高字节在前,小端序低字节在前)&…

【ICCV2022】 CAPAO:一种高效的单阶段人体姿态估计模型

CAPAO:一种高效的单阶段人体姿态估计模型 重新思考关键点表示:将关键点和姿态建模作为多人姿态估计的对象(Rethinking Keypoint Representations: Modeling Keypoints and Poses as Objects for Multi-Person Human Pose Estimation&#xf…

《数据库系统概论》学习笔记——第四章 数据库安全

教材为数据库系统概论第五版(王珊) 这一章简单记一下那几条sql的用法和两种存取控制和审计(今年期末考了)吧,不知道有啥好考的 数据库安全性 问题的提出 数据库的一大特点是数据可以共享数据共享必然带来数据库的安全…

idea远程调试线上jar包

有时候本地代码没问题但在线上运行会报错,这时候可以使用idea的remote功能调试线上jar包 步骤1 步骤2:新建remote 步骤3:配置服务器ip和端口 并复制生成的JVM参数供之后使用 步骤4:打jar包,并将生成的jar包放到服务…

Uncaught ReferenceError: jQuery is not defined

今天在拉取项目部署到本地的时候遇到了一个问题特此记录一下 (以后闭坑) 我和同事同时拉取了一样的代码,结果同事的页面加载正常而我的页面像被狗啃了一样,知道是js的问题但是不知道问题出在哪里?后来还是同事帮我解决…

栈与队列小结

一、理论基础1.队列是先进先出,栈是先进后出2.栈和队列是STL(C标准库)里面的两个数据结构。栈提供push和pop等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器。3.栈是以底层容器…

CRM客户管理系统哪个好用?盘点前十名!

CRM客户管理系统排行?盘点前十名! CRM客户管理系统是一种集成多种功能的软件系统,可以帮助企业跟进和管理客户关系、提高销售业绩、优化营销策略等。对于企业来说,选择一款适合自己的CRM系统非常重要,因为它能够直接影…

python之web自动化测试框架

梳理下搭建web自动化框架的流程: 创建目录: cases:存放测试用例,unittest框架要求用例名必须以test开头,所以命名test_case.py test_case.py代码如下:继承unittest.TestCase类下面的方法setupclass(),te…

学习 Python 之 Pygame 开发魂斗罗(六)

学习 Python 之 Pygame 开发魂斗罗(六)继续编写魂斗罗1. 创建碰撞类2. 给地图添加碰撞体3. 让人物可以掉下去4. 实现人物向下跳跃5. 完整的代码继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗(五)中,我…