Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)

2023-10-31

1、Hive的数据存储

Hive的数据存储基于Hadoop HDFS

Hive没有专门的数据存储格式

存储结构主要包括:数据库、文件、表、试图

Hive默认可以直接加载文本文件(TextFile),还支持sequence file

创建表时,指定Hive数据的列分隔符与行分隔符,Hive即可解析数据。

2、Hive的数据模型-数据库

类似传统数据库的DataBase

3、Hive的数据模型-表
  • Table 内部表

与数据库中的 Table 在概念上是类似, 每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 test,它在 HDFS 中的路径为:$HIVE_HOME/warehouse/test。warehouse是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir}  指定的数据仓库的目录; 所有的 Table 数据(不包括 External Table)都保存在这个目录中。

内部表,删除表时,元数据与数据都会被删除

创建数据文件inner_table.dat , 具体操作如下:

创建表

hive>create table inner_table (key string);

加载数据

hive>load data local inpath '/usr/local/inner_table.dat' into table inner_table;

查看数据

select * from inner_table

删除表

drop table inner_table


  • External Table 外部表
  1. 指向已经在HDFS 中存在的数据,可以创建Partition
  2. 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异
  3. 内部表 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除
  4. 外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除该链接

创建数据文件external_table.dat , 具体实例如下:

创建表

hive>create external table external_table1 (key string)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

location '/home/external';

在HDFS创建目录/home/external:

#hadoop fs -put /home/external_table.dat /home/external

加载数据

LOAD DATA INPATH '/home/external_table1.dat' INTO TABLE external_table1;

查看数据

select * from external_table

删除表

drop table external_table

 

4、内部表与外部表的区别:

外部表只删除表信息(元数据信息),不删除数据;内部表会删除表信息和数据信息

  • Partition  分区表

分区表相关命令:

SHOW TABLES; # 查看所有的表

SHOW TABLES '*TMP*'; #支持模糊查询

SHOW PARTITIONS TMP_TABLE; #查看表有哪些分区

DESCRIBE TMP_TABLE; #查看表结构

Partition 对应于数据库的 Partition 列的密集索引

在 Hive 中,表中的一个Partition 对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中, 例如:test表中包含 date 和 city 两个 Partition,则对应于date=20130201, city = bj 的 HDFS 子目录为:

文章来源地址:https://www.yii666.com/article/670963.html

/warehouse/test/date=20130201/city=bj

对应于date=20130202, city=sh 的HDFS 子目录为: /warehouse/test/date=20130202/city=sh

具体操作:

CREATE TABLE tmp_table #表名 (

title   string, # 字段名称 字段类型

minimum_bid     double,

quantity     bigint,

have_invoice    bigint

) COMMENT '注释:XXX'       #表注释

PARTITIONED BY(pt STRING) #分区表字段(如果文件非常之大,采用分区表可以快过滤出按分区字段划分的数据)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\001'   # 字段是用什么分割开的

STORED AS SEQUENCEFILE;   #用哪种方式存储数据,SEQUENCEFILE是hadoop自带的文件压缩格式

创建数据文件partition_table.dat

创建表

create table partition_table(rectime string,msisdn string)

partitioned by(daytime string,city string)

row format delimited

fields terminated by '\t' stored as TEXTFILE;

加载数据到分区

load data local inpath '/home/partition_table.dat' into table partition_table partition (daytime='2013-02-01',city='bj');

查看数据

select * from partition_table

删除表

drop table partition_table

alter table partition_table add partition (daytime='2013-02-04',city='bj');

通过load data 加载数据

alter table partition_table drop partition (daytime='2013-02-04',city='bj')

元数据,数据文件删除,但目录daytime=2013-02-04还在

  • Bucket  Table 桶表

桶表是对数据进行哈希取值,然后放到不同文件中存储。

创建表

create table bucket_table(id string) clustered by(id) into 4 buckets;

加载数据

set hive.enforce.bucketing = true;

insert into table bucket_table select name from stu;

insert overwrite table bucket_table select name from stu;

数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。

抽样查询

select * from bucket_table tablesample(bucket 1 out of 4 on id);

5、视图
  • 视图的创建

create view v1 AS select * from t1;

6、基于表的操作
  • 表的操作

表的修改

Alter table target_tab add columns(cols,string);

表的删除

Drop table;

  • 导入数据

当数据被加载至表中时,不会对数据进行任何转换。Load 操作只是将数据复制/移动至 Hive 表对应的位置。

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]
    INTO TABLE tablename
    [PARTITION (partcol1=val1, partcol2=val2 ...)]

把一个Hive表导入到另一个已建Hive表

INSERT OVERWRITE TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement FROM from_statement

CTAS

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name

(col_name data_type, ...) …

AS SELECT …

例:create table new_external_test as  select * from external_table1;

  • 表的查询

SELECT [ALL | DISTINCT] select_expr, select_expr, ...

FROM table_reference文章来源地址https://www.yii666.com/article/670963.html

[WHERE where_condition]

[GROUP BY col_list]

[ CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list] | [ORDER BY col_list] ]

[LIMIT number]

基于Partition的查询

一般 SELECT 查询是全表扫描。但如果是分区表,查询就可以利用分区剪枝(input pruning)的特性,类似“分区索引“”,只扫描一个表中它关心的那一部分。Hive 当前的实现是,只有分区断言(Partitioned by)出现在离 FROM 子句最近的那个WHERE 子句中,才会启用分区剪枝。例如,如果 page_views 表(按天分区)使用 date 列分区,以下语句只会读取分区为‘2013-03-01’的数据。

SELECT page_views.*    FROM page_views    WHERE page_views.date >= '2013-03-01' AND page_views.date <= '2013-03-01'

LIMIT Clause

Limit 可以限制查询的记录数。查询的结果是随机选择的。下面的查询语句从 t1 表中随机查询5条记录:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶) 的相关文章

  • Hive - 线程安全的自动递增序列号生成

    我遇到一种情况 需要将记录插入到特定的 Hive 表中 其中一列需要是自动递增的序列号 即在任何时间点都必须严格遵循 max value 1 规则 记录从许多并行的 Hive 作业插入到这个特定的表中 这些作业每天 每周 每月批量运行 现在
  • 伪分布式模式下的 Hadoop。连接被拒绝

    P S 请不要将此标记为重复 Hi 我一直在尝试以伪分布式模式设置和运行 Hadoop 当我运行 start all sh 脚本时 我得到以下输出 starting namenode logging to home raveesh Hado
  • 为 Presto 和 AWS S3 设置独立 Hive Metastore 服务

    我工作的环境中使用 S3 服务作为数据湖 但没有 AWS Athena 我正在尝试设置 Presto 以便能够查询 S3 中的数据 并且我知道我需要通过 Hive Metastore 服务将数据结构定义为 Hive 表 我正在 Docker
  • 使用 Hiveql 循环

    我正在尝试合并 2 个数据集 例如 A 和 B 数据集 A 有一个变量 Flag 它有 2 个值 我并没有只是将两个数据合并在一起 而是尝试根据 标志 变量合并两个数据集 合并代码如下 create table new data as se
  • 计算 pyspark df 列中子字符串列表的出现次数

    我想计算子字符串列表的出现次数 并根据 pyspark df 中包含长字符串的列创建一个列 Input ID History 1 USA UK IND DEN MAL SWE AUS 2 USA UK PAK NOR 3 NOR NZE 4
  • 如何在蜂巢中的每个组中按计数 desc 进行排序?

    这是 HQL select A B count as cnt from test table group by A B order by cnt desc 示例输出如下 a1 b1 5 a2 b1 3 a1 b2 2 a2 b2 1 但我想
  • hive sql查找最新记录

    该表是 create table test id string name string age string modified string 像这样的数据 id name age modifed 1 a 10 2011 11 11 11 1
  • 适用于 Hadoop 的 DynamoDB 输入格式

    我必须使用 Hadoop mapreduce 处理保留在 Amazon Dynamodb 中的一些数据 我在互联网上搜索 Dynamo DB 的 Hadoop InputFormat 但找不到它 我对 Dynamo DB 不熟悉 所以我猜测
  • 我可以在没有 Hadoop 的情况下使用 Spark 作为开发环境吗?

    我对大数据和相关领域的概念非常陌生 如果我犯了一些错误或拼写错误 我很抱歉 我想了解阿帕奇火花 http spark apache org 并使用它仅在我的电脑中 在开发 测试环境中 由于Hadoop包含HDFS Hadoop分布式文件系统
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • 更改 Spark Streaming 中的输出文件名

    我正在运行一个 Spark 作业 就逻辑而言 它的性能非常好 但是 当我使用 saveAsTextFile 将文件保存在 s3 存储桶中时 输出文件的名称格式为 part 00000 part 00001 等 有没有办法更改输出文件名 谢谢
  • Spark 和 Python 使用自定义文件格式/生成器作为 RDD 的输入

    我想问一下 Spark 中输入的可能性 我可以看到从http spark apache org docs latest programming guide html http spark apache org docs latest pro
  • <问题> Hive 中的浮点数据类型

    初始化数据 CREATE TABLE test test data user VARCHAR 10 amount FLOAT TBLPROPERTIES transactional true INSERT INTO test test da
  • 使用 impala 按范围连接表的有效方法

    我第一个有下表 Range 包括值范围和附加列 row From To Country 1 1200 1500 2 2200 2700 3 1700 1900 4 2100 2150 The From and Toare bigint并且是
  • 使用字符串数组在 Hive 表上加载 CSV 文件

    我正在尝试将 CSV 文件插入 Hive 其中一个字段是 string 数组 这是 CSV 文件 48 Snacks that Power Up Weight Loss Aidan B Prince Health Fitness Trave
  • 如何按行扩展数组值!!使用 Hive SQL

    我有一个有 4 列的表 其中一列 项目 类型是 ARRAY 其他是字符串 ID items name loc id1 item1 item2 item3 item4 item5 Mike CT id2 item3 item7 item4 i
  • Sqoop 导出分区的 Hive 表

    我在尝试导出分区的 Hive 表时遇到了一些问题 这是否完全受支持 我尝试用谷歌搜索并找到一张 JIRA 票证 sqoop export connect jdbc mysql localhost testdb table sales exp
  • Hive:在查询中将 array 转换为 array

    我有两张桌子 create table a 1 array
  • 更改 Hadoop 中的数据节点数量

    如何改变数据节点的数量 即禁用和启用某些数据节点来测试可扩展性 说得更清楚一点 我有4个数据节点 我想一一实验1 2 3 4个数据节点的性能 是否可以只更新名称节点中的从属文件 临时停用节点的正确方法 创建一个 排除文件 这列出了您想要删除
  • 公平调度器和容量调度器有什么区别?

    我是 Hadoop 世界的新手 想了解公平调度程序和容量调度程序之间的区别 另外我们什么时候应该使用每一个 请简单地回答一下 因为我在网上读了很多东西 但从中得到的不多 公平调度是一种为作业分配资源的方法 使得所有作业随着时间的推移平均获得

随机推荐

  • 在Eclipse中进行Junit测试的个人总结

    1 怎样在Eclipse中集成使用Junit 想要在Eclipse这个IDE中集成使用Junit 首先需要下载Junit的包 具体下载方式可以自行查阅或翻看我之前有关Junit的博客的前半部分 下载完成后 进入Eclipse 打开工程 左键
  • 转帖:如何注册Filter

    参考文章 http apps hi baidu com share detail 16291532 AX文件的一个对外接口DllRegisterServer 由外部调用 比如注册AX的时候 regsvr32 xxx ax 通常情况下 我们的
  • Web3和 NFT将如何影响电子商务?

    每日更新 欢迎交流 感兴趣可以点个关注 你有没有发现 万维网上有很多改变 并且改变速度还很快 也许你已经读到过青少年将数字资产卖到数百万美元 匿名的加密货币创始人颠覆了传统的金钱概念 那么 这些新的 令人兴奋的 而且通常是奇怪的东西到底是关
  • F#的尾递归编译优化需要再好好优化优化

    先来看一道简单的算法题 给定一个整数序列 给定一个目标值 求出该序列中任意三个数之和中最接近目标值的那个数 这道题很容易想到的算法 对序列做从小到大排序 固定其中一个数的下标a 对剩下的两个数双指针b c 指向a右侧区域 窗口 的两端 根据
  • 连Hibernate技术都不清楚,你敢说你自己会ORM框架?

    前言 ORM框架不是一个新话题 它已经伴随我们很多年了 它提供了概念性的 易于理解的数据模型 将数据库中的表和内存中的对象建立了很好的映射关系 在Java中常用的ORM框架主要有两个 Hibernate和iBatis 本篇文章主要介绍Hib
  • SpringBoot 2.6.3 web(静态资源、欢迎页、favicon.ico)

    一 静态资源 静态资源访问路径 static or public or resources or META INF resources 访问方式 项目根路径 静态资源文件名 静态映射 请求进来先在controller中判断能 不能处理 不能
  • SOAP教程[转]

    SOAP教程 需要帮助 SOAP是一个简单的基于XML的协议 它让应用程序跨HTTP进行信息交换 在我们的SOAP教程 你将了解什么是SOAP 以及它是怎样利用XML来让程序间的信息进行交换的 内容目录 SOAP 介绍This chapte
  • qt富文本编辑基本知识(QTextBlockFormat、QTextListFormat)

    可以参考该文章 QTextBlockFormat QTextListFormat 程序员大本营 核心知识如下 如果想开发一个富文本编辑器 html markdown等常见格式 Qt已经为用户完成了几乎所有与编辑有关的具体工作 我们所要做的就
  • yarn中的container概念

    http dongxicheng org mapreduce nextgen understand yarn container concept 步骤1 用户将应用程序提交到ResourceManager上 步骤2 ResourceMana
  • Go语言面试题--基础语法(6)

    文章目录 1 关于init函数 下面说法正确的是 2 下面这段代码输出什么以及原因 3 下面这段代码能否编译通过 如果可以 输出什么 1 关于init函数 下面说法正确的是 A 一个包中 可以包含多个 init 函数 B 程序编译时 先执行
  • centOS7下Spark安装配置

    环境说明 操作系统 centos7 64位 3台 centos7 1 192 168 190 130 master centos7 2 192 168 190 129 slave1 centos7 3 192 168 190 131 sla
  • STM32端口功能详情图

    硬件接口对照表 注释标识 对应芯片IO 上下拉 功能 接口封装 电源归属 可外接IO 1 无 无 电源接口 DC 5 5 2 1 无 不可以 2 无 无 电源开关 无 3 无 无 电源接口 XT30 4 无 无 DC5V4A输出 USB母座
  • easycms v5.5 分析

    前言 这个awd打的悲 后台默认用户名密码为admin admin 但是几乎所有人都改了 而且一进去看到这个cms就有点懵逼 都不知道这个cms是干嘛的 没用过相似的cms 虽然网上找出了很多相关的漏洞 但是不知道为什么一个都没用上 或者说
  • Qt画圆弧

    Qt画圆弧
  • 第三步:脑波提取alpha,beta,delta,theta

    4 brain power py import os from process eeg import iir processing import pandas as pd import numpy as np def mkdir path
  • shell编程--函数

    函数 定义格式 1 function name command1 commandn 2 function function name command1 commandn 注意 所有函数需要在使用前被定义 一般将函数定义放在脚本开始地方 自定
  • 华为OD机试 - 最长的完全交替连续方波信号(Java)

    题目描述 输入一串方波信号 求取最长的完全连续交替方波信号 并将其输出 如果有相同长度的交替方波信号 输出任一即可 方波信号高位用1标识 低位用0标识 如图 说明 一个完整的信号一定以0开始然后以0结尾 即010是一个完整信号 但101 1
  • 选Redis做MQ的人,是脑子里缺根弦儿吗?

    V xin ruyuan0330 获得600 页原创精品文章汇总PDF 目录 一 前情提示 二 unack消息的积压问题 三 如何解决unack消息的积压问题 四 高并发场景下的内存溢出问题 五 低吞吐量问题 六 合理设置prefetch
  • 数据库查询出结果后将时间排序后取第一条

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 查询出结果后将时间排序后取第一条 select from a where time lt 2017 03 29 19 30 36 order by time desc li
  • Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)

    1 Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括 数据库 文件 表 试图 Hive默认可以直接加载文本文件 TextFile 还支持sequence file 创建表时