首页 > 学院 > 操作系统 > 正文

hive[3] 数据类型和文件格式

2024-06-28 13:22:33
字体:
来源:转载
供稿:网友
hive[3] 数据类型和文件格式Hive 支持关系型数据库中的大多数据基本数据类型,同时也支持3种集合类型;3.1 Hive 的基本数据类型支持多种不同他度的整形和浮点型数据类型,具体如下(全都是保留字):tinyint 1byte 有符号整数smalint 2byte有符号号数int 4byte有符号号数bigint 8byte有符号号数boolean 布尔类型, true 或者 falsefloat 单精度浮点数double 双精度浮点数string 字符串timpstamp 整数,浮点数或字符串binary 字节数组需要注意的是:这些都是java 中的接口的实现,因此这些类型的具体行为细节和java中对应的类型是完全一致的;如果用户在查询中将一个 float 类型列和一个 double 类型的列作对经,Hive 会隐式的将类型转换为两个类型中较大的那个类型;cast (s AS INT) 将 s 转换成 int 类型3.2 集合数据类型Hive 中的列支持使用 struct、map、array 集合数据类型,例:STRUCT 列类型为struct{first STRING,last STRING} 如: struct('john','Doe')MAP 是一组键值对集合 字段名[last]获取值 如:map('first','Join','last','Doe')ARRAY是具有相关同类型和名称的变量的集合['John','Doe'] 如:Array(['John','Doe'])例如:员工关系表CREATE TABLE employees(name STRING, --名称salary float, --薪水subordinates array<string>, --下属员工deductions map<string,float>, --发薪水时从工工资中扣除掉的内容(如:税收 ,社保,公积金等)address struct<street:string,city:string,stat:string,zip:int> --员工家庭地址)3.3 文本文件数据编码以逗号分隔值(CSV)或以制表符分隔值(TSV)文件;缺点,就是文件中那些不需要作为分隔符处理的逗号或者制表符要小心使用;Hive 中默认的记录和字段分隔符:/n 文本文件的换行符^A 分隔字段(列),在 CREATE TABLE 语句中可以使用八进制编码(/001)表示^B 分隔 ARRAY 或者 STRUCT 中的元素,或用于 MAP 中键值对之间的分隔,使用八进制编码(/002)表示^C 用于 MAP 中键和值之间的分隔,使用八进制编码(/003)表示也可以不使用这些默认的分隔符,而指定其他的分隔符,例如:CREATE TABLE employees( name STRING, salary FLOAT, subordinates ARRAY(STRING), deductions MAP(STRING,FLOAT), address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT>)ROW FORMAT DELIMITED --必须写在下面的子句之前(stored as 除外)FILEDS TERMINATED BY '/001' --Hive 将使用 ^A 做为列分隔符COLLECTION ITEMS TERMINATED BY '/002' --表明Hive 将使用 ^B 做为集合元素间分隔符MAP KEYS TERMINATED BY '/003' --表明Hive 将使用 ^C 做为 MAP 的键值之间的分隔符LINES TERMINATED BY '/n' --下面这两句表明不需要ROW FORMAT DELIMITED 做关键字STORED AS TEXTFILE; --此句很少被用到注意:到目录前为止 Hive 对于 linesterminated by 公支持 /n 也就是说行与行之间分隔符只能是 /nHive 还支持其他类型的文本格式,15节课再细说定义一个表是按照逗号来分隔:create table some_data(fistr float, second float, third float) row format delimited fileds terminated by ',';3.4 读时模式Hive 在数据写入数据库时不会对对模式进行检查,也不会在数据加载时进行验证,而是在查询时进行,也就是读取时模式;如果模式和文件内容并不匹配,每行记录中的字段个数少于对应的模式中定义的字段个数的话,那么用户将会看到查询结果中有很多 null 值 ;如果某些字段是数值型的,但Hive 在读取的时候发现存在非数值型的字符串值的话,将返回 null 值,除此情况 Hive 会将极力尝试尽可能地将错误恢复过来;
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表