Hive 支持 关系数据库 中的大多数基本的数据类型,同时也支持在关系数据库中很少出现的三种 **数据集合** 类型。
和大多数数据库相比,Hive具有一个独特的功能,就是对数据在文件中的编码方式具有相当大的灵活性,大多数据库对数据具有完全控制,也包括
对数据什么周期的控制,Hive将这些方面的控制权交给用户,以便更加容易的使用各种各样的工具来管理和处理数据。
基本数据类型
所有这些数据类型都是对Java中的接口实现,因此这些类型具体行为细节和Java中对应的类型完全一致.
HDFS 文本文件数据编码
综合示例
CREATE TABLE IF NOT EXISTS mydb.employees ( name STRING COMMENT 'Employee name', salary FLOAT COMMENT 'Employee salary', subordinates ARRAY<STRING> COMMENT ' Names of subordinates', deducations MAP<STRING,FLOAT> COMMENT ' Keys are deducations names , Values are percentags', address STRUCT<street:STRING,city:STRING,state:STRING,zip:INT> COMMENT 'Home Address' ) COMMENT 'the table of empoyee' ROW FORMAT DELIMITED FIELDS TERMINATED BY '01' COLLECTION ITEMS TERMINATED BY '02' MAP KEYS TERMINATED BY '03' LINES TERMINATED BY 'n' STORED AS TEXTFILE LOCATION '/user/hive/warehouse/mydb.db/employees'; ROW FORMAT DELIMITED : 这组关键字必须些在其他子句之前(除STOREED AS .... 子句) FIELDS TERMINATED BY : 指定 列 分隔符,使用默认分隔符 ^A COLLECTION ITEMS TERMINATED BY : 指定 集合 元素间的分割符,使用默认分隔符 ^B MAP KEYS TERMINATED BY : 指定MAP中 键和值之间的分离,使用默认分隔符 ^C LINES TERMINATED BY : 指定 行 分隔符,使用默认的换行符 n STORED AS TEXTFILE : 指定Hive表的存储格式 LOCATION : 指定数据文件位置
Hive表存储格式
有4种主要的存储格式,使用依据为数据类型和分析需要。但是在绝大数情况下,使用ORC或Parquet,它们为大多数数据类型提供了最佳的压缩和速度优势。
表类型
在Hive中包括2种类型的表,内部表和外部表。
内部表 创建方式,常规的 CREATE TABLE 语句。对于内部表,由Hive完全控制,如删除了内部表,在Hive的表定义和对应的表数据都会被删除。
外部表 创建方法, CREATE EXTERNAL TABLE IF NOT EXISTS Names_text ,关键字为 EXTRENAL 。对于外部表不由Hive控制,对于外部表只是使用表 元数据 信息而进入到原始文本数据中。 如果删除了外部表,只有表的元数据信息被删除,实际的数据还是会被保留。数据是驻留在Hive之外的,或者是需要保留原始数据的表。