Hive相关基础知识
1. Hive简介
Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL。
2. Hive数据模型
- Hive数据库。类似传统数据库的DataBase。
- 内部表。Hive的内部表与数据库中的Table在概念上是类似。
- 外部表。外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
- 分区。Partition对应于数据库中的Partition列的密集索引。
- 桶。Buckets是将表的列通过Hash算法进一步分解成不同的文件存储。
3. Hive特点
Hive表的数据默认只能在末尾追加。我们通常可以认为Hive不支持更新操作,这是因为Hive开启更新操作对性能影响极大,因此一般关闭Hive的更新功能。
- Hive操作数据的特点:
- 支持分区存储数据
- 追加数据(append)
- 全表覆盖+新增(overwrite)
- 不支持更新
- 不支持删除
- Hive本身特点:
- 可伸缩(在Hadoop的集群上动态添加设备)
- 可扩展
- 容错
- 输入格式的松散耦合
4. 使用Hive操作数据
使用Scala语言来进行Hive的相关操作。
/*
* 需要在resources添加spark相关配置文件
*/
object HiveTest {
// 设置用户
System.setProperty("HADOOP_USER_NAME", "hdfs")
// 设置SparkConf对象
var conf: SparkConf = new SparkConf()
conf.setAppName("HiveTest")
conf.setMaster("local")
// 创建SparkContext对象
val spark: SparkContext = new SparkContext(conf)
// 创建SparkSession对象
val sparkSession: SparkSession = SparkSession
.builder()
.config(conf)
.enableHiveSupport()
.getOrCreate()
def main(args: Array[String]): Unit = {
val df01: DataFrame = select()
df01.show(10)
}
// 查找SQL
def select(): DataFrame = {
val sql = "select * from ods_frtfd.ods_ind_doc where date_ymd = '2021-11-03'"
val dataFrame : DataFrame = sparkSession.sql(sql)
dataFrame
}
}
5. 参考链接
https://baike.baidu.com/item/hive/67986?fr=aladdin
https://blog.csdn.net/l1212xiao/article/details/80432759
https://cwiki.apache.org/confluence/display/Hive/Tutorial
https://www.cnblogs.com/ggzhangxiaochao/p/9363029.html