Hive 基础

Hive中并没有键的概念,但是用户可以对表建立索引。
Hive只有有限的索引功能,一张表的索引数据存储在另外一张表中。

Hive没有主键或基于序列密钥生成的自增键的概念,如果可以的话,应避免对非标准化数据进行JOIN操作。复杂的数据类型,比如array,map和struct有助于实现在单行中存储一对多数据。

CSV格式:值是用逗号分隔的
TSV格式:值是制表键分隔的

命名空间

Hive中数据库概念本质上仅仅是表的一个目录或者命名空间,这样做可以避免表命名冲突。如果用户没有显式指定数据库,那么将会使用默认的数据库default。

Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储,但是default数据库是个例外。因为该数据库本身没有自己的目录。

Hive QL是Hive查询语言,和普遍使用的SQL方言一样,并不完全遵守任意一种ANSI SQL标准的修订版。

内部表和外部表

内部表:Hive会或多或少控制着数据的生命周期
外部表:Hive并非完全拥有这份数据,因此删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。

Hive默认情况下会将表的数据存储在由配置项hive.metastore.warehouse.dir,如/user/hive/warehouse所定义的目录的子目录下。这种表即管理表,有时也称为内部表。当删除管理表时,也会删除定义在该目录下对应的子目录。

外部表则在创建表时使用LOCATION指明其存储路径。

应该注意,HiveQL语法结构并不适用于外部表。从严格意义上来说,Hive是管理着这些目录和文件,但是并不具有对它们的完全控制权限。

数据分区的可以有多种形式,但是最常用使用分区来水平分散压力,将数据从物理上转移到和使用最频繁的用户更近的地方,以及实现其他目的。

JOIN语句

INNER JOIN

只有进行连接的两张表中都存在与连接标准相匹配的数据才会保留下来。

LEFT OUTER JOIN

JOIN操作符左边表中符号WHERE子句的所有记录将会被返回。JOIN操作符右边表中如果没有符号ON后面连接条件的记录时,那么从右边表指定选择的列的值将会是NULL

OUTER JOIN

会忽略分区过滤条件

RIGHT OUTER JOIN

会返回右边表所有符合WHERE语句的记录。左表中匹配不上的字段用NULL代替

FULL OUTER JOIN

返回所有表中符号WHERE语句条件的所有记录,如果任一表的指定字段没有符合条件的值的话,那么就使用NULL值

LEFT SEMI-JOIN

左半开连接会返回左边表的记录,前提是其记录对于右边表满足ON语句中的判定条件。

笛卡尔积JOIN

笛卡尔积是一种连接,表示左边表的行数乘以右边表的行数等于笛卡尔积结果集的大小。

MAP-SIDE JOIN

如果所有表中只有一个张表是小表,那么可以在最大的表通过mapper的时候,将小表完全放到内存中,Hive可以在map端执行连接过程,可以和内存中的小表进行逐一匹配,从而省略掉常规链接操作需要的reduce过程。

### Hive 基础教程入门指南 #### 什么是 Apache Hive? Apache Hive 是一种数据仓库工具,专为查询和管理存储在分布式系统中的大型结构化数据集而设计。Hive 提供了一种类似于 SQL 的查询语言——HiveQL (HQL),使得熟悉关系数据库管理系统(RDBMS)的人可以轻松过渡到大数据处理环境[^1]。 #### Hive 在 Hadoop 生态系统中的位置 作为 Hadoop 平台的一部分,Hive 构建于 HDFS 和 MapReduce 上面。它允许用户通过简单的声明式命令来读取、写入以及管理和分析位于 HDFS 中的数据。此外,随着 Spark 成为了更受欢迎的选择之一,Hive 还支持使用 Spark 作为其执行引擎来进行更快捷的任务处理[^2]。 #### 安装配置 Hive 要安装并运行 Hive,请先确保已经正确设置了 Java 环境变量,并完成了 Hadoop 集群的搭建工作。接着下载最新版本的 Hive 发行包解压至指定目录下,在 `hive-env.sh` 文件里设置好相应的路径参数指向本地已有的 Hadoop 实例地址即可完成基本初始化操作。 对于文件分发情况可以通过如下方式验证: ```bash cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml ``` #### 使用 Hive 创建表与加载数据 创建新表格时可以选择内部表或外部表两种模式;前者会把原始输入源移动到默认库的位置,后者则保持原样不变仅建立索引关联。下面是一个简单例子展示如何向名为 'teacher' 的表上传文本文件: ```bash $hadoop fs -put teacher.txt /user/hive/warehouse/teacher ``` 此命令将会把本地磁盘上的 `teacher.txt` 文件复制到 HDFS 对应路径下的教师表中。 #### 查询优化技巧 当面对海量级规模的数据量时,合理的分区策略能够显著提高性能表现。比如按照日期字段进行划分可以让每次扫描只涉及特定时间段内的记录而不是整个历史积累下来的全部内容。另外就是压缩编码技术的应用同样有助于减少 I/O 开销从而加快响应速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值