美文网首页
Hive桶表

Hive桶表

作者: 码戈 | 来源:发表于2020-06-09 15:39 被阅读0次

    分桶及抽样查询

    分桶表数据存储类似与MR分区
    分区针对的是数据的存储路径;分桶针对的是数据文件。
    分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区,
    特别是之前所提到过的要确定合适的划分大小这个疑虑。
    分桶是将数据集分解成更容易管理的若干部分的另一个技术。

    建表:

    create table stu_buck(id int, name string) 
    clustered by(id) into 4 buckets
    row format delimited fields terminated by '\t';
    
    desc formatted stu_buck; 
    

    ![Snipaste_2020-06-09_11-08-30.png](https://img.haomeiwen.com/i6334897/6de72852ab6f5d66.png?imageMogr2/auto-[图片上传中...(Snipaste_2020-06-09_11-12-11.png-464c67-1591688110841-0)]
    orient/strip%7CimageView2/2/w/1240)

    load导入数据,发现未生产四个桶

    load data local inpath '/home/data/stu.txt' into table stu_buck;
    
    Snipaste_2020-06-09_11-12-11.png

    清空桶表
    truncate table stu_buck;

    导入数据之前,需要先设置参数

    set hive.enforce.bucketing=true; 
    set mapreduce.job.reduces=-1; //自动根据桶的个数决定业务的个数
    insert into table stu_buck 
    select id, name from stu;
    
    Snipaste_2020-06-09_11-19-08.png
    Snipaste_2020-06-09_11-19-18.png

    分桶抽样查询

    对于非常大的数据集,有时用户需要使用的是一个具有代表性的查询结果而不是全部结果。Hive 可以通过对表进行抽样来满足这个需求。

    select * from stu_buck tablesample(bucket 1 out of 4 on id);
    

    注:tablesample 是抽样语句,语法:TABLESAMPLE(BUCKET x OUT OF y) 。

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

    x 表示从哪个 bucket 开始抽取,如果需要取多个分区,以后的分区号为当前分区号加上y。
    例如,table 总 bucket 数为 4,tablesample(bucket 1 out of 2),表示总共抽取(4/2=)2 个bucket 的数据,抽取第 1(x)个和第 3(x+y)个 bucket 的数据

    注意:x 的值必须小于等于 y 的值,否会报错

    Snipaste_2020-06-09_15-28-05.png
    Snipaste_2020-06-09_15-28-14.png

    相关文章

      网友评论

          本文标题:Hive桶表

          本文链接:https://www.haomeiwen.com/subject/zwostktx.html