Apache Hive3定位表并更改其位置

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


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习实战中阶】使用SARIMAX,ARIMA预测比特币价格,时间序列预测

数据集说明 比特币价格预测(轻量级CSV)关于数据集 致谢 这些数据来自CoinMarketCap,并且可以免费使用该数据。 https://coinmarketcap.com/ 数据集:链接: 价格预测器 源代码与数据集 算法说明 SARIMAX(Seasonal AutoRegressive …

DDD - 整洁架构_解决技术设计困局

文章目录 Pre如何落地 DDD底层技术的更迭 整洁架构的设计主动适配器/北向适配器被动适配器/南向适配器 整洁架构的落地总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对象的两种设计思路…

HQChart使用教程30-K线图如何对接第3方数据45- DRAWRADAR数据结构

HQChart使用教程30-K线图如何对接第3方数据45- DRAWRADAR数据结构 效果图DRAWRADARHQChart代码地址后台数据对接说明示例数据数据结构说明效果图 DRAWRADAR DRAWRADAR是hqchart插件独有的绘制雷达图函数,可以通过麦语法脚本来绘制一个简单的雷达图数据。 雷达图显示的位置固定…

HarmonyOS快速入门

HarmonyOS快速入门 1、基本概念 UI框架: HarmonyOS提供了一套UI开发框架,即方舟开发框架(ArkUI框架)。方舟开发框架可为开发者提供应用UI开发所必需的能力,比如多种组件、布局计算、动画能力、UI交互、绘制等。 方…

SD/MMC驱动开发

一、介绍 MMC的全称是”MultiMediaCard”――所以也通常被叫做”多媒体卡”,是一种小巧大容量的快闪存储卡,特别应用于移动电话和数字影像及其他移动终端中。MMC存贮卡只有7pin,可以支持MMC和SPI两种工作模式。 SD卡,数字安全记忆卡&#xf…

Windows的docker中安装gitlab

一.Windows的docker中安装gitlab 1.通过阿里云拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh 2.在本地创建备份数据的目录 mkdir -p D:home/software/gitlab/etc mkdir -p D:home/software/gitlab/logs mkdir -p D:home/software/gitlab/dat…

10倍数据交付提升 | 通过逻辑数据仓库和数据编织高效管理和利用大数据

数据已经成为企业核心竞争力的关键要素。随着大数据技术的发展,如何高效管理和利用海量的数据,已成为企业在数字化转型过程中面临的重要课题。传统的数据仓库已经不能满足当今企业对数据处理的高效性、灵活性和实时性的需求。在这种背景下,逻…

K8S中Service详解(一)

Service介绍 在Kubernetes中,Service资源解决了Pod IP地址不固定的问题,提供了一种更稳定和可靠的服务访问方式。以下是Service的一些关键特性和工作原理: Service的稳定性:由于Pod可能会因为故障、重启或扩容而获得新的IP地址&a…

java 根据前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端

前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端 场景:重点:maven依赖controllerservice 场景: 当前需求,前端通过html2canvas将页面报表生成图片下载,可以仍然不满意。 需要java后…

ent.SetDatabaseDefaults()

在 AutoCAD 的 .NET API 中,ent.SetDatabaseDefaults() 这句代码通常用于将一个实体(Entity)对象的属性设置为与其所在的数据库(Database)的默认设置相匹配。这意味着,该实体将采用数据库级别的默认颜色、图…

python学opencv|读取图像(三十九 )阈值处理Otsu方法

【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,还学习了一种自适应处理方法,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学o…

深圳大学-计算机系统(3)-实验三取指和指令译码设计

实验目标 设计完成一个连续取指令并进行指令译码的电路,从而掌握设计简单数据通路的基本方法。 实验内容 本实验分成三周(三次)完成:1)首先完成一个译码器(30分);2)接…

【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO

文章目录 前言🌍 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术🍁3.1关键特性🍁3.2配置选项🍁3.3使用示例 ❄️4. 连接池之Druid技术🍁 4.1主要特性🍁 4.2 配置选项…

Glary Utilities Pro 多语便携版系统优化工具 v6.21.0.25

Glary Utilities是一款功能强大的系统优化工具软件,旨在帮助用户清理计算机垃圾文件、修复系统错误、优化系统性能等。 软件功能 清理和修复:可以清理系统垃圾文件、无效注册表项、无效快捷方式等,修复系统错误和蓝屏问题。 优化和加速&…

QT调用OpenSceneGraph

OSG和osgQt编译教程,实测通过 一、下载OpenSceneGraph OpenSceneGraphhttps://github.com/openscenegraph/OpenSceneGraph 二、使用CMAKE编译OpenSceneGraph 1.打开cmake,配置源代码目录 2. CMAKE_INSTALL_PREFIX设置为install文件夹,生…

基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

【Postgres_Python】使用python脚本批量创建和导入多个PG数据库

之前批量创建和导入数据库分为2个python脚本进行,现整合优化代码合并为一个python脚本,可同步实现数据库的创建和数据导入。之前的文章链接: 【Postgres_Python】使用python脚本批量创建PG数据库 【Postgres_Python】使用python脚本将多个.S…

数据结构——实验八·学生管理系统

嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…

GitCode 助力 AutoTable:共创 MyBatis 生态的自动表格管理新篇章

项目仓库https://gitcode.com/dromara/auto-table 解放双手,专注业务:MyBatis 生态的“自动表格”创新 AutoTable 是一款致力于为 MyBatis 生态赋予“自动表格”功能的创新插件。其核心理念是通过 Java 实体类自动生成和维护数据库的表结构&#xff0c…

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

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