博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive Tunning 补充 关于bucket
阅读量:6097 次
发布时间:2019-06-20

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

  在前面的几篇文章当中一直有一个概念bucketing不清楚到底是怎么回事。

  网友南京-李先森给了他收集的一些资料,如下:

  Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。如将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00020 

  这段描述是说用了bucket之后的,那为什么要用bucket,没说,本着认真负责的态度,我从网上搜索到了Oreilly《Programming.Hive》这本书,然后在里面找到了答案,现在发出来和大家分享一下。

  首先回顾一下分区,分区是切分数据的一种比较方便的方法,比较常用的就是按照日期来进行切分,bucket(中文意思就是篮子,可以放鸡蛋,哈哈)其实也是一种切分数据的方法。

  假设我们有一张日志表,我们需要按照日期和用户id来分区,目的是为了加快查询谁哪天干了什么,如下:

CREATE TABLE weblog (url STRING, source_ip STRING)> PARTITIONED BY (dt STRING, user_id INT);

  但是这里面用user_id去切分的话,就会产生很多很多的分区了,这些分区可大可小,这个数量是文件系统所不能承受的。

  在这种情况下,我们既想加快查询速度,又避免出现如此多的小分区,篮子(bucket)就出现了。

  具体的用法是:

  

CREATE TABLE weblog (user_id INT, url STRING, source_ip STRING)> PARTITIONED BY (dt STRING)> CLUSTERED BY (user_id) INTO 96 BUCKETS;

  首先按照日期分区,分区结束之后再按照user_id把日志放在96个篮子,这样同一个用户的所有日志都会在同一个篮子里面,并且一个篮子里面有好多用户的日志。

  然后我们在插入数据的时候就要注意了,我们一定要设置hive.enforce.bucketing为true。

  

hive> SET hive.enforce.bucketing = true; hive> FROM raw_logs> INSERT OVERWRITE TABLE weblog> PARTITION (dt='2009-02-25')> SELECT user_id, url, source_ip WHERE dt='2009-02-25';

  

  

  到此,bucket介绍完毕!

转载于:https://www.cnblogs.com/cenyuhai/p/3323467.html

你可能感兴趣的文章
浅谈无线h5开发
查看>>
关于裸婚,没事F5刷豆瓣是不够的!
查看>>
【FJOI2015】金币换位问题
查看>>
HighChar
查看>>
window上安装pymysql
查看>>
控件调用函数
查看>>
activity的启动模式
查看>>
Android主线程、子线程通信(Thread+handler)
查看>>
gitlab配置邮箱
查看>>
Win10桌面奔溃怎么办?雨林木风Win10奔溃解决方法教程
查看>>
mysql Inoodb 内核
查看>>
Redis 基础
查看>>
UITextField的returnkey点击事件
查看>>
特殊字体引用
查看>>
owlcar 用法心得 自定义导航
查看>>
数据结构 学习笔记03——栈与队列
查看>>
DB2 OLAP函数的使用(转)
查看>>
数学之美系列二十 -- 自然语言处理的教父 马库斯
查看>>
Android实现自定义位置无标题Dialog
查看>>
面试总结
查看>>