zoukankan      html  css  js  c++  java
  • hive的分桶

    一.总结

      分桶是相对分区进行更细粒度的划分。分桶将整个数据内容安装某列属性值得hash值进行区分,如要安装name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。几个桶就是几个文件.

    二.用途

      在分区数量过于庞大,就会有海量的目录建立,以至于可能导致文件系统崩溃时,我们就需要使用分桶来解决问题了。

     三.建立分桶表

    set hive.enforce.bucketing=true;(建议开启)
    CREATE
    TABLE `report_buckets_test`( `id` string, `mobile` string, `idcard` string, `name` string, `result` string, `contact` string, `ip` string, `gps` string, `create_date` string, `checktime` string, `checkname` string, `depname` string, `depcode` string, `county_code` string, `area_addr` string)clustered by (mobile) INTO 3 BUCKETS;

    往表里插入数据

    set hive.enforce.bucketing=true;(建议开启)
    INSERT
    into report_buckets_test select * FROM report;

    这样数据就会被插入到表report_buckets_test 

    因为分表作用的是文件,并不会引起目录的变化吗,这里是建立3个桶来装,取模之后只放到三个桶里面去了

     四.基于桶抽样

    SELECT * FROM report_buckets_test TABLESAMPLE(BUCKET 1 OUT OF 3 ON mobile); 

      桶的个数从1开始计数。因此,前面的查询从4个桶的第一个中获取所有的用户。 对于一个大规模的、均匀分布的数据集,这会返回表中约四分之一的数据行。我们 也可以用其他比例对若干个桶进行取样(因为取样并不是一个精确的操作,因此这个 比例不一定要是桶数的整数倍)。

  • 相关阅读:
    Android 安卓初探 新建项目
    SQL 根据关联,用一个表的值修改另一个表对应字段的值
    SQL 字符串不足补零
    Android 安卓学习积累
    C#中定义数组
    如何利用地图API制作汽车沿道路行驶的动画?——如何获得道路层数据
    Lambda 表达式(C# 编程指南)
    不定的多条件的过滤
    如何利用【百度地图API】,制作地图地址标记?
    php调用.net生成的.dll文件
  • 原文地址:https://www.cnblogs.com/makailong/p/12612913.html
Copyright © 2011-2022 走看看