博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive 的分桶表是什么?有什么作用?
阅读量:4073 次
发布时间:2019-05-25

本文共 1290 字,大约阅读时间需要 4 分钟。

前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见

正文

  • 分桶是相对分区进行更细粒度的划分。

  • 分桶将整个数据内容安装某列属性值取 hash 值进行区分,具有相同 hash 值的数据进入到同一个文件中。

举例说明

  • 比如按照 name 属性分为3个桶,就是对 name 属性值的 hash 值对 3 取摸,按照取模结果对数据分桶。

  • 取模结果为 0 的数据记录存放到一个文件

  • 取模结果为 1 的数据记录存放到一个文件

  • 取模结果为 2 的数据记录存放到一个文件

  • 取模结果为 3 的数据记录存放到一个文件

作用

  1. 取样 sampling 更高效。没有分区的话需要扫描整个数据集。
  2. 提升某些查询操作效率,例如 map side join

实践

1、创建分桶表

# 在创建分桶表之前要执行命令> set hive.enforce.bucketing=true;   //开启对分桶表的支持> set mapreduce.job.reduces=4;       //设置与桶相同的reduce个数(默认只有一个reduce)
--分桶表create table user_buckets_demo(id int, name string)clustered by(id) into 4 buckets row format delimited fields terminated by '\t';--普通表create table user_demo(id int, name string)row format delimited fields terminated by '\t';

2、准备数据文件 buckets.txt

1	laowang12	laowang23	laowang34	laowang45	laowang56	laowang67	laowang78	laowang89	laowang910	laowang10

3、加载数据到普通表 user_demo 中

load data local inpath '/opt/bigdata/data/buckets.txt' into table user_demo;

4、加载数据到桶表user_buckets_demo中

insert into table user_buckets_demo select * from user_demo;

5、hdfs上查看表的数据目录

在这里插入图片描述

6、抽样查询桶表的数据

  • tablesample 抽样语句,语法:

tablesample(bucket x out of y)

- x表示从第几个桶开始取数据
- y表示桶数的倍数,一共需要从 桶数/y 个桶中取数据

select * from user_buckets_demo tablesample(bucket 1 out of 2)-- 需要的总桶数=4/2=2个-- 先从第1个桶中取出数据-- 再从第1+2=3个桶中取出数据

转载地址:http://vzgji.baihongyu.com/

你可能感兴趣的文章
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
【leetcode】Pascal's Triangle II (python)
查看>>
java自定义容器排序的两种方法
查看>>
如何成为编程高手
查看>>
本科生的编程水平到底有多高
查看>>
备忘:java中的递归
查看>>
Solr及Spring-Data-Solr入门学习
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>