套话之分桶的定义

  分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储。对于 hive 中每一个表、分区都可以进一步进行分桶。

列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。(网上其它定义更详细,有点绕,结合后面实例

适用场景:数据抽样( sampling )、map-join

干货之分桶怎么分

1.开启支持分桶

set hive.enforce.bucketing=true;
默认:false;设置为 true 之后,mr 运行时会根据 bucket 的个数自动分配 reduce task 个数。
(用户也可以通过 mapred.reduce.tasks 自己设置 reduce 任务个数,但分桶时不推荐使用)
注意:一次作业产生的桶(文件数量)和 reduce task 个数一致。

2.往分桶表中加载数据
insert into table bucket_table select columns from tbl;
insert overwrite table bucket_table select columns from tbl;

3.桶表 抽样

select * from bucket_table tablesample(bucket 1 out of 4 on columns);
TABLESAMPLE 语法:
TABLESAMPLE(BUCKET x OUT OF y)
x:表示从哪个 bucket 开始抽取数据
y:必须为该表总 bucket 数的倍数或因子

4.分桶实例(详解)

具体如下:

1.启动hive(远程一体化模式):①service iptables stop // ② service mysqld start   // ③hive ---service  metastore //④ hive(老套路)

2.准备:在node03节点的root/hivedata目录下 创建一个数据文件ft

①vim  ft

1       zhang   12
2 lisi 34
3 wange 23
4 zhouyu 15
5 guoji 45
6 xiafen 48
7 yanggu 78
8 liuwu 41
9 zhuto 66
10 madan 71
11 sichua 89

注意:这里的数据间是用制表符'\t'来分隔的,后面在建表的时候要注意 terminated  by '\t';  不然导入表中的数据因为格式不符出现'null'

②在数据库heh.db中建表:

hive> CREATE TABLE ft( id INT, name STRING, age INT)
> ROW FORMAT DELIMITED FIELDS TERMINATED BY'\t';
OK
Time taken: 0.216 seconds
hive> load data local inpath'/root/hivedata/ft' into table ft;
Loading data to table hehe.ft
Table hehe.ft stats: [numFiles=1, totalSize=127]
OK
Time taken: 1.105 seconds
hive> select *from ft;
OK
1 zhang 12
2 lisi 34
3 wange 23
4 zhouyu 15
5 guoji 45
6 xiafen 48
7 yanggu 78
8 liuwu 41
9 zhuto 66
10 madan 71
11 sichua 89
NULL NULL NULL
Time taken: 0.229 seconds, Fetched: 12 row(s)

再创建一张分桶表fentong并把ft的数据插入到fentong:

hive> create table fentong(
> id int,
> name string,
> age int,)clustered by(age) into 4 buckets
> row format delimited fields terminated by ','; 创建一张表:它以字段age来划分成4个桶 插入数据:
hive> insert into table fentong select name,age from ft; ok! 现在分桶表中出现之前创建的数据:select * from fentong

③执行抽样:  select id, name, age from  fentong  tablesample(bucket 1 out of 4 on age);

网上很多案例教程说的非常绕,一时很难离清楚,现分享如下通俗 易懂的教程:

怎么分:①在前面创建分桶表的时候有这样语句:age int,)clustered by(age) into 4 buckets 说明本案例是以年龄age来划分成4个桶;

分桶的数据怎么分到四个桶:它是将表中对应的字段值(比如age)分别来除以桶的个数4,结果取余数(也就是取模),若余数为0就放到1号桶,余数为1就放到2号桶
余数为2就放到3号桶,余数为3就放到4号桶

②这句话怎么理解:select id, name, age from psnbucket tablesample(bucket 2 out of 4 on age);

它是说:将你的数据划分成4个桶,取四个桶中的第一个桶的数据

③运行程序

hive> select id, name, age from fentong tablesample(bucket 1 out of 4 on age);
OK
NULL NULL NULL
6 xiafen 48
1 zhang 12 hive> select id, name, age from fentong tablesample(bucket 2 out of 4 on age);
OK
11 sichua 89
8 liuwu 41
5 guoji 45 hive> select id, name, age from fentong tablesample(bucket 3 out of 4 on age);
OK
9 zhuto 66
7 yanggu 78
2 lisi 34

④推算过程:

hive的分桶的更多相关文章

  1. Hive的分桶表

    [分桶概述] Hive表分区的实质是分目录(将超大表的数据按指定标准细分到指定目录),且分区的字段不属于Hive表中存在的字段:分桶的实质是分文件(将超大文件的数据按指定标准细分到分桶文件),且分桶的 ...

  2. Hive 的分桶 & Parquet 概念

    分区 & 分桶 都是把数据划分成块.分区是粗粒度的划分,桶是细粒度的划分,这样做为了可以让查询发生在小范围的数据上以提高效率. 分区之后,分区列都成了文件目录,从而查询时定位到文件目录,子数据 ...

  3. hive,分桶,内外部表,分区

    简单的word-count操作: [root@master test-map]# head -10 The_Man_of_Property.txt    #先看看数据Preface“The Forsy ...

  4. hive的分桶原理

    套话之分桶的定义: 分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储.对于 hive 中每一个表.分区都可以进一步进行分桶. 列的哈希值除以桶的个数来决定每条数据划分在哪个桶中.(网上其它定 ...

  5. hive 分区表和分桶表

    1.创建分区表 hive> create table weather_list(year int,data int) partitioned by (createtime string,area ...

  6. Hive动态分区和分桶(八)

    Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 ​ hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在 ...

  7. hive 分桶及抽样调查

    1.分桶的概述 分区提供了一个隔离数据和优化查询的遍历方式.不是所有的数据集都可形成合力的分区 对于一张表或者分区,hive可以进一步组织成桶,也就是更为细粒度的数据范围 分区针对的是数据的存储路径( ...

  8. Hive SQL之分区表与分桶表

    Hive sql是Hive 用户使用Hive的主要工具.Hive SQL是类似于ANSI SQL标准的SQL语言,但是两者有不完全相同.Hive SQL和Mysql的SQL方言最为接近,但是两者之间也 ...

  9. Hive(六)【分区表、分桶表】

    目录 一.分区表 1.本质 2.创建分区表 3.加载数据到分区表 4.查看分区 5.增加分区 6.删除分区 7.二级分区 8.分区表和元数据对应得三种方式 9.动态分区 二.分桶表 1.创建分桶表 2 ...

随机推荐

  1. 伪数组 arguments

    arguments代表的是实参.有个讲究的地方是:arguments只在函数中使用. (1)返回函数实参的个数:arguments.length 例子: fn(2,4); fn(2,4,6); fn( ...

  2. JQuery学习---JQuery基础知识

    JQuery介绍: [官网]http://jquery.com [参考API]http://jquery.cuishifeng.cn/ JQuery的低版本支持IE低版本,JQuery的2版本不太支持 ...

  3. Google的Python代码格式化工具YAPF详解

    平时习惯了杂乱无章地编写代码,而最后的代码勘定,却依赖于PyCharm自带的格式化工具,以及其自带的提示功能来规范代码.而pycharm里的格式化工具,不支持对多文件进行代码批量格式化,曾经尝试些解决 ...

  4. cgic程序的编写遇到的问题

    cgic程序的编写 今天使用cgic库编写了一些cgi的代码,结果在编译的时候出了很多错误,在这里分享出来算是给自己做个笔记,虽然都是小问题但是急需解决的时候还是很麻烦的. 代码结构: login_c ...

  5. Yahoo!团队经验:网站性能优化的34条黄金法则

    英文原文:http://developer.yahoo.com/performance/rules.html 1.尽量减少HTTP请求次数 (1)合并文件就是通过把所有的脚本放到一个文件中来减少HTT ...

  6. 深入理解webpack打包机制

    一.单入口文件如何打包 /src/single/index.js var index2 = require('./index2'); var util = require('./util'); con ...

  7. CentOS7.X安装Redis-4.0.8以及Redis集群搭建

    安装redis 安装前的准备 yum install \ vim \ wget \ make \ gcc \ gcc-c++ \ automake \ autoconf \ -y \ 下载解压并安装 ...

  8. iOS--性能优化--保持界面流畅

    卡顿产生的原因和解决方案 在 VSync 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建.布局计算.图片解 ...

  9. Vue Spa切换页面时更改标题

    在Vue组件化开发过程中,因为是单页面开发,但是有时候需要页面的title根据情况改变,于是上网查了一下,各种说法花(wo)里(kan)胡(bu)哨(dong), 于是想到一个黑科技 documet. ...

  10. Kali-linux使用SET实施攻击

    前面介绍了社会工程学工具包(SET)的简单使用.为了能帮助用户更容易的理解社会工程学的强大功能.本节将介绍使用社会工程学工具包实施各种攻击. 7.4.1 针对性钓鱼攻击向量 针对性钓鱼攻击向量通过构造 ...