zoukankan      html  css  js  c++  java
  • hive分桶表bucketed table分桶字段选择与个数确定

    为什么分桶

    (1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。

    (2)提升采样(sampling)效率;

    什么时候分桶

    需要Map-side join 和 sampling时

    选什么字段分桶

    1.int类型字段比较友好

    2.取hash后各分区块数据量比较均匀的字段

    3.join的连接字段

    当join连接的字段值取hash不够均匀时,多取一个其它字段作为分桶字段;

    分桶公式:

     bucket num = hash_function(bucketing_column) mod num_buckets

    列的值做哈希取余 决定数据应该存储到哪个桶

    设置多少个  INTO 个数 BUCKETS

    当数据量够大时设置为约等于≈128M的倍数

    当数据量不够大时考虑,计算的并行度(比如129MB设置2 或者4 )

    bucket个数会决定在该表或者该表的分区对应的hdfs目录下生成对应个数的文件,而mapreduce的个数是根据文件块的个数据确定的map个数。

  • 相关阅读:
    行转列问题
    Session对象失效的客户端解决方法
    Spring之依赖注入
    Spring开发入门
    非关系型数据库redis
    Json(JavaScript Object Notation)
    Ajax
    JavaScript框架之JQuery
    Web核心之Filter过滤器
    Web核心练习之分页模块和条件模块(后台代码为主,jsp已经落伍)
  • 原文地址:https://www.cnblogs.com/jottings/p/11312230.html
Copyright © 2011-2022 走看看