Hive bucket

Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的

由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询

Hivebucket:

hive中table可以拆分partition,table和partition可以通过‘CLUSTERED(聚集) BY ’进一步分bucket,bucket中的数据可以通过‘SORT BY’排序

ucket主要作用:

1. 数据sampling(抽样)

2. 提升某些查询操作效率,例如map side join

需要特别注意的是:clustered by和sorted by不会影响数据的导入,这意味着,用户必须自己负责数据如何如何导入,包括数据的分桶和排序。

‘sethive.enforce.bucketing = true‘ 可以自动控制上一轮reduce的数量从而适配bucket的个数,当然,用户也可以自主设置mapred.reduce.tasks去适配bucket个数,推荐使用‘set hive.enforce.bucketing = true‘

示例:

建临时表user_tmp并导入数据:

hive> select * from user_tmp;

Id      age     name      stat

1       20     zxm     20140801

2       21     ljz       20140801

3       19     cds      20140801

建student表:

hive>create table user(id INT, age INT, nameSTRING)

>partitionedby(stat_date STRING)

>clustered by(id) sorted by(age)into 2 bucket

>row formatdelimited fields terminated by ‘,‘;

设置环境变量:

>set hive.enforce.bucketing = true;

插入数据:

>from student_tmp

>insert overwrite table user partition(stat_date="20140802")

>select id,age,name where stat_date="20140801" sort by age;

查看文件目录:

$ hadoop fs -ls /user/hive/warehouse/usertstat_date=20120802/

Found 2 items

-rw-r--r--   1 work supergroup         31 2014-07-3119:52 /user/hive/warehouse/user/stat_date=20120802/000000_0

-rw-r--r--   1 work supergroup         39 2014-07-3119:52 /user/hive/warehouse/user/stat_date=20120802/000001_0

查看sampling数据:

hive>select*from user tablesample( bucket

1out of 2 on id);

Total MapReduce jobs = 1

4       18     mac     20120802

2       21     ljz     20120802

6       23     symbian 20120802

tablesample是抽样语句,语法:TABLESAMPLE(BUCKETx OUT OF y)

y必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。例如,table总共分了64份,当y=32时,抽取(64/32=)2个bucket的数据,当y=128时,抽取(64/128=)1/2个bucket的数据。x表示从哪个bucket开始抽取。例如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。

Hive bucket

时间: 2024-08-02 14:53:07

Hive bucket的相关文章

Hive bucket桶

对于每一个表(table)或者分区,Hive可以进一步组织成桶.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除于桶的个数求余的方式决定该条记录存放在哪个桶当中.采用桶能够带来一些好处,比如JOIN操作.对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作.那么将保存相同列值的桶进行JOIN操作就可以,可以大大减少JOIN的数据量. Hive中table可以拆分成Partition,table和Partition可以通过'CLUSTERED BY'进一步分buck

hive bucket 桶

对于每一个表(table)或者分区,Hive可以进一步组织成桶.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中.采用桶能够带来一些好处,比如JOIN操作.对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作.那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量. hive中table可以拆分成partition,table和partition可以通过'CLUSTERED BY '进一步分buc

【原】hive 操作笔记

1.建表: hive> CREATE TABLE pokes (foo INT, bar STRING);hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);由于很多数据在hadoop平台,当从hadoop平台的数据迁移到hive目录下时,由于hive默认的分隔符是/u0001,为了平滑迁移,需要在创建表格时指定数据的分割符号,语法如下:create table ooo(uid string,n

Hive桶表

桶(bucket)是指将表或分区中指定列的值为key进行hash,hash到指定的桶中,这样可以支持高效采样工作. 抽样(sampling)可以在全体数据上进行采样,这样效率自然就低,它还是要去访问所有数据.而如果一个表已经对某一列制作了bucket,就可以采样所有桶中指定序号的某个桶,这就减少了访问量. 针对桶的操作,总共有四步: 1).开启桶的服务 Hive > set hive.enforce.buketing=true; 2).创建桶表 首先,我们来看如何告诉Hive—个表应该被划分成桶

hive中的bucket table

前言 bucket table(桶表)是对数据进行哈希取值,然后放到不同文件中存储 应用场景 当数据量比较大,我们需要更快的完成任务,多个map和reduce进程是唯一的选择.但是如果输入文件是一个的话,map任务只能启动一个.此时bucket table是个很好的选择,通过指定CLUSTERED的字段,将文件通过hash打散成多个小文件. create table test (id int, name string ) CLUSTERED BY(id) SORTED BY(name) INTO

Hive 分区、桶、Sort Merge Bucket Join

Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 SMB join 的,Join 是整个 MR/Hive 最为核心的部分之一,是每个 Hadoop/Hive/DW RD 必须掌握的部分,之前也有几篇文章聊到过 MR/Hive 中的 join,其实底层都是相同的,只是上层做了些封装而已. 前面两个很好理解,基本上每个人都会接触到,但最后一种,可能有同学

【转】Hive 基础之:分区、桶、Sort Merge Bucket Join

Hive 已是目前业界最为通用.廉价的构建大数据时代数据仓库的解决方案了,虽然也有 Impala 等后起之秀,但目前从功能.稳定性等方面来说,Hive 的地位尚不可撼动. 其实这篇博文主要是想聊聊 SMB join 的,Join 是整个 MR/Hive 最为核心的部分之一,是每个 Hadoop/Hive/DW RD 必须掌握的部分,之前也有几篇文章聊到过 MR/Hive 中的 join,其实底层都是相同的,只是上层做了些封装而已,如果你还不了解究竟 Join 有哪些方式,以及底层怎么实现的,请参

Hive之分区以及bucket分桶认识理解

1. 桶的概念: 对于每一个表(table)或者分区, Hive可以进一步组织成桶(没有分区能分桶吗?),也就是说桶是更为细粒度的数据范围划分.Hive也是 针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中.把表(或者分区)组织成桶(Bucket)有两个理由:(1).获得更高的查询处理效率.桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构.具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (M

Hadoop Hive基础sql语法

Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,通过自己的SQL 去查询分析需要的内容,这套SQL 简称Hive SQL,使不熟悉mapreduce 的用户很方便的利用SQL 语言查询,汇总,分析数据.而mapreduce开发人员可以把己写的mapper 和reducer 作为插件来支持