zoukankan      html  css  js  c++  java
  • Hive-分区、分桶

    Hive-分区、分桶

    分桶(bucket)

    对某一列取哈希值,对桶的个数求模取余,根据余数决定该条记录进入哪一个桶

    场景:小表关联大表时效果明显(Map Side Join),会把小表数据通过DistributedCache分发到各个Map Side,然后加载到内存和每一个Map任务处理的大表进行JOIN,这样就不必要去做Reduce JOINJOIN时是按照桶来JOIN的,大大减少了JOIN的数量

    不能修改bucket列的值,否则会报以下错误:FAILED:SemanticException [Error 10302]:Updating values of bucketing columns is notsupported. Column id.

    示例

    create table t1(id int , name string) clustered by (id) into 8 buckets stored as orc tblproperties ('transactional'='true');

    关键字clustered声明划分桶的列和桶的个数,这里以id来划分桶,划分8个桶。Hive会计算id列的hash值再以桶的个数取模来计算某条记录属于哪个桶。

    分区(partition)

    分区就是对某列有相同的数据或者某一个数据范围的数据进行分类,在查询时就可以针对分区查询,不必进行全表扫描

    对分区表执行insert时,表名后要跟partition子句。

  • 相关阅读:
    C# macro function via #define __FILE__ __LINE__ ___FUNCTION__ __DATE__ __TIME__
    3
    2月23号
    3月26
    impala故障
    2月3号日更
    HDFS某个节点的磁盘满了
    3月2
    mq集群
    3月3
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/14198472.html
Copyright © 2011-2022 走看看