古詩詞大全網 - 古詩大全 - HIVE Row Formats和SerDe

HIVE Row Formats和SerDe

Serde是 Serializer/Deserializer的簡寫。hive使用Serde進行行對象的序列與反序列化。

序列化是對象轉換為字節序列的過程。

序列化是字節序列恢復為對象的過程。

對象的序列化主要有兩種用途:對象的持久化,即把對象轉換成字節序列後保存到文件中;對象數據的網絡傳送。

除了上面兩點, hive的序列化的作用還包括:Hive的反序列化是對key/value反序列化成hive table的每個列的值。Hive可以方便的將數據加載到表中而不需要對數據進行轉換,這樣在處理海量數據時可以節省大量的時間。

SerDe說明hive如何去處理壹條記錄,包括Serialize/Deserilize兩個功能, Serialize把hive使用的java object轉換成能寫入hdfs的字節序列,或者其他系統能識別的流文件。Deserilize把字符串或者二進制流轉換成hive能識別的java object對象。比如:select語句會用到Serialize對象, 把hdfs數據解析出來;insert語句會使用Deserilize,數據寫入hdfs系統,需要把數據序列化。

當是讀取hdfs文件時key部分將會被忽略,在寫入hdfs時key總是壹個常量,壹般的行的數據是存儲在value中的。

妳可以創建表時使用用戶 自定義的Serde或者native Serde 如果 ROW FORMAT沒有指定或者指定了 ROW FORMAT DELIMITED就會使用native Serde。 hive已經實現了許多自定義的Serde,之前我們在介紹stored時也涉及到:

使用正則來序列化行數據,如下例子:

按照json格式存儲text文件

按照 CSV / TSV格式來存儲text文件。

ROW FORMAT SERDE

‘org.apache.hadoop.hive.serde2.OpenCSVSerde’

STORED AS TEXTFILE

如下例子創建tsv文件,默認是csv文件的分隔符

hive的CSVSerde基於 csv-serde 實現。

最後附上 Hive User Meeting August 2009 Facebook 對serde的講解。