Hadoop:Hive操作(二):数据表操作,复杂数据类型,Sampling采样,虚拟列

2023-09-20 12:30:23

数据表操作 

上接:

Hadoop:YARN、MapReduce、Hive操作_独憩的博客-CSDN博客

分桶表

分桶表创建

分区的作用可以把数据分成n个文件夹单独存放,而分桶表则可以把一个表的数据放在一个文件夹下,但是分成n个文件存放

分区是将表拆分到不同的子文件夹中进行存储,而分桶是将表拆分到固定数量的不同文件中进行存储。

 分桶和分区可以一起使用:

 开启分桶的自动优化(自动匹配reduce task数量和桶数量一致)

set hive.enforce.bucketing=true;

创建分桶表 

create table course (c_id string,c_name string,t_id string) 
clustered by(c_id) into 3 buckets row format delimited fields terminated by '\t';

这个地方在创建表的时候需要使用clustered by确定分桶的依据,然后使用into n buckets确定分成n个桶

数据的划分是根据 分桶依据值进行hash取模来决定的

分桶表数据加载 

桶表的数据加载,由于桶表的数据加载通过load  data无法执行,只能通过insert  select,这是因为分桶的操作需要进行hash取模,也就是调用mapreduce,所有load data无法完成这个操作

1、创建一个临时表,向里面记载数据

create table temp_table(id int,name string) 
row format delimited fields terminated by '\t';

load data local inpath '/export/server/hive/date/test1.txt' into table temp_table ;

2、通过insert 向 分桶表传入数据

insert into fentong select * from temp_table cluster by (id)

修改表操作

修改表的属性

ALTER TABLE table_name SET TBLPROPERTIES table_properties;

如:ALTER TABLE table_name SET TBLPROPERTIES("EXTERNAL"="TRUE");  修改内外部表属性
如:ALTER TABLE table_name SET TBLPROPERTIES ('comment' = new_comment); 修改表注释

其余属性可参见:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-listTableProperties

添加分区

ALTER TABLE tablename  ADD PARTITION (month='201101');

 修改分区值

修改元数据记录,HDFS实体的文件夹不会改名字,只是在元数据记录中改名了

也就是说查看数据,分区值改变了,但是文件夹没有变化

ALTER TABLE tablename PARTITION (month='202005') 
RENAME TO PARTITION (month='201105');

删除分区

也是只是在元数据记录中删除了,查看数据也发现这部分数据不见了

但是从文件的角度看,实体文件还在

ALTER TABLE tablename DROP PARTITION (month='201105');

其他的可以参照

MySQL基础(三)增删改查、数据类型、约束_独憩的博客-CSDN博客

数据类型array数组

在hive中也可以设置array类型的数据

首先准备一分数据文件:

1       changsha,shanghai,beijin,hangzhou
2       guangzhou,shenzhen,xiamen

然后创建一个表,这个表里面有一列定义为array,使用collection items terminated by ','方法定义以 , 为分隔符,定义方法为: 

create table array_test (id int,locations array<string>)
row format delimited fields terminated by '\t'
collection items terminated by ','

然后把数据load就行了

这里数组的调用跟其他语音是一样的

select id,locations[0] from array_test

也可以在where中运用,比如要查询loactions里面有changsha的人,需要用到特点函数:

select id,locations
from array_test
where array_contains(locations,'changsha')

或者查询数组大小:

select id,size(locations) from array_test

数据类型map映射

准备数据:

1,zhangsan,father:xiaoming#mother:xiaohuang#brother:xiaoxu,28
2,lisi,father:mayun#mother:huangyi#brother:guanyu,22
3,wangwu,father:wangjianlin#mother:ruhua#sister:jingtian,29
4,mayun,father:mayongzhen#mother:angelababy,26

构建map列 

create table map_test(id int,name string,
member map<string,string>,
age int)
row format delimited fields terminated by ','
collection items terminated by '#'
map keys terminated by ':'

collection items terminated by '#'    每个键值对的分隔符
map keys terminated by ':'     键与值的分隔符

 

键值对的调用也是跟其他语言差不多的

select name,member['father']
from  map_test

调取全部的key和value

select map_keys(member),map_values(member)
from  map_test

数据类型struct结构体

 准备数据

1#周杰轮:11
2#林均杰:16
3#刘德滑:21
4#张学油:26
5#蔡依临:23

创建struct:

create table struct_test(
    id int,
    info struct<name:string,age:int>
)
row format delimited fields terminated by '#'
collection items terminated by ':'

可以使用info.name查询

select info.name from struct_test

Sampling采样

 可以快速从大量数据中随机抽样一些数据显示,进行随机抽样,本质上就是用TABLESAMPLE函数

1、基于随机分桶抽样

SELECT ... FROM tbl TABLESAMPLE(BUCKET x OUT OF y ON(colname | rand()))
y 表示将表数据随机划分成 y 份( y 个桶)
x 表示从 y 里面随机抽取 x 份数据作为取样
colname 表示随机的依据基于某个列的值
rand() 表示随机的依据基于整行

 2、基于数据块抽样

这个就是按照顺序取,不存在随机性

SELECT ... FROM tbl TABLESAMPLE(num ROWS | num PERCENT | num(K|M|G));
num ROWS 表示抽样 num 条数据
num PERCENT 表示抽样 num 百分百比例的数据
num(K|M|G) 表示抽取 num 大小的数据,单位可以是 K M G 表示 KB MB GB

 

 Virtual Columns虚拟列

虚拟列是Hive内置的可以在查询语句中使用的特殊标记,可以查询数据本身的详细参数。

Hive目前可用3个虚拟列:

INPUT__FILE__NAME,显示数据行所在的具体文件
BLOCK__OFFSET__INSIDE__FILE,显示数据行所在文件的偏移量
ROW__OFFSET__INSIDE__BLOCK,显示数据所在 HDFS 块的偏移量
虚拟列 需要设置: SET hive.exec.rowoffset=true 才可使用

更多推荐

服务器数据恢复-热备盘同步过程中硬盘离线的RAID5数据恢复案例

服务器数据恢复环境:华为OceanStor某型号存储,11块硬盘组建了一组RAID5阵列,另外1块硬盘作为热备盘使用。基于RAID5阵列的LUN分配给linux系统使用,存放Oracle数据库。服务器故障:RAID5阵列1块硬盘由于未知原因离线,热备盘激活开始同步数据,在热备盘同步的过程中又有1块硬盘离线,RAID5阵

一起学数据结构(7)——树及二叉树的基本概念及存储

前面的关于数据结构的文章中,介绍了顺序表,链表,栈,队列等数据结构。对于以上数据结构,均是一对一的关系。本篇文章将对于一对多的数据结构——树进行解析。目录1.树的定义及基本概念:1.1树的定义:1.2树的基本概念及术语:2.树的存储:3.二叉树的概念及结构:3.1二叉树的概念:3.2两种特殊的二叉树:3.2.1满二叉树

Learn Prompt-ChatGPT 精选案例:写作&博客

在ChatGPT的帮助下,文本内容的产出,尤其是撰写博客文章的过程得到了进一步的简化。你可以让ChatGPT激发你的灵感,也可以让它美化你的文章内容。这里我们希望能通过prompt写出一篇以“ChatGPT对社会各行各业的影响”为主题的博客。本页我们希望你可以使用ChatGPT网页版,利用ChatGPT写作的过程应该是

「聊设计模式」之模板方法模式(Template Method)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅!前言在软件开发中,设计模式是经典的解决方案,它们被广泛应用于面向对象的程序设计中。其中,模板方法模式(TemplateMethod)是一种常用的行为型设计模式,它定义一个操作中的算法骨架,而将一些步骤延迟

推进“数智+数治”,中期科技智慧公厕驱动城市公厕更新升级发展

随着城市化的快速发展和人口的不断增加,公共厕所这一基础设施的更新升级成为了亟待解决的问题。过去的传统公厕往往存在着环境脏乱差、无法保证使用者的舒适度等诸多问题。而智慧公厕则能够通过互联网和物联网的技术手段,实现智能化的运行管理,为市民提供更加便捷、舒适的使用体验。如中期科技「智慧公厕-智慧厕所」,拥有厕位智能监测与引导

【Python深度学习】深度学习框架Tensorflow、Pytorch介绍

深度学习已经成为了人工智能领域的一股重要力量,而深度学习框架则是在这个领域中进行研究和应用的必备工具。常见的深度学习框架包括TensorFlow、PyTorch、Keras、Theano和Caffe等,其中TensorFlow和PyTorch是最受欢迎的两个框架。本文将着重介绍这两个框架的优缺点以及应用领域。1.Ten

企业架构LNMP学习笔记40

框架配置实现读写分离:1)修改项目配置文件:return[//数据库类型'type'=>'mysql',//服务器地址//1、主从数据库的连接地址主在前从在后'hostname'=>'192.168.17.100,192.168.17.105',//2、主从数据库的名称、用户、密码一样的话,只配置一份即可。如果不一样,

算法通过村第七关-树(递归/二叉树遍历)白银笔记|递归实战

文章目录前言1.深入理解前中后序遍历从小到大递推分情况讨论,明确结束条件组合出完整的方法:从大到小画图推演总结前言提示:没有客观公正的记忆这回事,所有的记忆都是偏见,都是为自己的存活而重组过的经验。--国强生《断代》1.深入理解前中后序遍历深度优先遍历有前中后序三种情况,大部分人看过后就可以写出来,但是很多人只是记住了

在比特币上使用可检索性证明支付存储费用

我们为用户开发了一种为云存储付费的新方法。与亚马逊的S3等传统云存储相比,用户不必信任服务器。我们使用比特币智能合约来确保支付取决于服务器的可检索性证明(PoR),该证明只能在数据仍然可用且需要时可以检索的情况下生成。可检索性证明(PoR)许多人通过将他们的数据(如音乐、照片和文档)上传到远程服务器来外包存储,以确保可

mock技术在测试中的应用

技术简介mock技术又叫测试桩、挡板在软件测试中,对于一些不容易构造、获取的对象,用一个虚拟的对象来代替它,以达到相同的效果,这个虚拟的对象就是mock。mock技术并不是只有测试领域用,最早是在开发领域应用,典型例子:前后端联调。比如一个功能,前端功能写完了,但是后端还没做好,前端可以使用mock技术模拟后端发过来的

10:STM32------I2C通信

目录​​​​​​​一:I2C通信协议1:I2C简历2:硬件电路3:I2C时序基本单元A:开/终条件2:发送一个字节3:接收一个字节4:应答机制4:I2C时序1:指定地址写2:当前地址读3:指定地址读二:MPU60501:简历2:参数3:硬件电路4:框图5:寄存器地址三:案例A:软件I2C读写MPU60501:连接图2:

热文推荐