Hive点滴 – 数据类型

1. 数值整型

TINYINT     单字节有符号整型变量, 范围-128 – 127
SMALLINT    两字节有符号整型变量, 范围-32768 – 32767
INT         四字节有符号整型变量, 范围-210^9-210^9
BIGINT      八字节有符号整型变量, 范围-92^18-92^18
整型常量默认为INT类型,如果需要指定为某个其他整型常量,需要指定后缀。

Type Postfix Example
BIGINT L 100L
SMALLINT S 100S
TINYINT Y 100Y


例如:
hive> create table t0 (l bigint, s smallint, y tinyint) row format delimited fields terminated by ‘ ‘ stored as textfile;
OK
hive> load data local inpath “test.txt” into table t0;
OK
hive> select * from t0;
OK
10000000000     256     127
10000000001     256     127
……
hive> select l from t0 where l=10000000000L;
OK
10000000000
……

2. 数值浮点型

FLOAT           四字节单精度浮点类型
DOUBLE        八字节双精度浮点类型

3. 十进制类型

DECIMAL 0.11版本引入,提供38位的十进制精度。在0.13版可以自定义精度和小数位数。

4. 时间类型

TIMESTAMP    从0.8以后开始提供
DATE     从0.12以后开始提供
关于时间操作,Hive 提供了一系列相关函数,参考文档:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-Strings

hive> select to_date(‘2011-12-08 10:03:01′) from t0 limit 1;
2011-12-08
Time taken: 2.311 seconds, Fetched: 1 row(s)
hive> select from_unixtime(1395990000) from t0 limit 1;
OK
2014-03-28 00:00:00
Time taken: 2.095 seconds, Fetched: 1 row(s)
–当前时间戳,等同于Oracle中的sysdate
hive> select from_unixtime(unix_timestamp()) from t0 limit 1;
OK
2014-03-28 06:08:41
Time taken: 10.099 seconds, Fetched: 1 row(s)
–也可以支持日期计算,例如
hive> select date_sub(from_unixtime(unix_timestamp()),5) from t0 limit 1;
2014-03-26
Time taken: 10.245 seconds, Fetched: 1 row(s)

5. 字符串类型

STRING    STRING常量可以以单引号或者双引号来表示。Hive支持C的转移字符。
VARCHAR    和Oracle的VARCHAR类似,从0.12起开始提供,在定义表时需要指定一个长度(从1到65355),表示该VARCHAR类型的最大值。
如果STRING的值转换成VARCHAR值时超过了其最大长度,STRING会被截断。
CHAR和Oracle中的CHAR类似,从0.13起开始提供,在定义时同样需要定义一个长度。之后写入的都是定长的字符串,如果输入的字符串长度不够,则以空格补充。

6. 其他类型

BOOLEAN    布尔型,true or false
BINARY    二进制类型. BINARY适用于用原始数据形式保存的情形,而避免解析成String、Int等类型。和Oracle中的BLOB不同的是,BINARY类型在行内存储。
 

7. 复合类型

符合类型在关系数据库中不曾提供,因为这些类型破坏了关系数据库的范式规则。
arrays: ARRAY<data_type> 定义数组需要指定数组的类型,数组中每一个元素都有相同的类型。访问数组中的元素使用下标访问。
maps: MAP<primitive_type, data_type> 一组键值对组成的元组,其中的值可以通过[‘KEY’]来访问。例如name的内容是map(‘first’, ‘John’, ‘last’, ‘Doe’) ,那么第一个元组是name[‘first’]。
structs: STRUCT<col_name : data_type [COMMENT col_comment], …> 类似于C语言的struct。struct内的元素可以通过”.”来访问。例如STRUCT {first STRING; last STRING}, first则可以用name.frist来访问。
union: UNIONTYPE<data_type, data_type, …> 从0.7.0开始提供。UNION类型可以如下定义,可以包含若干个任意其他类型:
CREATE TABLE union_test(foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>);

8. 表的文本编码分割符

数据类型的文本编码:
hive的数据文件使用几种默认分割符来分割:
记录分割符“n”    分割记录,即每一行就是一个记录
域分割符 “^A”或八进制01    分割各个字段
集合元素类型分割符 “^B”或八进制02    分割struct、分割array和map中的key-value pairs
map键值分割符 “^C”或八进制03    分割map中的键和值
例如上面的表中的数据可能是:

所以CSV文件的外部表定义可以是:ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,';

^^

Posted in BigData, HBase|Hive.