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个数。

  • 相关阅读:
    while循环
    赋值运算符、逻辑运算符补充
    布尔类型 基本运算符 if判断
    输入 格式化输出
    计算机基础
    python介绍 编程语言分类及对比 python解释器安装(多版本共存) 变量 数据类型(三种)
    UDP套接字协议
    软件工程个人作业01
    网页版增加信息---添加
    javaWeb项目技术
  • 原文地址:https://www.cnblogs.com/jottings/p/11312230.html
Copyright © 2011-2022 走看看