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个数量级的数据量。(若根据外键关系关联则需进行磁盘间的寻址操作,这样会有非常高的性能消耗)

  • 相关阅读:
    URAL 1998 The old Padawan 二分
    URAL 1997 Those are not the droids you're looking for 二分图最大匹配
    URAL 1995 Illegal spices 贪心构造
    URAL 1993 This cheeseburger you don't need 模拟题
    URAL 1992 CVS
    URAL 1991 The battle near the swamp 水题
    Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
    Codeforces Beta Round #7 D. Palindrome Degree hash
    Codeforces Beta Round #7 C. Line Exgcd
    Codeforces Beta Round #7 B. Memory Manager 模拟题
  • 原文地址:https://www.cnblogs.com/JasonCeng/p/11495074.html
Copyright © 2011-2022 走看看