Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Hadoop Wiki" for change 
notification.

The "SerDe" page has been changed by PradeepKamath.
http://wiki.apache.org/hadoop/SerDe?action=diff&rev1=3&rev2=4

--------------------------------------------------

  
  Hive uses the Serde interface for IO. The interface handles both 
serialization and deserialization and also interpreting the results of 
serialization as individual fields for processing.
  
- == Input processing ==
+ = Input processing =
  
  Hive’s execution engine (referred to as just engine henceforth) first uses 
the configured InputFormat to read in a record of data (the value object 
returned by the RecordReader of the InputFormat). The engine then invokes 
Serde.deserialize() to perform deserialization of the record. There is no real 
binding that the deserialized object returned by this method indeed be a fully 
deserialized one. For instance, in Hive there is a LazyStruct object which is 
used by the LazySimpleSerde to represent the deserialized object. This object 
does not have the bytes deserialized up front but does at the point of access 
of a field. The engine also gets hold of the ObjectInspector to use by invoking 
Serde.getObjectInspector(). This has to be a subclass of structObjectInspector 
since a record representing a row of input data is essentially a struct type. 
The engine passes the deserialized object and the object inspector to all 
operators for their use in order to get the needed data from the record. The 
object inspector knows how to construct individual fields out of a deserialized 
record. For example, StructObjectInspector has a method called 
getStructFieldData() which returns a certain field in the record. This is the 
mechanism to access individual fields. For instance ExprNodeColumnEvaluator 
class which can extract a column from the input row uses this mechanism to get 
the real column object from the serialized row object. This real column object 
in turn can be a complex type (like a struct). To access sub fields in such 
complex typed objects, an operator would use the object inspector associated 
with that field (The top level StructObjectInspector for the row maintains a 
list of field level object inspectors which can be used to interpret individual 
fields). For UDFs the new GenericUDF abstract class provides the 
ObjectInspector associated with the UDF arguments in the initialize() method. 
So the engine first initializes the UDF by calling this method. The UDF can 
then use these ObjectInspectors to interpret complex arguments (for simple 
arguments, the “object” handed to the udf is already the right primitive object 
like LongWritable/IntWritable etc).
  
- == Output processing ==
+ = Output processing =
  
  Output is analogous to input. The engine passes the deserialized Object 
representing a record and the corresponding ObjectInspector to 
Serde.serialize(). In this context serialization means converting the record 
object to an object of the type expected by the OutputFormat which will be used 
to perform the write. To perform this conversion, the serialize() method can 
make use of the passed ObjectInspector to get the individual fields in the 
record in order to convert the record to the appropriate type.
  

Reply via email to