序列化是將對象轉換為字節序列的過程。
序列化是將字節序列還原到對象的過程。
對象的序列化主要有兩個目的:對象的持久化,即將對象轉換成字節序列保存在文件中;對象數據的網絡傳輸。
除了以上兩點,hive的序列化還包括:hive的反序列化是將key/value反序列化為Hive表各列的值。Hive可以輕松地將數據加載到表中,無需數據轉換,在處理海量數據時可以節省大量時間。
SerDe解釋了hive如何處理壹條記錄,包括兩個函數:Serialize/deserize。Serialize將hive使用的java對象轉換為可以寫入hdfs的字節序列,或者其他系統可以識別的流文件。Deserilize將字符串或二進制流轉換為hive可以識別的java對象。例如,select語句將使用Serialize對象來解析hdfs數據;Insert語句會使用Deserilize,數據會寫入hdfs系統,需要序列化。
讀取hdfs文件時,關鍵部分會被忽略。寫hdfs文件時,鍵始終是壹個常量,壹般行數據存儲在值中。
創建表時可以使用用戶定義的Serde或本機Serde,如果未指定ROW FORMAT或指定了RowFormat Defined,則使用本機Serde。Hive已經實現了許多定制的Serde,這在我們之前介紹stored時也涉及到了:
使用正則化來序列化行數據,如下例所示:
以json格式保存文本文件。
文本文件以CSV/TSV格式存儲。
行格式
' org . Apache . Hadoop . hive . serde 2 . opencsvserde '
存儲為文本文件
以下示例創建壹個tsv文件。默認情況下,它是csv文件的分隔符。
Hive的CSVSerde是基於csv-serde實現的。
最後,附上2009年8月臉書Hive用戶會議對serde的解釋。