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

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

  
  = 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).
+  * 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 =
  

Reply via email to