Hive基础

本文介绍了Hive的基础知识,包括原始类型如TINYINT、STRING、DATE等,以及复合类型如ARRAY、MAP、STRUCT。还详细讲解了建表语句,并重点讨论了分区功能,包括如何建立、删除分区以及如何载入分区数据。此外,文章还提到了Hive中的桶(bucket)概念,用于拆散表数据。

原始类型

TINYINT
1byte的长度,通过后缀Y声明,如:13Y。
SMALLINT
2byte长度,通过后缀S声明,如14S。
INT
4byte长度,普通数字默认为INT
FLOAT
4byte单精度浮点数
DOUBLE
8byte双精度浮点数
DECIMAL
可指定精度的浮点数,默认精度为decimal(10,0)
BINARY
二进制数据
BOOLEAN
取值TRUE或FALSE
STRING
字符串类型,最大容量2G
CHAR
字符类型,最大长度255
VARCHAR
变长类型的CHAR,最大长度65535
DATE
日期类型,格式:YYYY-MM-DD
TIMESTAMP
时间戳类型,格式:YYYY-MM-DD HH:MM:SS[.fff]

复合类型

ARRAY
数组类型,包含一系列统一类型的数据,如:[‘apple’,’juice’],可以通过index来访问。
MAP
映射表的类型,通过key来访问value,如:{1:”apple”,2:”juice”},fruit[1]=”apple”
STRUCT
用户自定义类型,同MAP类型类似,如:{1,“apple”},默认第一列为col1,依次递增
NAMED STRUCT
指定Name的Struct结构,通过Name直接访问value,如:{“apple”:“gala”},fruit.apple=”gala”
UNION
可以组合上述的任何数据类型,如:{123:[“man”,”women”]}

建表语句

CREATE TABLE table_test
(
col1 string,/*列名 列类型*/
col2 ARRAY<string>,
col3 STRUCT<name1:int,name2:string,name3:float>,
col4 MAP<string,int>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'/*指定每一行字段之间的分隔符*/
COLLECTIONS ITEMS TERMINATED BY ','/*指定数组元素的分隔符*/
MAP KEYS TERMINATED BY ':';/*指定MAP中Key和Value的分隔符*/

新建数据库后,hive会为每个数据库建立一个文件夹,文件夹的默认位置在:/user/hive/warehouse.

分区(partition)

默认情况下,一个简单的查询会扫描整个表文件,当表中的数据非常大的时候,会导致查询的效率较低.通过分区(partition)的方式,减少每次查询扫描的文件大小.

建立分区

CREATE TABLE ...
PARTITIONED BY (year INT,month INT) /*建立表分区,指定分区字段*/
ROW FORMAT DELIMITED ...

/*在表中增加分区*/
ALTER TABLE table_name ADD
PARTITION (year=2015,month=1)
PARTITION (year=2015,month=2)

/*显示partition信息*/
SHOW PARTITIONS table_name;

删除分区

ALTER TABLE table_name
DROP IF EXISTS PARTITION (year=2015,month=1);

载入分区数据

LOAD DATA LOCAL INPATH
'/path/to/file'
OVERWRITE INTO TABLE table_name
PARTITION (year=2015,month=1);

桶(bucket)

bucket是除了分区外的另外一种拆散表数据的方式.建表时,我们可以指定根据哪些字段分bucket和bucket的总数量.在实际使用中,推荐每个bucket的数据大小为HDFS block size的2*N倍.

/*在建表语句中,增加下列信息*/
CLUSTERED BY (bucket_field) INTO 2 BUCKETS
### 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、付费专栏及课程。

余额充值