Class LobRef<DATATYPE,​CONTAINERTYPE,​ACCESSORTYPE>

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, org.apache.hadoop.io.Writable
    Direct Known Subclasses:
    BlobRef, ClobRef

    public abstract class LobRef<DATATYPE,​CONTAINERTYPE,​ACCESSORTYPE>
    extends java.lang.Object
    implements java.io.Closeable, org.apache.hadoop.io.Writable
    Abstract base class that holds a reference to a Blob or a Clob. DATATYPE is the type being held (e.g., a byte array). CONTAINERTYPE is the type used to hold this data (e.g., BytesWritable). ACCESSORTYPE is the type used to access this data in a streaming fashion (either an InputStream or a Reader).
    • Field Detail

      • LOG

        public static final org.apache.commons.logging.Log LOG
      • EXTERNAL_MATCHER

        protected static final java.lang.ThreadLocal<java.util.regex.Matcher> EXTERNAL_MATCHER
    • Constructor Detail

      • LobRef

        protected LobRef()
      • LobRef

        protected LobRef​(java.lang.String file,
                         long offset,
                         long length)
    • Method Detail

      • getDataObj

        protected CONTAINERTYPE getDataObj()
        Internal API to retrieve the data object.
      • setDataObj

        protected void setDataObj​(CONTAINERTYPE data)
        Internal API to set the data object.
      • clone

        public java.lang.Object clone()
                               throws java.lang.CloneNotSupportedException
        Overrides:
        clone in class java.lang.Object
        Throws:
        java.lang.CloneNotSupportedException
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        Overrides:
        finalize in class java.lang.Object
        Throws:
        java.lang.Throwable
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • isExternal

        public boolean isExternal()
        Returns:
        true if the LOB data is in an external file; false if it materialized inline.
      • getDataStream

        public ACCESSORTYPE getDataStream​(org.apache.hadoop.mapreduce.Mapper.Context mapContext)
                                   throws java.io.IOException
        Convenience method to access #getDataStream(Configuration, Path) from within a map task that read this LobRef from a file-based InputSplit.
        Parameters:
        mapContext - the Mapper.Context instance that encapsulates the current map task.
        Returns:
        an object that lazily streams the record to the client.
        Throws:
        java.lang.IllegalArgumentException - if it cannot find the source path for this LOB based on the MapContext.
        java.io.IOException - if it could not read the LOB from external storage.
      • getDataStream

        public ACCESSORTYPE getDataStream​(org.apache.hadoop.conf.Configuration conf,
                                          org.apache.hadoop.fs.Path basePath)
                                   throws java.io.IOException
        Get access to the LOB data itself. This method returns a lazy reader of the LOB data, accessing the filesystem for external LOB storage as necessary.
        Parameters:
        conf - the Configuration used to access the filesystem
        basePath - the base directory where the table records are stored.
        Returns:
        an object that lazily streams the record to the client.
        Throws:
        java.io.IOException - if it could not read the LOB from external storage.
      • getExternalSource

        protected abstract ACCESSORTYPE getExternalSource​(org.apache.sqoop.io.LobFile.Reader reader)
                                                   throws java.io.IOException
        Using the LobFile reader, get an accessor InputStream or Reader to the underlying data.
        Throws:
        java.io.IOException
      • getInternalSource

        protected abstract ACCESSORTYPE getInternalSource​(CONTAINERTYPE data)
        Wrap the materialized data in an InputStream or Reader.
      • getInternalData

        protected abstract DATATYPE getInternalData​(CONTAINERTYPE data)
        Returns:
        the materialized data itself.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • readFields

        public void readFields​(java.io.DataInput in)
                        throws java.io.IOException
        Specified by:
        readFields in interface org.apache.hadoop.io.Writable
        Throws:
        java.io.IOException
      • readFieldsInternal

        protected abstract void readFieldsInternal​(java.io.DataInput in)
                                            throws java.io.IOException
        Perform the readFields() operation on a fully-materializable record.
        Parameters:
        in - the DataInput to deserialize from.
        Throws:
        java.io.IOException
      • write

        public void write​(java.io.DataOutput out)
                   throws java.io.IOException
        Specified by:
        write in interface org.apache.hadoop.io.Writable
        Throws:
        java.io.IOException
      • writeInternal

        protected abstract void writeInternal​(java.io.DataOutput out)
                                       throws java.io.IOException
        Perform the write() operation on a fully-materializable record.
        Parameters:
        out - the DataOutput to deserialize to.
        Throws:
        java.io.IOException