Apache Hive3定位表并更改其位置

news2025/1/23 22:02:12

Apache Hive3表

      • 1、Apache Hive3表概述
      • 2、Hive3表存储格式
      • 3、Hive3事务表
      • 4、Hive3外部表
      • 5、定位Hive3表并更改位置
      • 6、使用点表示法引用表
      • 7、理解CREATE TABLE行为





1、Apache Hive3表概述


Apache Hive3表类型的定义和表类型与ACID属性的关系图使得Hive表变得清晰。表的位置取决于表的类型。您可以根据其支持的存储格式选择表的类型

您可以创建ACID(原子性、一致性、隔离性和持久性)表用于不受限制的事务或仅插入的事务。这些表是Hive托管表。数据与Schema一起位于Hive Metastore中。或者您可以创建一个外部表用于非事务性使用。数据位于Hive Metastore外部。Schema元数据位于Hive Metastore内部。因为外部表受Hive的控制很弱,所以该表不符合ACID

下图描述了Hive表的类型:

在这里插入图片描述

以下表格显示了可以使用Hive创建的表的类型、是否支持ACID属性、所需的存储格式以及关键的SQL操作:

表类型ACID文件格式插入更新/删除
托管表:CRUD事务支持ORC支持支持
托管表:仅插入式事务支持任意格式支持不支持
托管表:临时不支持任意格式支持不支持
外部表不支持任意格式支持不支持

虽然不能使用UPDATE或DELETE语句删除某些类型的表中的数据,但是可以对任何类型的表使用DROP PARTITION来删除数据

2、Hive3表存储格式


CRUD表中的数据必须为ORC格式。实现支持AcidInputFormat和AcidOutputFormat的存储处理程序等效于指定ORC存储

仅插入使用的表支持所有文件格式

默认情况下,托管表的存储类型为“优化行列”(ORC)。如果在表创建的过程中未指定任何存储,或者指定了ORC存储,则将接受默认的设置,获得具有插入、更新和删除(CRUD)功能的ACID表。如果指定其他任何存储类型,例如TEXT、CSV、AVRO或JSON,则将获得仅插入的ACID表,您不能更新或删除仅插入表中的列

3、Hive3事务表


事务表是驻留在Hive仓库中的ACID表。为了实现ACID合规性,Hive必须管理表,包括对表数据的访问。只有通过Hive才能访问和更改托管表中的数据。由于Hive可以完全控制托管表,因此Hive可以广泛地优化这些表

与用作联机分析处理(OLAP)系统相反,Hive旨在支持相对较低的事务率。您可以使用SHOW TRANSACTIONS命令列出未完成和中止的事务

Hive3中的事务表与非ACID表相当。Hive3事务表中不需要分桶或排序。分桶不会影响性能。这些表与原生的云存储兼容

Hive支持每个事务一个语句,该语句可以包含任意数量的行、分区或表

4、Hive3外部表


外部表数据不是由Hive拥有或控制的。当您想使用Hive以外的其他工具直接在文件级别访问数据时,通常使用外部表。您还可以使用存储处理程序(例如Druid或HBase)来创建位于Hive元存储之外的表

在外部表上,Hive3不支持以下功能:

  • 查询缓存
  • 物化视图(仅限于有限的方式)
  • 自动运行时过滤
  • 插入后的文件合并
  • ARCHIVE、UNARCHIVE、TRUNCATE、MERGE和CONCATENATE。这些语句仅适用于Hive管理表

在外部表上运行DROP TABLE时,默认情况下,Hive仅删除元数据(Schema)。如果您希望DROP TABLE命令也删除外部表中的实际数据,就像DROP TABLE在托管表上所做的那样,则需要将external.table.purge属性设置为true

5、定位Hive3表并更改位置


您需要知道Hive在HDFS上存储表的位置以及安装服务后如何更改仓库位置

您在CDP中创建的新表存储在托管表的Hive仓库或外部表的Hive仓库中。以下默认仓库位置位于HDFS文件系统中:

/warehouse/tablespace/managed/hive
/warehouse/tablespace/external/hive

托管表驻留在托管表空间中,只有Hive可以访问。默认情况下,Hive假定外部表驻留在外部表空间中

要确定托管或外部表类型,您可以运行如下命令:

DESCRIBE EXTENDED table_name;

要访问对象存储或文件系统(如HDFS)中的外部表,需要设置Ranger策略

更改Hive仓库位置的功能旨在在安装服务后立即使用。您可以使用Cloudera Manager中的Hive Metastore Action菜单更改仓库的位置,步骤如下:

1) 在Cloudera Manager中,单击集群->Hive->操作菜单->创建Hive仓库目录

在这里插入图片描述

2) 在Cloudera Manager中,单击Clusters->Hive(Hive Metastore服务)->Configuration,并将hive.metastore.warehouse.dir属性值更改为新Hive仓库目录的路径

3) 单击Hive->Hive->操作菜单->创建Hive仓库外部目录

4)hive.metastore.warehouse.external.dir属性值更改为Hive仓库外部目录的路径

5) 配置Ranger Hadoop SQL策略,访问对象存储(如S3、Ozone)或文件系统(如HDFS)上的目录URL

6、使用点表示法引用表


Hive3.1使用点表示法对表引用的更改可能需要对Hive脚本进行更改

CDP中的Hive3.1包括SQL兼容性 (Hive-16907),它拒绝db.tableSQL查询。表名中不允许使用.点。要在表名中引用数据库和表,请将两者括在反引号中,如下所示:

`db`.`table`

7、理解CREATE TABLE行为


Hive表的创建自Hive3以来发生了重大变化,以提高可用性和功能。如果要从CDH或HDP升级,则必须了解影响遗留表创建行为的更改

Hive通过以下方式改变了表的创建:

  • 创建ACID兼容的表,这是CDP中的默认值
  • 支持简单的写入和插入
  • 写入多个分区
  • 在单个SELECT语句中插入多个数据更新
  • 消除了对桶的需要

如果你有一个ETL管道在Hive中创建表,那么这些表将被创建为ACID。Hive现在严格控制访问,并定期对表执行压缩。使用兼容ACID的事务表不会导致性能或操作过载。从Spark和其他客户端访问托管Hive表的方式发生了变化。在CDP中,访问外部表需要设置安全访问权限

您必须了解传统平台(如CDH或HDP)中CREATE TABLE语句的行为,以及升级到CDP(Cloudera Data Platform)后这些行为的变化

  • 在升级到CDP之前

    • 在CDH5、CDH6和HDP2中,默认情况下,CREATE TABLE以纯文本格式创建一个非ACID管理的表
    • 在HDP3和CDP 7.1.0到7.1.7,默认情况下,CREATE TABLE可以创建ORC格式的完整ACID事务表,也可以为所有其他表格式创建仅插入的ACID事务表
  • 升级到CDP后

    • 如果您从HDP2、CDH5或CDH6升级到CDP 7.1.0-7.1.8,默认情况下CREATE TABLE创建ORC格式的完整ACID事务表,或者为所有其他表格式创建仅插入的ACID事务表
    • 如果您正在从HDP3或CDP 7.1.0升级到7.1.7-7.1.8,现有的行为仍然存在,CREATE TABLE创建ORC格式的完整ACID事务表,或者为所有其他表格式创建仅插入的ACID事务表

既然已经理解了CREATE TABLE语句的行为,就可以通过配置某些属性来选择修改默认的表行为。配置的优先顺序如下(修改默认的CREATE TABLE行为):

1)创建表时覆盖默认行为

无论数据库、会话或站点级别的设置如何,您都可以通过在CREATE table语句中使用MANAGED或EXTERNAL关键字来覆盖默认的表行为

CREATE [MANAGED][EXTERNAL] TABLE foo (id INT);

2)在数据库级别设置默认表类型

您可以使用数据库属性defaultTableType=EXTERNAL或ACID来指定要使用CREATE table语句创建的默认表类型。可以在创建数据库时指定该属性,也可以在稍后使用ALTER DATABASE语句指定该属性。例如:

CREATE DATABASE test_db WITH DBPROPERTIES ('defaultTableType'='EXTERNAL');

在本例中,使用CREATE TABLE语句在test_db数据库下创建的表将创建启用了清除功能的外部表(external.table.purge = 'true'

您还可以选择将数据库配置为只允许创建外部表,而不允许创建ACID表。在创建数据库时,您可以设置数据库属性EXTERNAL_TABLES_ONLY=true,以确保仅在数据库中创建外部表。例如:

CREATE DATABASE test_db WITH DBPROPERTIES ('EXTERNAL_TABLES_ONLY'='true');

3)在会话级别设置默认的表类型

通过将hive.create.as.external.legacy设置为true或false,可以在现有的直线会话中配置CREATE TABLE行为。将该值设置为true将导致CREATE TABLE语句默认创建外部表。

当会话结束时,默认的CREATE TABLE行为也会结束。

4)在站点级别设置默认表类型

通过在Hive配置下的Cloudera Manager中配置Hive . CREATE .as.insert.only和Hive . CREATE .as.acid属性,可以在站点级配置CREATE TABLE行为。在站点级别配置时,该行为在会话之间持续存在。有关更多信息,请参见配置CREATE TABLE行为。

如果您是Spark用户,那么切换到遗留行为是不必要的。例如,在SparkSQL中调用“create table”,会在升级到Cloudera数据平台后创建一个外部表,就像升级之前一样。您可以使用Hive Warehouse Connector (HWC)连接Hive,从Spark读取Hive ACID表。要从Spark向Hive写入ACID表,可以使用HWC和HWC API。当你不使用HWC API时,Spark会创建一个带有purge属性的外部表。更多信息请参见Hive Warehouse Connector访问Spark数据

官方文档:https://docs.cloudera.com/cdp-private-cloud-base/latest/using-hiveql/topics/cdp-data-migration-table-create.html

未完待续…



参考文章:https://developer.aliyun.com/article/786518


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2281100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络介质访问控制全攻略:从信道划分到协议详解!!!

一、信道划分介质访问控制 介质访问控制:多个节点共享同一个“总线型”广播信道时,可能发生“信号冲突” 应该怎么控制各节点对传输介质的访问,才能减少冲突,甚至避免冲突? 时分复用(TDM) 时分复用:将时间分为等长的“…

IJCAI-2024 | 具身导航的花样Prompts!VLN-MP:利用多模态Prompts增强视觉语言导航能力

作者: Haodong Hong1,2 , Sen Wang1∗ , Zi Huang1 , Qi Wu3 and Jiajun Liu2,1 单位:昆士兰大学,澳大利亚科学与工业研究组织,阿德莱德大学 论文标题:Why Only Text: Empowering Vision-and-Language Navigation wi…

C语言程序设计十大排序—冒泡排序

文章目录 1.概念✅2.冒泡排序🎈3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一,每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法,排序后的数据更易于处理和查找。在计算机发展…

docker 安装 redis 详解

在平常的开发工作中,我们经常会用到 redis,那么 docker 下应该如何安装 redis 呢?简单来说:第一步:拉取redis镜像;第二步:设置 redis.conf 配置文件;第三步:编写 docker-…

人工智能之深度学习_[4]-神经网络入门

文章目录 神经网络基础1 神经网络1.1 神经网络概念1.1.1 什么是神经网络1.1.2 如何构建神经网络1.1.3 神经网络内部状态值和激活值 1.2 激活函数1.2.1 网络非线性因素理解1.2.2 常见激活函数1.2.2.1 Sigmoid 激活函数1.2.2.2 Tanh 激活函数1.2.2.3 ReLU 激活函数1.2.2.4 SoftMa…

FPGA中场战事

2023年10月3日,英特尔宣布由桑德拉里维拉(Sandra Rivera)担任“分拆”后独立运营的可编程事业部首席执行官。 从数据中心和人工智能(DCAI)部门总经理,转身为执掌该业务的CEO,对她取得像AMD掌门人苏姿丰博士类似的成功,无疑抱以厚望。 十年前,英特尔花费167亿美元真金白银…

李沐vscode配置+github管理+FFmpeg视频搬运+百度API添加翻译字幕

终端输入nvidia-smi查看cuda版本 我的是12.5,在网上没有找到12.5的torch,就安装12.1的。torch,torchvision,torchaudio版本以及python版本要对应 参考:https://blog.csdn.net/FengHanI/article/details/135116114 创…

Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普

引言: 今天我们聊聊Android生态中最“硬核”的话题:通用内核镜像(GKI)与内核模块接口(KMI)。这是内核碎片化终结者的秘密武器,解决了内核和供应商模块之间无尽的兼容性问题。为什么重要&#x…

K8S如何让worker使用kubectl命令(RBAC方法)

背景 目前集群规划如下 kubeadm安装集群master节点默认能使用kubectl命令,worker则不能使用。这是因为worker节点没授权。当然,你可以通过以下方式授权 mkdir .kube scp master1:/root/.kube/config .kube/但这样无疑给了worker节点非常大的权限&#…

【Excel】【VBA】Reaction超限点筛选与散点图可视化

【Excel】【VBA】Reaction超限点筛选与散点图可视化 功能概述 这段代码实现了以下功能: 从SAFE输出的结果worksheet通过datalink获取更新数据从指定工作表中读取数据检测超过阈值的数据点生成结果表格并添加格式化创建可视化散点图显示执行时间 流程图 #mermaid-…

[Computer Vision]实验三:图像拼接

目录 一、实验内容 二、实验过程及结果 2.1 单应性变换 2.2 RANSAC算法 三、实验小结 一、实验内容 理解单应性变换中各种变换的原理(自由度),并实现图像平移、旋转、仿射变换等操作,输出对应的单应性矩阵。利用RANSAC算法优…

微信小程序使用picker根据接口给的省市区的数据实现省市区三级联动或者省市区街道等多级联动

接口数据如上图 省市区多级联动&#xff0c;都是使用的一个接口通过传参父类的code。返回我们想要的数据 比如获取省就直接不要参数。市就把省得code传给接口&#xff0c;区就把市的code作为参数。 <picker mode"multiSelector" :range"mulSelect1" …

自动化01

测试用例的万能公式&#xff1a;功能测试界面测试性能测试易用性测试安全性测试兼容性测试 自动化的主要目的就是用来进行回归测试 新产品--第一个版本 (具备丰富的功能)&#xff0c;将产品的整体进行测试&#xff0c;人工创造一个自动化测试用例&#xff0c;在n个版本的时候…

JS宏进阶:正则表达式的使用

正则表达式&#xff0c;对于任何一门编程语言来说&#xff0c;都是一种非常强大的工具&#xff0c;主要用于搜索、编辑或操作文本和数据。因此&#xff0c;在JS中&#xff0c;也存在相应的对象new RegExp( )&#xff0c;在本章中&#xff0c;将详细介绍正则表达式在JS宏中的运用…

深度学习笔记——循环神经网络RNN

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络RNN知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型&#xff08;Bag of Words, BOW&#xff09;工作原…

Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合

读书笔记&#xff1a;卓越强迫症强大恐惧症&#xff0c;在亲子家庭、职场关系里尤其是纵向关系模型里&#xff0c;这两种状态很容易无缝衔接。尤其父母对子女、领导对下属&#xff0c;都有望子成龙、强将无弱兵的期望&#xff0c;然而在你的面前&#xff0c;他们才是永远强大的…

SpringBoot读取yml配置文件一组对象数据初始化

1. yml的短横杠语法2. yml数组元素读取并初始化3. 测试结果 1. yml的短横杠语法 - 短横杠加空格&#xff0c;可以表示数组元素&#xff0c;如下配置 表示有名为apps的一组数据&#xff0c;数组的元素对象包含有corpId、corpSecret、appCode三个字段像server.port没有 - 表示的…

基于JAVA的校园二手商品交易平台的设计与开发

摘 要&#xff1a;政府政策引导与社会观念的转变使得国内大学生的创业意识逐渐提高&#xff0c;很多高校大学生开始自主创业。目前我国各大高校暂且还没有较为成型的针对校内学生创业者的校园网络服务平台。本文首先主要是介绍了关于java语言以及web开发的相关技术&#xff0c;…

深度学习核函数

一、核函数的基本概念 核函数在机器学习中具有重要应用价值&#xff0c;常用于支持向量机&#xff08;SVM&#xff09;等算法中。 核函数是面试中经常被考到的知识点&#xff0c;对于找工作和实际数据转换都有重要作用。 二、数据建模与核函数的作用 数据越多&#xff0c;可…

数据结构(三) 排序/并查集/图

目录 1. 排序 2.并查集 3.图 1.排序: 1.1 概念: 排序就是将数据按照某种规则进行排列, 具有某种顺序. 分为内排序和外排序. 内排序就是: 将数据放在内存中的排序; 外排序是: 数据太多无法在内存中排序的. 1.2 插入排序: 插入排序包含: 直接插入排序和希尔排序. (1) 直接插入…