Hive相关基础知识

Hive相关基础知识


7pZ5wD.jpg

1. Hive简介

    Hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL。

2. Hive数据模型

  1. Hive数据库。类似传统数据库的DataBase。
  2. 内部表。Hive的内部表与数据库中的Table在概念上是类似。
  3. 外部表。外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
  4. 分区。Partition对应于数据库中的Partition列的密集索引。
  5. 桶。Buckets是将表的列通过Hash算法进一步分解成不同的文件存储。

3. Hive特点

    Hive表的数据默认只能在末尾追加。我们通常可以认为Hive不支持更新操作,这是因为Hive开启更新操作对性能影响极大,因此一般关闭Hive的更新功能。

  • Hive操作数据的特点:
  1. 支持分区存储数据
  2. 追加数据(append)
  3. 全表覆盖+新增(overwrite)
  4. 不支持更新
  5. 不支持删除
  • Hive本身特点:
  1. 可伸缩(在Hadoop的集群上动态添加设备)
  2. 可扩展
  3. 容错
  4. 输入格式的松散耦合

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