テーブルをクエリするとき、SerDeはファイル内のバイトからデータの行を操作するためにHiveによって内部的に使用されるオブジェクトにデータの行を逆シリアル化します。 INSERTまたはCTAS(441ページの「データのインポート」を参照)を実行すると、テーブルのSerDeはデータ行のHiveの内部表現を出力ファイルに書き込まれるバイトにシリアル化します。
回答
SerDeの書き方の詳細については、こちらをお読みください post
この側面では、Hiveをある種のデータベースエンジンと見なすことができます。このエンジンは、recordsから構築されたテーブルで動作しています。
Hive(およびその他のデータベース)を独自の内部形式で動作させる場合、問題はありません。
Hiveに独自のファイルをテーブル(外部テーブル)として処理させたい場合は、ファイル内のデータをレコードに変換する方法を彼に知らせる必要があります。これはまさにSerDeの役割です。これは、Hiveがデータの読み取り/書き込みを行えるようにするプラグインとして見ることができます。
たとえば、CSVで作業したいとします。これがCSV_Serdeの例です https://github.com/ogrodnek/csv-serde/blob/master/src/main/Java/com/bizo/Hive/serde/csv/CSVSerde.Java メソッドserializeはデータを読み取り、CSVであると想定してフィールドに切り刻みます
メソッドdeserializeはレコードを取得し、CSVとしてフォーマットします。
Hiveは、(1)複素数データ型(struct、array、unions)(2)SerDeを使用して、半構造化データと非構造化データも分析できます。
SerDeインターフェースを使用すると、レコードの処理方法についてHiveに指示できます。 SerializerはHiveが取り組んでいるJavaオブジェクトを取得し、それをHiveが格納できるものに変換し、Deserializerはレコードのバイナリ表現を取得してJava = Hiveが操作できるオブジェクト。
上記には、シリアル化と逆シリアル化の概念があります。シリアル化は書き込み時に行われ、構造化データはストレージ用にビット/バイトストリームにシリアル化されます。読み取り時に、データはビット/バイトストレージ形式からリーダーに必要な構造に逆シリアル化されます。たとえば、Hiveには行や列のような構造が必要ですが、hdfsはデータをビット/バイトブロックで格納するため、書き込み時にシリアル化し、読み取り時に逆シリアル化します。