在前面的几篇文章当中一直有一个概念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)
 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介绍完毕!

Hive Tunning 补充 关于bucket的更多相关文章

  1. Hive Tunning(二)优化存储

    接着上一章我们讲的hive的连接策略,现在我们讲一下hive的数据存储. 下面是hive支持的数据存储格式,有我们常见的文本,JSON,XML,这里我们主要讲一下ORCFile. Built-in F ...

  2. Hive Tunning(三) 最佳实践

    在上一讲的基础上,我们来做来一个实际的例子来展示如何在实操中进行高效的hive查询作业. (1)首先我们建立一个表 CREATE EXTERNAL TABLE pos_staging( txnid S ...

  3. Hive Tuning(一) 连接策略

    群里共享了一本hive调优的书记,名叫<Hive Tunning>,就忍不住开始看了,也顺便记录一下自己学到的东西,备忘! 首先,这是hive的数据摘要,别问我什么意思,我也没看懂. 好, ...

  4. hive 桶相关特性分析

    1. hive 桶相关概念     桶(bucket)是指将表或分区中指定列的值为key进行hash,hash到指定的桶中,这样可以支持高效采样工作.     抽样( sampling )可以在全体数 ...

  5. Hive之分区(Partitions)和桶(Buckets)

    转自:http://www.aahyhaa.com/archives/316 hive引入partition和bucket的概念,中文翻译分别为分区和桶(我觉的不是很合适,但是网上基本都是这么翻译,暂 ...

  6. Hive基础之Hive环境搭建

    Hive默认元数据信息存储在Derby里,Derby内置的关系型数据库.单Session的(只支持单客户端连接,两个客户端连接过去会报错): Hive支持将元数据存储在关系型数据库中,比如:Mysql ...

  7. 转载:几种 hive join 类型简介

    作为数据分析中经常进行的join 操作,传统DBMS 数据库已经将各种算法优化到了极致,而对于hadoop 使用的mapreduce 所进行的join 操作,去年开始也是有各种不同的算法论文出现,讨论 ...

  8. Hive 模式设计

    Hive看上去很像关系型数据库.不过,Hive实现和使用的方式和传统的关系型数据库非常不同.Hive是反模式的. 本文将重点介绍Hive中哪些模式是用户应该使用的,儿哪些是应该避免的 一.按天划分的表 ...

  9. Hive的数据模型及各模块的应用场景

    Hive的数据模型   Hive数据模型.png 数据模型组成及应用场景 Hive的数据模型主要有:database.table.partition.bucket四部分: 数据模型之database ...

随机推荐

  1. Java – Display all ZoneId and its UTC offset

    package com.mkyong.date; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.Z ...

  2. MySQL通过Explain查看select语句的执行计划结果触发写操作

    [背景] 某某同学执行了一下Explain结果结果发现数据库有了一条写入操作,恭喜这位同学你的锅到货了,你签收一下: 对! 你没有听错,在一种场景下就算是Explain也会引发数据的写操作,就这是外层 ...

  3. PCIE协议解析 synopsys IP loopback 读书笔记(1)

    1      Overview Core支持单个Pcie内核的Loopback功能,该功能主要为了做芯片验证,以及在没有远程接收器件的情况下完成自己的回环.同时,Core也支持有远程接收器件的loop ...

  4. AlloyTouch全屏滚动插件搞定顺滑H5页

    使用姿势 在设计全屏滚动插件的时候,希望开发者几乎: 不用写任何脚本快速生成精致H5 支持PC滚轮和移动触摸 酷炫的转场动效 灵活的时间轴管理 一切皆可配置 但是不写脚本肯定没有灵活性咯?!不是的.这 ...

  5. Java实现单链表翻转

    单链表翻转比方有例如以下链表: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3NoaXp0eQ==/font/5a6L5L2T/fontsize ...

  6. running boot2docker -> error in run: Failed to get machine “boot2docker-vm”: machine does not exist

    登陆和使用.详细请看.....https://github.com/boot2docker/boot2docker boot2docker start error in run: Failed to ...

  7. DIOCP开源项目-利用队列+0MQ+多进程逻辑处理,搭建稳定,高效,分布式的服务端

    最近头脑里面一直在想怎么样让能让大家基于DIOCP上写出稳定的服务端程序.很多朋友问我,你DIOCP稳定吗,我可以用他来做三层服务器吗? 当时我是这样回答的,我只能保证DIOCP底层通信的稳定. 说实 ...

  8. 【Android】Sensor框架Framework层解读

    Sensor整体架构 整体架构说明 黄色部分表示硬件,它要挂在I2C总线上 红色部分表示驱动,驱动注册到Kernel的Input Subsystem上,然后通过Event Device把Sensor数 ...

  9. SQLite三种JDBC驱动的区别

    在DBeaver中看到SQLite有三种JDBC驱动,查了它们官方网站的相关解释,发现它们还是挺不一样的.   SQLite Wrapper by Christian http://www.ch-we ...

  10. 通俗易懂讲解happens-before原则

      在接下来的叙述里我首先会说明happens-before规则是干什么用的,然后用一个简单的小程序说明happens-before规则 一.happens-before规则 我们编写的程序都要经过优 ...