0


数据仓库学习笔记三

1. 掌握Hive数据存储模型

1.1 Hive存储格式

    Hive中的数据分为真实数据与元数据,一般来说Hive存储格式是指真实数据的存储格式。元数据表示真实数据与Hive表的映射关系。

    Hive常用的存储格式包括以下4种:TEXTFILE ,SEQUENCEFILE,RCFILE,ORCFILE。

①.TEXTFILE:文本文件格式

    常见的txt、csV、tsv等文件都属于TEXTFILE。 Hive认存储格式为TEXTFILE,即创建灰时如果不单独指定存储格式,则默认为存储格式为TEXTFILE存储格式为按行存储,内容为普通的文术格式,一般可以使用cat命令直接查看。TEXTFILE格式的数据文件无须任何处理即可导入Hive,文件每行为一条记录,记录可用任意分隔符进行列分割,记录之间须以行结束符分割。Hive将TEXTFILE映射为表的过程中,将会逐个字符地判断是否为列分隔符或行分隔符。

     TEXTFILE支持使用Gzip压缩,但Gzip压缩后的文件将不再支持MapReduce分割机制,这意味着压缩后的文件不论有多少个HDFS块都只能被一一个Map任务处理,即失去了使用集群并行处理的优势。

②. SEQUENCEFILE:二进制优化过的文本存储文件格式

     SEQUENCEFILE 是Hadoop提供的一种由 “二进制序列化过的Key/Value字节流”组成的文本存储文件格式。其由于内容为二进制字节,所以无法通过cat命令查看原始字符,这可以抽象地理解为,在SEQUENCEFILE中每条记录均以键位对的方式进行存储,仅支持追加。与TEXTILE类似,SEQUENCEFILE同样按行存储。

     Hive无法直接导入SEUENCEFILE格式的数据文件。数据须首先导入至TEXTILE格式的表中,然后再从TEXTFLE格式的表中采用插入方式导入至SEQUENCEFILE格式的表。

     SEQUENCEILE是可分割的文件格式,支持3种压缩选项。

    (1)NONE:不压缩

    (2)RECORD(默认选项):记录级压缩,压缩率低

    (3)BLOCK:块级压缩,压缩率高。

③.RCFILE:面向列的数据存储格式

    RCFILE (Record-Columnar File)是Facebook开发的一种 专门面向列的数据存储格式,不同于TEXTFILE和SEQUENCEFILE, RCFILE 是基于行列混合存储思想的设计。

     RCFILE遵循“先水平划分,再垂直划分-的设计理念:首先把Hive表水平切分成多个行组,保证同一行的数据位于同一节点, 其次在行组内按照“列”垂直切分,实现列与列的数据在磁盘上呈现为连续的存储块。使用RCFILE的优势是既保证了每条记录所有列在同一一个HDFS块,也可以做到当查询仅针对表中的少数几列时,可跳过不必要的列进行数据读收。

     RCFILE是可分割的文件格式,即在每个行组中,元数据头部(Metadata Header)和表格数据段会較分别压缩。对于元数据头部而言,RCFILE会使用行程长度编码(RunLength Encoding. RLE) 算法压缩数据,面对于表格数据段而言,其每个列会通过Gzip压缩算法独立压缩。

④.ORCFILE:对RCFILE的优化

    ORCFILE Optimized Row-Columnar File) 是对RCFILE的优化,可以提供种高效的方法来存储Hive数据。ORCFILE 的特点是:支持压缩比很高的压缩算法,文件可切分,提供多种索引,支持复杂的数据结构。

1.2 Hive数据单元

①.数据库

     数据库Catabases)类似于RDBMS中的数据库,在HIDFS中表现为hive metastore warehouse.dir 目录下的一个文件夹,其本质是用于避免表、视图、分区、列等命久的命名空间。

②.表

     表(Tables)由列构成,在表上可以进行过滤、映射、连接和联合操作。表在HDFS中表现为所属数据库目录下的子目录,具体又分内部表和外部表。内部表类似于RDBNIS中的表,由Hive管理。外部表指向已经存在HDFS中的数据,与内部表元数据组织是相同的,但其数据存放位置是任意的。外部表的真实数据不被Hive管理,即当删除一-张内部表时,元数据以及HDFS上的真实数据均被删除,而删除外部表则只会删除元数据而不会删除真实数据。

③.分区

     每个表都可以按指定的键分为多个分区(Partitions)。 分区的作用是提高查询的效率,其在HDFS中表现为表目录下的子目录。

④.分桶

     根据表中某一-列的哈 希值可将数据划分为多个分桶(Buckets), 在HDFS中分桶表现为同一个目录下根据哈希散列之后的多个文件。
     

注意:

    可以看到,Hive中的数据单元划分与RDBMS的物理模型非常类似。但在Hive 数据单元划分过程中还必须注意以下几点。

①.Hive表没有主键。

②.Hive表(0.14 版本前)不支持行级操作,新版本中行级操作效率也比较低。

③.Hive表不支持批量update操作,但可以先删除、再添加。

④.Hive分区和分桶可以极大提升数据查询效率。

1.3 Hive存储模型

按照数据单元的划分结果,Hive数据在HDFS的典型存储结构中表现为以下形式:

① /数据仓库地址/数据库 名称/表名称/数据文件(或分桶数据文件)。

② /数据仓库 地址/数据库名称/表名称/分区键/数据文件(或分桶数据文件)。

2. 熟悉数据类型

2.1 基本数据类型

    Hive中的基本数据类型也称为原始类型,包括整数,小数,文本,布尔,二进制以及时间类型。

整数类型:(4种)(在使用整数变量是,默认情况为INT,如果要声明为其他类型,须通过后缀来标识)

   TINYINT:对应Java中的byte,字节长度为1字节,后缀为‘Y’

   SMALLINT:对应Java中的short,字节长度为2字节,后缀为‘S’

    INT:对应Java中的int,字节长度为4字节

    BIGINT:对应Java中的long,字节长度为8字节,后缀为‘L’

小数类型:

    小数类型也称为浮点类型,包括FLOAT和DOUBLE两种,对应Java中的loat和double,分

别为32位和64位浮点数。此外,Hive 还可以使用DECIMAL 米表示任意精度的小数,类似于

Java 中的BigDecimal,其通常在货币当中使用。

文本类型:(文本类型也称为字符串类型,使用单引号或双引号来指定。Hive 有3种类型用于存储 文本)
STRING存储可变长的文本,对长度没有限制。理论上STRING的存储空间为2GB,但是

存储特别大的对象时效率会受影响,此时可以考虑使用Sqoop提供的大对象支持。

    VARCHAR与STRING类似,但其存储字符串的长度要求在1~65355之间,超出部分将被截

断,例如VARCHAR(20)。

     CHAR以固定长度来存储字符串,最大固定长度为255,例如CHAR(20)。

布尔及二进制类型:

    布尔(BOOLEAN):类型值有true和false两种

    二进制类型BINARY用于存储变长的二进制数据

时间类型:

     DATE:用于描述特定的年月日,以yy-MM-dd格式表示(DATE类型不包含时间,所表示的日期范围为0000-01-01至9999-12-31)

    TIMESTAMP:存储纳米级别的时间戳,TIMESTAMP与地区无关

    INTERVAL:表示时间间隔,其仅被Hive1.2.0之后的版本支持

2.2 复杂数据类型

    Hive 的表字段不仅可以是基础数据类型,还可以是复杂数据类型(Complex Types)。Hive 有4种常用的复杂数据类型,分别是数组(ARRAY)、映射(MAP)、结构体(STRUCT)和联合体(UNIONTYPE)。

ARRAY 和MAP:

     ARRAY是具有相同类型变量的集合。这些变量称为数组的元素,每个数组元素都有一个索引

编号,编号从零开始。

     MAP是一组键值对集合,key 只能是基本类型,值可以是任意类型。

STRUCT:

     STRUCT封装了- -组有名字的字段(Named Field),其类型可以是任意的基本类型,结构体内的

元素使用“.”来访问。

UNIONTYPE:

     在给定的任何一个时刻,UNIONTYPE 类型可以保存指定数据类型中的任意一种其类似于

Java中的泛型,在任一-时刻只有其中的一一个类型生效。


本文转载自: https://blog.csdn.net/m0_73799023/article/details/136715402
版权归原作者 波本,不加冰 所有, 如有侵权,请联系我们删除。

“数据仓库学习笔记三”的评论:

还没有评论