Hive-数据模型详解(超详细)

news/2024/10/18 7:51:53/

文章目录

  • 一、Hive数据模型
    • 1. 概述
    • 2. 数据库和表
      • (1) 创建数据库
      • (2) 使用数据库
      • (3) 创建表格
      • (4) 查看表结构
    • 3. 分区与桶
      • (1) 分区
      • (2) 桶
    • 4. 数据加载与查询
      • (1) 数据导入
      • (2) 查询语句
    • 5. 总结


一、Hive数据模型

1. 概述

Hive是基于Hadoop的数据仓库工具,它提供了类似于SQL的查询语言(称为HQL)来处理大规模结构化和半结构化数据。在使用Hive之前,我们需要了解其基本的数据模型。

2. 数据库和表

在Hive中,我们可以创建数据库(Database)来组织表(Table)。一个数据库可以包含多个表,并且每个表都有自己独立的架构和存储路径。

(1) 创建数据库

要创建一个新的数据库,在命令行或者通过图形界面工具执行以下命令:

CREATE DATABASE mydatabase;

这将创建名为"mydatabase" 的新数据库。

(2) 使用数据库

要使用已存在的某个特定数据库,在执行其他操作之前,请先切换到该目标库:

USE mydatabase;

(3) 创建表格

在所选中或默认选择好目标库后,我们可以开始定义并创建各种不同类型和格式的表。
例如, 我们可以用如下方式定义一张学生信息表:

CREATE TABLE students (id INT,name STRING,age INT,gender STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

上述代码将会生成名为"students" 的新table,并指定其列及对应类型。此外还设置了字段分隔符(‘,’ in this case),以便正确解析数据。

(4) 查看表结构

要查看表的结构,可以使用以下命令:

DESCRIBE students;

这将显示出"students" 表的列名和对应数据类型。

3. 分区与桶

Hive支持分区(Partition)和桶(Bucketing),这两个概念都是为了提高查询性能而设计的。

(1) 分区

分区允许我们按照某个列或多个列值进行逻辑划分,并将数据存储在不同目录下。例如,我们可以根据学生所属年级来创建一个以年级为分区键的学生信息表。

CREATE TABLE students_partitioned (id INT,name STRING,age INT)
PARTITIONED BY (grade STRING);

上述代码中,students_partitioned 表被定义为具有一个名为 grade 的字符串类型字段作为其分区键。每当插入新记录时,请确保指定相应的 grade 值以便正确地放置到相应目录下。

(2) 桶

桶是一种进一步细粒度切割数据集合以提高查询效率的方法。通过将记录散布到固定数量(称之为空间)中,在执行特定操作时可以减少需要扫描和处理的记录数。

CREATE TABLE students_bucketed (id INT,name STRING,age INT)
CLUSTERED BY (id) INTO 4 BUCKETS;

上述代码中,students_bucketed 表被定义为具有 id 字段作为其桶化列,并将数据分散到4个桶中。

4. 数据加载与查询

在Hive中,我们可以使用多种方式来加载数据到表格并执行查询操作。

(1) 数据导入

要从文件或其他数据库导入数据,请使用以下命令:

LOAD DATA INPATH '/path/to/data' INTO TABLE students;

这将把位于指定路径的数据文件加载到名为"students" 的表格中。

(2) 查询语句

Hive支持类似SQL的查询语言(HQL)来检索和处理存储在表格中的数据。例如:

SELECT * FROM students WHERE age > 18;

上述代码将返回年龄大于18岁的所有学生记录。

5. 总结

本文介绍了Hive的基本数据模型,包括数据库和表、分区与桶、以及如何进行数据加载和查询操作。通过合理地组织和管理您在Hive环境下所创建的数据库及其相关对象,您可以更好地利用该工具进行大规模结构化和半结构化数 据处理。


http://www.ppmy.cn/news/1283197.html

相关文章

git远程操作,推送【push】,拉取【pull】,忽略特殊文件,配置别名,标签管理

文章目录 前言:新建远程仓库克隆推送【push】拉取【pull】 配置git忽略特殊文件给命令配置别名 标签管理理解标签创建标签操作标签 前言: 大家如果没有看过前几章git的基础操作的话,推荐先看一下,看完再来看这个远程操作&#xf…

声明 | 为打击假冒账号、恶意抄袭账号等诈骗活动,提升本账号权威,本博主特此郑重声明

声明 | 为打击假冒账号、恶意抄袭账号诈骗活动,提升本账号权威,本博主特此郑重声明 一、本账号为《机器学习之心》博主CSDN唯一官方账号,唯一联系方式见文章底部。 二、《机器学习之心》博主未授权任何第三方账号进行模型合作、程序设计、源…

【数据库系统概论】第3章-关系数据库标准语言SQL(3)

文章目录 3.5 数据更新3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据 3.6 空值的处理3.7 视图3.7.1 建立视图3.7.2 查询视图3.7.3 更新视图3.7.4 视图的作用 3.5 数据更新 3.5.1 插入数据 注意:插入数据时要满足表或者列的约束条件,否则插入失败&#x…

安全运维是做什么的,主要工作内容是什么

安全运维,简称SecOps,是一种集成安全措施和流程到信息技术运维的实践。它的目的是确保在日常运维活动中,如网络管理、系统维护、软件更新等,均考虑并融入安全策略。安全运维的核心是实现安全和运维团队的密切协作,以快…

【并发设计模式】聊聊 基于Copy-on-Write模式下的CopyOnWriteArrayList

在并发编程领域,其实除了使用上一篇中的属性不可变。还有一种方式那就是针对读多写少的场景下。我们可以读不加锁,只针对于写操作进行加锁。本质上就是读写复制。读的直接读取,写的使用写一份数据的拷贝数据,然后进行写入。在将新…

Dash中的callback的使用 多input 6

代码说明 import plotly.express as pxmport plotly.express as px用于导入plotly.express模块并给它起一个别名px。这样在后续的代码中,你可以使用px来代替plotly.express,使代码更加简洁。 plotly.express是Plotly的一个子模块,用于快速创…

Unity 代码控制Text自适应文本高度

在使用代码给Text赋值时,且文本有多段,并需要根据实际文本高度适配Text组件的高度时,可以使用以下方法: //Text文本 public TextMeshProUGUI text;void Start() {//代码赋值文本text.text "好!\n很好!\n非常好!";//获…

音视频学习(二十二)——rtmp发流(tcp方式)

前言 本文主要介绍自研的RtmpStreamSender.dll,rtmp库提供接口接收裸流数据,支持将裸流数据封装为flv格式并通过rtmp协议发流。 关于rtmp协议基础介绍可查看:https://blog.csdn.net/www_dong/article/details/131026072 关于rtmp收流介绍可…