zoukankan      html  css  js  c++  java
  • Hive 的分桶 & Parquet 概念

    分区 & 分桶

    都是把数据划分成块。分区是粗粒度的划分,桶是细粒度的划分,这样做为了可以让查询发生在小范围的数据上以提高效率。

    • 分区之后,分区列都成了文件目录,从而查询时定位到文件目录,子数据集而提高查询效率。

    1. 创建:
    create table zyy_table (id int,name string)
    clustered by (id) into 4 buckets;

         clustered by (...) into (...)  buckets  声明分桶列和桶的个数。

         hive会计算记录的哈希值,对桶的个数取模,来决定记录属于哪个桶 。

    set hive.enforce.bucketing=true –- 必须设置这个数据,hive才会按照你设置的桶的个数去生成数据

         hive> dfs -ls /user/hive/warehouse/zyy_table;    -- 可以查询桶文件

    drwxrwxr-x+  1 hive hive        111 2016-07-28 19:30 /user/hive/warehouse/test.db/zyy_table/000000_0
    drwxrwxr-x+  2 hive hive        120 2016-07-28 19:41 /user/hive/warehouse/test.db/zyy_table/000000_1
    -rwxrwxr-x+  3 hive hive        148 2016-07-28 19:41 /user/hive/warehouse/test.db/zyy_table/000000_2

        对示例数据进行查询:

    — 带桶的表
    select * from zyy_table tablesample(bucket 1 out of 4 on id);

    tablesample 可以让查询发生在一部分桶上,而不是普通表的查询(使用rand() 函数,在整个数据集上检索)

    parquet  

    http://www.infoq.com/cn/articles/in-depth-analysis-of-parquet-column-storage-format/

    面向分析型业务的列式存储格式。

    列式存储相比于行式存储的优势:

    1. 可以跳过不符合条件的数据,降低IO

    2. 压缩编码,节省空间。同一列数据类型一样,可以高效压缩。

    3. 只读取需要的列,支持向量运算,扫描更有效率。

    Parquet的优势:

    日志结构是复杂的嵌套数据类型,而不同的计算框架需要对这些数据做分析和挖掘,存储和访问很重要。paquet就是既支持关系型数据类型,又能支持嵌套类型的存储格式,

    同时适配多种数据处理框架(MapReduce, Hive, Pig)。

    关系型数据的列式存储很简单,一列列排列下来;

    嵌套型的列存储有些复杂。一个record中的column可以是Int Long,String 也可以是List, Map,Set 这样。(具体需深入)

  • 相关阅读:
    java面向接口编程之适配器模式
    java面向接口编程之制定标准和简单工厂模式
    java接口的使用
    java接口(interface)
    java抽象类的体现-模板模式
    java 抽象类
    java final 关键字
    Singleton模式(单例模式) 饿汉式和懒汉式
    java构造方法的私有化
    java代码块
  • 原文地址:https://www.cnblogs.com/skyEva/p/5716062.html
Copyright © 2011-2022 走看看