2.数据类型和文件格式
基本数据类型
hive支持不同长度的整形和浮点型数据类型,支持布尔类型,也支持无长度限制的字符串类型。
Hive的属性不支持定长的记录,关系型数据库支持定长的记录更适合创建索引,数据扫描等。
TIMESTAMP可以是整数,是距离Unix新纪元时间的秒数,也可以浮点数,也可以是字符串,格式为
YYYY-MM-DD hh:mm:ss.ffffffff
,表示的为UTC时间,Hive提供时区转换函数,to_utc_timestamp和from_utc_timestamp函数BINARY属性类型和mysql中的VARBINARY类似,但其的BLOB数据类型不同,因为BINRAY的列是存储在记录中,而BLOB则不同。BINARY可以记录中包含任意字节,这样可以防止Hive尝试将其作为数字,字符串等进行解析。
cast(s AS int)
将字符串转换为整数类型。
集合数据类型
hive支持struct,map和array集合数据类型。
传统数据库一般不支持结构化数据,不遵循标准格式的一个好处就是可以提供更高吞吐量的数据。
struct一旦定义好结构就无法改变,类似于java的一个domain,并且struct支持多种结构。
文本文件数据编码
Hive中默认的记录和字段分隔符
分隔符 | 描述 |
---|---|
对于文本文件来说,每行都是一条记录,因此换行符可以分割记录 | |
^A | 对于分割字段(列),在Create table语句中可以使用八进制编码\001表示 |
^B | 用于分隔ARRARY或者STRUCT中的元素,或用于MAP中键-值对之间的分隔。在CREATE TABLE 语句中可以使用八进制编码\002表示 |
^C | 用于MAP中键和值之间的分隔。在CREATE TABLE 语句中可以使用八进制编码\003表示 |
指定其他分隔符
读时模式
当用户向传统数据库中写入数据时,不管采用何种装载外部数据方式,还是采用将一个查询的输出结果写入方式,或者使用UPDATE语句等等,数据库对于存储都具有完全的控制力。传统数据库是写时模式,即数据在写入时对模式进行检查 。
Hive底层存储没有这样的限制,对于Hive要查询的数据有很多方式对其进行创建、修改、甚至损坏。Hive不会再数据加载时验证,而是在查询时进行,这就是读时模式 。
Hive对此做的非常好, 因为其可以读取这些数据。如果每行记录中的字段个数少于对应的模式中定义的字段个数的话,那么用户将会看到查询结果中有很多的null值 。如果某些字段是数值型的,但是Hive在读取时发现存在非数值型的字符串值的话,那么对于那些字段将会返回null值。除此之外的其他情况下,Hive都极力尝试尽可能地将各种错误恢复过来。
最后更新于