当前位置: 首页 > news >正文

hive:分桶表和分区表的区别, 分桶表,抽样查询

分桶表和分区表的区别

分桶表

建表语法

clustered by 聚类依据

示例

创建分桶表

加载数据到分桶表(错误)

load data local inpath '/home/sjh/ft.txt' into table sjh.ft;

报错: 提示设置 >>set hive.strict.checks.bucketing=false   作用是关闭 Hive 中的一个严格检查机制

默认情况下,Hive 会对分桶表的加载操作进行严格的检查,以确保数据正确地分布到各个桶中。这种严格的检查可以防止数据加载过程中的错误,但也可能导致一些不必要的限制,特别是在用户确定自己的操作是正确的情况下。
通过执行 set hive.strict.checks.bucketing=false 命令,用户可以关闭这种严格的检查。这意味着 Hive 将不再强制执行分桶相关的安全检查,用户可以直接将数据加载到分桶表中,而不需要通过中间表和 insert ... select 语句来进行。
注意: set 修改只作用于本次会话

如果想永久修改>>找到hive的安装目录,修改配置文件

查看加载情况

load的本质是把文件复制再上传>>没有经过map reduce>>数据没有进行拆分>>解决: 使用insert into , 写20个insert 非常不方便>> 创建一个表, 把数据放到表里, 再用insert into 

删除

示例

把数据加载到源表

-- 通过insert方法,执行mr

insert into sjh.ft select * from sjh.ftt;

执行日志: 先走map>>再到reduce

ftt 通过load加载数据,只有一个文件

ft通过 insert into 插入数据, 有4个文件, 和分桶个数对应

查看桶里面的数据>>分桶依据:  id/桶数  >>余数为0进0号桶; 余数为1进1号桶;余数为2进2号桶...

注意: 抽样查询时>>000000_0是1号桶, 000001_0是2号桶, 以此类推

分桶的好处

假设没有分桶, A表和B表连接>>A的每个id分别和B表的每个id 连接一次

交互次数= A表的id个数 * B表的id个数 = 10*10=100

如果把A表B表做成分桶表,按照id分成2个桶, 那么A表和B表分别产生了0号桶和1号桶, 现在A表和B表连接只需要交互50次,即0号桶和0号桶交互(25), 1号桶和1号桶交互

分桶的作用>>提高表连接效率

查看分桶文件

分区分桶表

  • sale_date 是分区列,数据将按照 sale_date 的值进行分区存储。

  • product_id 是分桶列,数据在每个分区内按照 product_id 进行分桶,分为4个桶。

 

抽样查询

从大数据集中随机抽取部分数据进行分析的技术。抽样查询可以帮助用户在不需要处理整个数据集的情况下,快速获取数据的代表性样本,从而进行初步分析、测试或验证。

1.基于分桶表的抽样查询

分桶表是将数据按照某个字段的哈希值分成若干个桶(Bucket),抽样时可以直接从指定的桶中抽取数据。

语法:

tablesample样表 ; bucket 桶
示例
从2号桶开始抽, 抽取桶的总数=桶的总数/y=4/4=1,即只抽1个桶

示例

 

从1号桶开始抽, 抽取4/2=2个桶的数量

第二个桶是 X+Y=1+2=3 ,3号桶

示例

从第8个桶开始抽, 即余数为3的那个桶>>4号桶

抽取的桶的数量=4/16=1/4, 一个桶的数据总量是5, 5*1/4约为1

2.基于数据块的抽样

直接从数据文件中随机抽取一定比例的数据块

 

3.基于行的抽样

随机抽取表中的一定数量的行

4.基于随机函数的抽样

5.基于分区的抽样

如果表是分区表,可以从指定的分区中抽取数据

示例

相关文章:

  • 国内智驾主要用的芯片以及对应厂商
  • Linux(ubuntu)下载ollama速度慢解决办法
  • 设计模式:状态模式
  • Visual Studio Code使用ai大模型编成
  • 【Godot4.3】自定义StyleBox
  • 在Vue3中使用Vuex
  • 前端里的this指向问题
  • JavaScript 内置对象-数组对象
  • python的装饰器
  • 降序排序算法
  • POI 和 EasyExcel
  • Altium Designer 23原理图编译Net XXX has no driving source警告
  • 【iOS】包大小和性能稳定性优化
  • B. Make It Increasing
  • 【phpstudy】关于实现两个不同版本的mysql并存。
  • SpringBoot速成(12)文章分类P15-P19
  • JAVA集合
  • python 视频处理库moviepy 设置字幕
  • 【LeetCode Hot100 矩阵】矩阵置零、螺旋矩阵、旋转图像、搜索二维矩阵II
  • 开源协议深度解析:理解MIT、GPL、Apache等常见许可证
  • 两国战机均未侵入对方领空,巴方公布对印回击细节
  • 川大全职引进考古学家宫本一夫,他曾任日本九州大学副校长
  • 央行宣布优化两项支持资本市场的货币政策工具
  • 巴方称印军发动24起袭击,巴境内6处地点遭袭致8人死亡
  • 德国联邦议院6日下午将举行总理选举第二轮投票
  • 五一上海楼市热闹开局:售楼处全员到岗,热门楼盘连续触发积分