天天看点

《hive编程指南》阅读笔记摘要(二)

第三章 数据类型和文件格式

hive中的数据类型包括基本数据类型和集合数据类型(array、map、struct),通常,关系型数据库中没有集合数据类型,而是用关系表关联表示集合。

原因在于: hive中将相关数据存储在一起,来减少磁盘寻址操作,提高性能。

基本数据类型都是对java中接口的实现,所以类型的具体行为细节和java中对应的类型完全一致,如string类型实现的就是java中String类型

TIMESTAMP表示UTC时间,可以是整数(距离unix新纪元时间的秒数);浮点数(距离unix新纪元时间的秒数,小数部分表示纳秒);字符串(JDBC兼容的java.sql.Timestamp格式,YYYY-MM-DD hh:mm:ss:fffffffff)

如果一个表的表结构中有3列,而实际的数据文件中每行记录有5列,那么在hive中最后两列会被省略掉

CSV:Comma-Separated Values,逗号分隔值

TSV:Tab-Separated Values,制表符分隔值

hive中 默认的行分隔符和字段分隔符

\n         文本文件中每行是一条记录

^A(\001)   用于分隔字段,\001是^A的八进制数

^B(\002)   用于分隔array或struct中的元素,或者作为map中每对key/value之间的分隔符

^C(\003)   用于分隔map中每对key/value中的key和value

在创建表结构时,如果使用默认的分隔符,就不必声明,否则,需要显式地声明

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\001'

COLLECTION ITEMS TERMINATED BY '\002'

MAP KEYS TERMINATED BY '\003'

LINES TERMINATED BY '\n'

STORED AS TEXTFILE;

写时模式:数据在写入数据库时对模式进行检查,传统数据库都是写时模式;

读时模式:在查询阶段做数据验证,hive使用此模式;

对于hive表结构和文件不匹配的情况,hive会尽量做适配:

    文件中字段数量少于表字段数量,字段值就用null表示

    文件中字段数量多余表字段数量,文件中多余的字段自动截取

    表字段是数值型,文件中字段值有非数值型的字符串,字段值用null表示

--------------------------

微信公众号:IT人成长关注

大数据技术QQ群:485681776