一、文件存储格式

Hive的文件存储格式包括:textfile、sequence、rcfile、orc、parquet

textfile

(简介)默认的文件格式,基于行存储。建表时不指定存储格式即为textfile,导入数据时把数据文件拷贝到hdfs不进行处理。

(优点)便于和其他工具(pig,grep,sed,awk)共享数据,便于查看和编辑,加载较快。

(缺点)耗费存储空间,I/O性能较低;Hive不进行数据切分合并,不能进行并行操作,查询效率低。

(应用场景)适用于小型查询,查看具体数据内容的测试操作。

sequence

(简介)含有键值对的二进制文件,行存储。

(优点)可压缩、可分割,优化磁盘利用率和I/O;可并行操作数据,查询效率高。

(缺点)存储空间消耗最大;对于hadoop生态系统之外的工具不适用,需要通过text文件转化加载。

(应用场景)适用于数据量较小、大部分列的查询。

rcfile

(简介)行列式存储。先将数据按行分块,同一个record 在一个块上,避免读一条记录需要读多个 block;然后块数据列式存储。

(优点)可压缩,高效的列存取;查询效率较高。

(缺点)加载时性能消耗较大,需要通过 text 文件转化加载;读取全量数据性能低。

orc

(简介)优化后的 rcfile,行列式存储。

(优缺点)优缺点与rcfile类似,查询效率较高。

(应用场景)适用于hive中大型的存储、查询。

在2021到2023这三年的工作中,遇到最多的表的存储格式,但一般都是开启事务,即torc表。

parquet

(简介)列存储

(优点)更高效的压缩和编码;不与任何数据处理技术绑定,可用于多种数据处理框架(hive、Impala,Presto查询引擎;MR,Spark计算框架;Avro,Thrift,PB数据模型)。

(缺点)不支持 update,insert,delete,ACID

(应用场景)适用于字段数非常多,无更新,只取部分列的查询。

二、表的存储方式(管理方式)

外部表

默认创建的表即为外部表(建表语句如下)

create table table_name(
id int,
name string
)
-- 负载均衡
clustered by (id)
-- 桶
into 2 buckets
-- 记录行的分隔符
row format delimited
-- 记录列的分隔符
fields terminated by ','
-- 存储文件的格式:textfile是默认的,写与不写都是一样的
stored as orc -- textfile 不支持事务,而orc支持事务
-- 表的属性
tblproperties("transactional"="true", -- 是否开启事务
"compactor.mapreduce.map.memory.mb"="2048",
"compactorthreshold.hive.compactor.delta.num.threshold"="4",
"compactorthreshold.hive.compactor.delta.pct.threshold"="0.5"
)

内部表

与外部表的区别是,hive仅管理外部表的元数据,而不管理其在HDFS上的数据。(建表语句如下)

create external table table_name(
id int,
name string
)
-- 负载均衡
clustered by (id)
-- 桶
into 2 buckets
-- 记录行的分隔符
row format delimited
-- 记录列的分隔符
fields terminated by ','
-- 存储文件的格式:textfile是默认的,写与不写都是一样的
stored as orc -- textfile 不支持事务,而orc支持事务
-- 表的属性
tblproperties("transactional"="true", -- 是否开启事务
"compactor.mapreduce.map.memory.mb"="2048",
"compactorthreshold.hive.compactor.delta.num.threshold"="4",
"compactorthreshold.hive.compactor.delta.pct.threshold"="0.5"
)

很明显,从建表语句上看,创建内部表需要在create后面添加external关键字,两者的区别可以看下面的表格

drop table时 内部表(Managed Table) 外部表(External Table)
MySQL(元数据库)中的表结构和数据 会被删除 会被删除
HDFS中的记录(真实数据) 会被删除 仍然存在

三、建表的几种方式

create table as

  • 这个命令主要用于根据查询结果创建新表,并复制原数据,也就是说,它会将查询结果作为新表的数据内容。
  • create table as语句在创建新表的同时,也会填充数据。它实际上执行了查询操作,并将查询结构存储到新表中。
  • 这种方式主要适用于需要快速复制数据并创建一个新表的情况。

create table like

  • 这个命令用于创建一个与现有表结构相同的新表,但不会复制数据。新表会继承源表的表结构,包括索引和主键等。
  • 要复制源表和数据到新表,需要使用insert into语句单独执行。
  • create table like主要用于需要保留表结构但不需要复制数据的场景,比如备份表结构或者创建一个空的表结构用于后续的数据插入。

  总结来说,create table as和create table like的主要区别在于:

    • 前者(create table as)不仅创建新表,还复制原数据(列结构和数据和源表一致,但不包括源表其他属性:分区、存储格式等)
    • 后者(create table like)仅创建与源表结构相同的新表,不复制数据。
    • 根据具体的需求和场景,可以选择适合的创建表的方式。

  如果希望新表在各个方面(包括结构、数据、分区、存储格式等)都和源表一模一样,那么你需要首先使用create table like来创建结构相同的表,然后使用insert into语句来复制数据。同时,你可能还需要手动设置新表的分区和存储格式等属性,以确保它们与源表一致。

— 要养成终生学习的习惯 —

Hive - 表相关的更多相关文章

  1. sqoop导入数据到hive表中的相关操作

    1.使用sqoop创建表并且指定对应的hive表中的字段的数据类型,同时指定该表的分区字段名称 sqoop create-hive-table --connect "jdbc:oracle: ...

  2. hive表分区相关操作

    Hive 表分区 Hive表的分区就是一个目录,分区字段不和表的字段重复 创建分区表: create table tb_partition(id string, name string) PARTIT ...

  3. spark相关介绍-提取hive表(一)

    本文环境说明 centos服务器 jupyter的scala核spylon-kernel spark-2.4.0 scala-2.11.12 hadoop-2.6.0 本文主要内容 spark读取hi ...

  4. hive 桶相关特性分析

    1. hive 桶相关概念     桶(bucket)是指将表或分区中指定列的值为key进行hash,hash到指定的桶中,这样可以支持高效采样工作.     抽样( sampling )可以在全体数 ...

  5. 导hive表项目总结(未完待续)

    shell里面对日期的操作 #!/bin/bash THIS_FROM=$(date +%Y%m%d -d "-7 day") THIS_TO=$(date +%Y-%m-%d - ...

  6. 使用spark对hive表中的多列数据判重

    本文处理的场景如下,hive表中的数据,对其中的多列进行判重deduplicate. 1.先解决依赖,spark相关的所有包,pom.xml spark-hive是我们进行hive表spark处理的关 ...

  7. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)

    数据做压缩和解压缩会增加CPU的开销,但可以最大程度的减少文件所需的磁盘空间和网络I/O的开销,所以最好对那些I/O密集型的作业使用数据压缩,cpu密集型,使用压缩反而会降低性能. 而hive中间结果 ...

  8. Spark访问Hive表

    知识点1:Spark访问HIVE上面的数据 配置注意点:. 1.拷贝mysql-connector-java-5.1.38-bin.jar等相关的jar包到你${spark_home}/lib中(sp ...

  9. Hive 表类型简述

    Hive 表类型简述   表类型一.管理表或内部表Table Type:  MANAGED_TABLE example: create table  Inner(id int,name string, ...

  10. hive表增量抽取到oracle数据库的通用程序(一)

    hive表增量抽取到oracle数据库的通用程序(二) sqoop在export的时候 只能通过--export-dir参数来指定hdfs的路径.而目前的需求是需要将hive中某个表中的多个分区记录一 ...

随机推荐

  1. vscode代码注释插件koroFileHeader配置(自用)

    前言 一直以来写注释都是让人头疼的问题,力求保持注释风格统一也很麻烦,偶然间发现的这款vscode中的注释插件koroFileHeader,配置好后可以大大提高写注释的效率与积极性♪(∇*) 安装插件 ...

  2. 【Amadeus原创】docker安装TOMCAT,并运行本地代码

    1,docker 下载tomcat [root@it-1c2d ~]# docker pull tomcat ... [root@it-1c2d ~]# docker images REPOSITOR ...

  3. django生命周期流程图与django路由层

    目录 一.django请求生命周期流程图 二.django路由层 1.路由匹配 2.转换器 3.正则匹配 不同版本的区别 正则匹配斜杠导致的区别 4.正则匹配的无名有名分组 分组匹配 无名分组 有名分 ...

  4. 【uni-app】【01】底部导航栏与页面切换

    1.(配置文件在哪)uni-app 路由控制是在 pages.json文件中的. 2.(基本配置项有哪些)初学的时候主要有三个配置项,①pages ② globalStyle ③ tabbar [!T ...

  5. 设置VirtualBox共享文件夹的方法

    1.创建共享文件夹进入linux终端,通过如下指令创建共享文件夹.在此处的/mnt/share是Linux下的共享文件夹. sudo mkdir /mnt/share2.在VirtualBox的设置中 ...

  6. docker使用镜像报错:standard_init_linux.go:211: exec user process caused “exec format error“

    在服务器使用镜像运行代码时出现了该报错.使用了docker run 后,由于是刚接触docker,不知道是什么原因.经网上查阅资料后,了解到原来有可能是我的镜像架构和机器架构不一致. 使用 docke ...

  7. Qt/C++原创推流工具/支持多种流媒体服务/ZLMediaKit/srs/mediamtx等

    一.前言 1.1 功能特点 支持各种本地视频文件和网络视频文件. 支持各种网络视频流,网络摄像头,协议包括rtsp.rtmp.http. 支持将本地摄像头设备推流,可指定分辨率和帧率等. 支持将本地桌 ...

  8. WPF刮刮乐

    WPF刮刮乐 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/wi ...

  9. wpf ScrollViewer 滚动动画

    wpf ScrollViewer 滚动动画: <Window x:Class="WpfTest.FloatTextWindow" xmlns="http://sch ...

  10. Word文档转换成Html格式

    CentOS 下安装 OpenOffice4.0 一.更新服务器 yum源 [root@APP2 /]# yum clean all [root@APP2 /]# yum makecache [roo ...