hive bucket

hive中table可以拆分成partition, table和partition可以通过CLUSTERED BY 进一步分bucketbucket中的数据可以通过SORT BY排序。

bucket主要作用:

  1. 数据sampling
  2. 提升某些查询操作效率,例如mapside join 需要特别注意的是:clustered by和sorted by不会影响数据的导入,这意味着,用户必须自己负责数据如何如何导入,包括数据的分桶和排序。 set hive.enforce.bucketing = true 可以自动控制上一轮reduce的数量从而适配bucket的个数,当然,用户也可以自主设置mapred.reduce.tasks去适配bucket个数,推荐使用set hive.enforce.bucketing = true

示例:

建临时表student_tmp,并导入数据:

hive> desc student_tmp;         
OK
id      int
age     int
name    string
stat_date       string
Time taken: 0.106 seconds
hive> select * from student_tmp;
OK
1       20      zxm     20120801
2       21      ljz     20120801
3       19      cds     20120801
4       18      mac     20120801
5       22      android 20120801
6       23      symbian 20120801
7       25      wp      20120801
Time taken: 0.123 seconds

student表:

hive>create table student(id INT, age INT, name STRING)
       >partitioned by(stat_date STRING) 
       >clustered by(id) sorted by(age) into 2 bucket
       >row format delimited fields terminated by ',';

设置环境变量: >set hive.enforce.bucketing = true;

插入数据:

       >from student_tmp 
       >insert overwrite table student partition(stat_date="20120802") 
       >select id,age,name where stat_date="20120801" sort by age;

查看文件目录:

$ hadoop fs -ls /user/hive/warehouse/studentstat_date=20120802/
Found 2 items
-rw-r--r--   1 work supergroup         31 2012-07-31 19:52 /user/hive/warehouse/student/stat_date=20120802/000000_0
-rw-r--r--   1 work supergroup         39 2012-07-31 19:52 /user/hive/warehouse/student/stat_date=20120802/000001_0

查看sampling数据:

hive> select * from student tablesample(bucket 1 out of 2 on id);                                                                               
Total MapReduce jobs = 1
Launching Job 1 out of 1
.......
OK
4       18      mac     20120802
2       21      ljz     20120802
6       23      symbian 20120802
Time taken: 20.608 seconds

tablesample

抽样语句,语法:TABLESAMPLE(BUCKET x OUT OF y)

1.y必须是tablebucket数的倍数或者因子。 hive根据y的大小,决定抽样的比例。 例如,table总共分了64份,当y=32时,抽取(64/32=)2个bucket的数据,当y=128时,抽取(64/128=)1/2个bucket的数据。

2.x表示从哪个bucket开始抽取。 例如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏利炳根的专栏

学习笔记TF063:TensorFlow Debugger

TensorFlow Debugger(tfdbg),TensorFlow专用调试器。用断点、计算机图形化展现实时数据流,可视化运行TensorFlow图形内部...

6260
来自专栏CreateAMind

多目标的强化学习教程-两篇均有代码

1192
来自专栏about云

hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题

问题导读 1.对于预分区错误,hbase使用什么功能解决? 2.Region Normalizer的功能是什么? 3.在什么情况下运行Normalizer 比...

2321
来自专栏简书专栏

基于Python改变图片像素大小

用python改变图片像素大小非常快速,编辑好代码运行程序不到1秒就产生结果。 有的网站上传照片时,限定了照片像素大小,这时候小小一份代码就可以快速解决我们的...

4092
来自专栏Deep Learning 笔记

和MNSIT打个招呼

作为深度学习的入门数据集,MNIST是个很好的选择,我们可以在官网 http://yann.lecun.com/exdb/mnist/下载。

1112
来自专栏腾讯移动品质中心TMQ的专栏

【腾讯TMQ】基于模型的自动化测试工具:GraphWalker

概述GraphWalker就是一个基于测试模型的用例生成工具。它主要应用于FSM, EFSM模型。可以用来它直接读取FSM, EFSM图形模型、json模型、生...

1.1K0
来自专栏NetCore

Visual C#.Net网络程序开发-Tcp篇(2) 祥细内容:

前面我们说,TcpClient类创建在Socket之上,在Tcp服务方面提供了更高层次的抽象,体现在网络数据的发送和接受方面,是TcpClient使用标准的St...

6065
来自专栏PaddlePaddle

【进阶篇】命令行参数细节描述

编写|PaddlePaddle 排版|wangp 虽然PaddlePaddle看起来包含了众多参数,但是大部分参数是为开发者提供的,或者已经在集群提交环境中自动...

3034
来自专栏我是业余自学C/C++的

汇编语言-第三章 寄存器(内存访问)

1686
来自专栏JackieZheng

可视化(番外篇)——在Eclipse RCP中玩转OpenGL

  最近在看有关Eclipse RCP方面的东西,鉴于Gephi是使用opengl作为绘图引擎,所以,萌生了在Eclipse RCP下添加画布,使用opengl...

2085

扫码关注云+社区

领取腾讯云代金券