Hive-数据类型和文件格式

来源:互联网 发布:c递归算法经典实例 编辑:程序博客网 时间:2024/06/05 08:51

基本数据类型:

    TINYINT(1 byte), SMALLINT(2 byte), INT(4 byte), BIGINT(8 byte)

    BOOLEAN

    FLOAT, DOUBLE

    STRING

    TIMESTAMP(整数,浮点数,字符串)

    BINARY

    注:

    1、这些数据类型都是对Java中接口的实现;

    2、数据类型隐式转换&显示转换cast;

集合数据类型:

    STRUCT:类似于C语言,可以通过"."访问元素内容

    MAP

    ARRAY:编号同样从0开始

Hive与RDBMS对比:

1、RDBMS注重性能,支持最大长度的字符数组(定长记录容易建立索引,数据扫描),但是Hive强调磁盘的读写性能,所以不支持该类型;

2、RDBMS存在范式标准,不支持集合数据类型,这样可以减少数据冗余,保证数据的一致性,但是Hive强调高吞吐量,以最少的“头部寻址”来扫描磁盘是非常必要的;


文本文件数据编码:

    Hive中默认的lines分隔符:\n

    Hive中默认的fields分隔符:^A(Ctrl+A),在create table中使用八进制编码\001表示

    Hive中默认的ARRAY、STRUCT中的元素或者MAP中键值对的分隔符:^B,八进制编码\002表示;

    Hive中默认的MAP键和值之间的分隔符:^C,八进制编码\003表示;

指定其他分隔符语法:

create table test_table (

    name STRING comment 'name'

)

row format delimited

fields terminated by '\001'

collection items terminated by '\002'

map keys terminated by '\003'

lines terminated by '\n'

stored as textfile;

几点说明:

1、其实,Hive的行分隔符只支持'\n',因此这个lines terminated by并不能指定其他分隔符;

2、传统RDBMS都是写时模式(schema on write),即数据在写入数据库时对模式进行检查,但是Hive是读时模式,即在写入时不会对数据进行验证,如果字段缺少或者类型不匹配会设为NULL(实际中还有NAN)。


0 0
原创粉丝点击