Apache Hive基础

Apache Hive基础

Hive理论基础

  • 1、什么是Hive?

    • 基于Hadoop的数据仓库解决方案
      • 将结构化的数据文件映射为数据库表
      • 提供类sql的查询语句HQL(Hive Query Language)
      • Hive让更多人使用Hadoop
    • Hive成为Apache顶级项目
      • Hive始于2007年的Facebook
      • 官网:http://hive.apache.org
  • 2、Hive的优势和特点

    • 提供了一个简单的优化模型
    • HQL类SQL语法,简化MR开发
    • 支持在不同的计算框架上运行
    • 支持在HDFS和HBase上临时查询数据
    • 支持用户自定义函数、格式
    • 成熟的JDBC和ODBC驱动程序,用于ETL和BI
    • 稳定可靠(真实生产环境)的批处理
    • 有庞大活跃的社区
  • 3、Hive元数据管理

    • 记录数据仓库中模型的定义、各层级间的映射关系
    • 存储在关系数据库中
      • 默认Derby,轻量级内嵌SQL数据库
        • Derby非常适合测试和演示
        • 存储在.metastore_db目录下
      • 实际生产一般存储在MySQL中
        • 修改配置文件hive-site.xml
    • HCatalog
      • 将Hive元数据共享给其他应用程序
  • 4、Hive体系架构在这里插入图片描述

  • 5、Hive Interface -命令窗口模式

    • 两种工具:Beeline和Hive命令行(CLI)
    • 两种模式:命令行模式和交互模式 - 命令行模式在这里插入图片描述
      • 交互模式在这里插入图片描述
    • Hive和Beeline区别(Hiveserver和Hiveserver2):
      • hive不需要启动服务再访问
      • beeline需要先启动服务端,在启动客户端
      • beeline在查询效率上比hive高,beeline不支持update和delete
  • 6、Hive数据类型

    • 原始类型在这里插入图片描述

    • 复杂数据类型

      • Array:存储的数据为相同类型
      • Map:具有相同类型的键值对
      • Struct:封装了一组字段在这里插入图片描述
  • 7、Hive元数据结构在这里插入图片描述

  • 8、数据表

    • 分为内部表和外部表
      • 内部表(管理表)
        • HDFS中为所属数据库目录下的子文件夹
        • 数据完全由Hive管理,删除表(元数据)会删除数据
      • 外部表(External Tables)
        • 数据保存在指定位置的HDFS路径中
        • Hive不完全管理数据,删除表(元数据)不会删除数据
    • 内部表和外部表的区别:
      • 删除内部表,删除表元数据和数据
      • 删除外部表,删除元数据,不删除数据
  • 建表语句

create table table_name(... ...)			#外部表则加上关键字:external
partitioned by (country string,add string)	#以country和add进行分区
row format delimited						#把分隔符格式化
fields terminated by '|'					#以'|'为列分隔符
collection items terminated by ','			#以','为array的分隔符
map keys terminated by ':'					#以':'为map键值的分隔符
lines terminated by '\n';					#行分割
  • 建表高阶语句 - CTAS and WITH

    • CTAS – as select方式建表
      • CREATE TABLE ctas_employee as SELECT * FROM employee;
    • CTE (CTAS with Common Table Expression)
      • CREATE TABLE cte_employee AS
        WITH
        r1 AS (SELECT name FROM r2 WHERE name = ‘Michael’),
        r2 AS (SELECT name FROM employee WHERE sex_age.sex= ‘Male’),
        r3 AS (SELECT name FROM employee WHERE sex_age.sex= ‘Female’)
        SELECT * FROM r1 UNION ALL SELECT * FROM r3;
    • Like
      • CREATE TABLE employee_like LIKE employee;
  • 9、Hive分区

    • 作用
      • 分区列的值将表划分为segments(文件夹)
      • 查询时使用“分区”列和常规列类似
      • 查询时Hive自动过滤掉不用于提高性能的分区
    • 分区操作
      • 定义:
        • partitioned by ()
        • alter table table_name add partition ()
      • 插入:
        • insert into table_name partition () values()
        • load data [local] inpath ‘’ into table_name partition ()
    • 分为静态分区和动态分区
      • 静态分区操作
        • 添加分区:
          • ALTER TABLE employee_partitioned ADD PARTITION (year=2019,month=3) PARTITION (year=2019,month=4);
          • 注意:添加多个分区时,分区间用空格分隔!!
        • 删除分区:
          • ALTER TABLE employee_partitioned DROP PARTITION (year=2019,month=3),PARTITION (year=2019, month=4);
          • 注意:删除多个分区时,分区间用逗号分隔!!
      • 动态分区操作
        • 使用动态分区需设定属性
          • set hive.exec.dynamic.partition=true;
          • set hive.exec.dynamic.partition.mode=nonstrict;
        • 动态分区设置方法
          • insert方式添加动态分区
  • 10、分桶

    • 分桶对应于HDFS中的文件
      • 更高的查询处理效率
      • 是抽样(sampling)更高效
      • 根据"桶列"的hash函数将数据进行分桶
    • 分桶只要动态分桶
      • set hive.enforce.bucketing=true;
    • 定义分桶
      • clustered by (id) into 2 buckets
      • 注意:分桶的列是表中已有的列,分桶数最好是2的n次方
    • 必须使用insert方式加载数据
  • 11、Hive视图(views)

    • 试图概述
      • 通过隐藏子查询、连接和函数来简化查询的逻辑结构
      • 虚拟表,从真实表中选取数据
      • 只保存定义,不存储数据
      • 如果删除或更改基础表,则查询视图将失败
      • 视图是只读的,不能插入或装载数据
    • 应用场景
      • 将特定的列提供给用户,保护数据隐私
      • 查询语句复杂的场景
    • Hive视图操作
      • 视图操作命令:CREATE、SHOW、DROP、ALTER在这里插入图片描述
      • Hive侧视图
        • 常与表生成函数结合使用,将函数的输入和输出连接
        • OUTER关键字:即使output为空也会生成结果
          • select name,work_place,loc from employee lateral view outer explode(split(null,’,’)) a as loc;
        • 支持多层级
          • select name,wps,skill,score from employee
            lateral view explode(work_place) work_place_single as wps
            lateral view explode(skills_score) sks as skill,score;
        • 通常用于规范化或解析JSON
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在 Hive 中删除的部分数据时遇到了错误,可能是由于以下几个原因: 1. 没有被正确的加载:如果你没有正确地加载,那么你将无法删除部分数据。请检查是否被正确地加载。 2. 权限问题:如果你没有足够的权限来删除数据,那么你将无法删除它。请检查你在 Hive 中的权限是否允许你删除数据。 3. 锁定问题:如果被锁定了,那么你将无法删除它的部分数据。请检查是否有其他用户或进程正在使用该。 4. 语法问题:如果你使用的删除语句语法错误,那么你将无法删除的部分数据。请检查你的删除语句是否正确。 如果以上方法都无法解决问题,你可以尝试使用 Hive 的 INSERT OVERWRITE 命令来删除部分数据。这个命令将覆盖现有的数据,从而实现删除部分数据的目的。你可以使用如下命令删除的部分数据: ``` INSERT OVERWRITE TABLE <table_name> PARTITION (<partition_column>=<partition_value>) SELECT * FROM <table_name> WHERE <condition>; ``` 其中,`<partition_column>` 和 `<partition_value>` 是的分区列和分区值,`<condition>` 是用于选择要删除的数据的条件。这个命令将删除符合条件的数据,并将剩余的数据写回中。 注意,使用 INSERT OVERWRITE 命令来删除部分数据可能会导致数据的不完整性,因为这个命令将覆盖现有的数据。因此,在使用这个命令之前,请确保你已经备份了数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值