Hive 读文件机制
首先调用InputFormat(默认TextFormat),返回一条一条的键值对记录(默认是一行对一行键值对)。然后用Serde(默认为LazySimpleSerde)的Deserializer,将一条记录的value根据分隔符切分为各个字段。
HDFS files | InputFileFormat | <key,value> | Deserizlizer | Row object |
---|
hive 写文件机制
将行写入文件时,首先调用Serde(默认LazySimpleSerde)的Serializer将对象转换成字节序列,然后调用OutputFormat将数据写入HDFS文件中。
Row object | Serializer | <key,value> | OutputFormat | HDFS files |
---|
Serde --> Serializer、Deserializer的简称,用于序列化和反序列化
- 序列化:将对象转换为字节码
- 反序列化:将字节序列转化为对象
hive 使用 Serde (包括FileFormat) 读取和写入表 行对象 ;但是key会被忽略,基本上行对象存储在 value 中
语法:
create [temporary] [external] table [if not exists] [database.name] table_name
[data_name data_type,......]
[partitioned by(col_name data_type,......)]
[clustered by(COLUMN_NAME......) [sorted by (col_name desc)] into num_buckets BUCKETS]
[row format delimited [fields terminated by ''] [collection items terminated by ''] [map keys terminated by ''] [lines terminated by ''] | Serde serde_name WITH SERDEPROPERTIES(property_name=property_value,......)]
[sorted as file_format]
[location hdfs_path]
[tblproperties(properties_name=properties_value,......)];
tips
row format为语法关键字,delimited和serde二选一,如果**使用delimited表示使用默认的LazySimpleSerde类来处理数据
对于特殊的文件格式使用row format serde serde_name指定其他的Serde类来处理数据,支持用户自定义Serde类