zoukankan      html  css  js  c++  java
  • 《Hive编程指南》读书笔记 | 一文看懂Hive的数据类型和文件格式

      Hive支持关系型数据库中的大多数基本数据类型,同时也支持关系型数据库中很少出现的3种集合数据类型。和大多数数据库相比,Hive具有一个独特的功能,那就是其对于数据在文件中的编码方式具有非常大的灵活性。大多数数据库对数据具有完全的控制,其包括对数据存储到磁盘的过程的控制,也包括对数据生命周期的控制而Hive将这些方面的控制权交给用户,使用户更容易地使用各种各样的工具来管理和处理数据。

     

    一、  基本数据类型

    表1-1 Hive基本数据类型

    数据类型

    长度

    例子

    TINYINT

    1byte有符号整数

    20

    SMALINT

    2 byte有符号整数

    20

    INT

    4 byte有符号整数

    20

    BIGINT

    8 byte有符号整数

    20

    BOOLEAN

    布尔类型,true或false

    TRUE

    FLOAT

    单精度浮点数

    3.14159

    DOUBLE

    双精度浮点数

    3.14159

    STRING

    字符序列。可指定字符集。可使用单引号或双引号

    ‘now is the time’,”for all good men”

    TIMESTAMP(v0.8.0+)

    整数、浮点数或字符串

    1327882397(Unix新纪元秒),1327882397。123456789(Unix新纪元秒并跟随有纳秒数)和‘2019-09-09 12:34:56.123456789’(JDBC所兼容的java.sql.Timestamp)

    BINARY(v0.8.0+)

    字节数组

    见下文

     

    1. Hive的基本数据类型与Java中对应的类型一致

      Hive的基本数据类型都是对Java中的接口的实现,因此这些类型的具体行为细节和Java中对应的类型是完全一致的。

    2. Hive不支持限制最大长度的“字符数组”类型

      关系型数据库支持该类型是出于性能优化的考虑,因为定长的记录更容易进行建立索引,数据扫描等。

      Hive所处的世界是“宽松”的,它不一定拥有数据文件,但必须能够支持使用不同的文件格式。Hive根据不同字段间的分隔符来对其进行判断。同时,Hadoop和Hive强调优化磁盘的读和写的性能,而限制列的值的长度相对来说并不重要。

    3. TIMESTAMPS支持整数、浮点数、字符串

      Hive提供了丰富的时间转换函数,详细请查阅____________。

    4. Hive的BINARY数据类型

      Hive的BINARY数据类型和许多关系型数据库的VARBINARY类似,但其和BLOB数据类型不同,原因在于BINARY的列是存储在记录中的,而BLOB不是。

      BINARY可以在记录中包含任意字节,这样可防止Hive尝试将其作为数字,字符串等进行解析。

      注意:若用户的目标是省略每行记录的尾部,则无需使用BINARY数据类型。若一个表结构指定的是3列,而实际数据文件每行记录包含有5个字段,那么在Hive中最后2列数据将会被省略掉。

    5. 数据类型转换

    1)    同类型不同精度:低精度 --> 高精度

    若有必要:任意整型类型 --> DOUBLE类型

    2)    显示转换: 字符串 --> 数值

    函数: cast(s AS INT) 

    二、   集合数据类型

    表3-2 集合数据类型

    数据类型

    描述

    示例

    STRUCT

    和C语言中的struct或者“对象”类似,都可以通过“点”符号访问元素内容

    STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>

    MAP

    一组键-值对元组集合,使用数组表示法(例如[‘key’])可以访问元素

    MAP<STRING,FLOAT>

    ARRAY

    具有相同数据类型和名称的变量的集合,通过数组下标进行访问

    ARRAY<STRING>

    1. 例子:

    1 CREATE TABLE employees (
    2  NAME           STRING,
    3  SALARY         FLOAT,
    4  SUBORDINATES   ARRAY<STRING>,
    5  DEDUCTIONS     MAP<STRING,FLOAT>,
    6  ADDRESS        STRUCT<stree:STRING,city:STRING,state:STRING,zip:INT>
    7 );

    其中需要说明的是,STRUCT可以混合多种不同的数据类型,但是STRUCT一旦声明好结构,其位置就不可以再改变。

    2. Hive为什么支持集合数据类型

      大多数关系型数据库并不支持这些集合数据类型,因为使用它们会趋向于破坏标准格式。例如,在传统数据模型中,structs可能需要由多个不同的表拼接而成,表间需要适当地使用外键进行连接。(注意:Hive中没有键的概念。但用户可以对表建立索引

      破坏标准格式所带来的一个实际问题是会增大数据冗余的风险,进而导致消耗不必要的磁盘空间,还有可能破坏数据一致性(因为当数据发生改变时冗余的拷贝数据可能无法进行相应的同步)

      然而,在大数据系统中,不遵循标准格式的一个好处就是可以提供更高吞吐量的数据。按数据集进行封装使我们可以通过最少的“头部寻址”来从磁盘上扫描数据,通过较少的寻址次数从而达到较快地处理T甚至P个数量级的数据量。(若根据外键关系关联则需进行磁盘间的寻址操作,这样会有非常高的性能消耗)

  • 相关阅读:
    〖Linux〗-- 复制、用户和组操作、权限更改
    〖Linux〗-- 文本结构和基本命令
    〖Demo〗-- ATM
    〖Python〗-- 脚本目录规范
    二、配置文件
    一、SpringBoot入门
    File--字节流--字符流
    File--字节流--字符流
    SpringBoot快速搭建流程
    SpringBoot快速搭建流程
  • 原文地址:https://www.cnblogs.com/JasonCeng/p/11495074.html
Copyright © 2011-2022 走看看