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=7&rev2=8

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

  = 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).
+ object handed to the udf is already the right primitive object like 
LongWritable/IntWritable etc).
  
  = Output processing =
  

Reply via email to