Example usage for java.io Reader.Options clone

List of usage examples for java.io Reader.Options clone

Introduction

In this page you can find the example usage for java.io Reader.Options clone.

Prototype

@HotSpotIntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;

Source Link

Document

Creates and returns a copy of this object.

Usage

From source file:com.blm.orc.OrcRawRecordMerger.java

/**
 * Convert from the row include/sarg/columnNames to the event equivalent
 * for the underlying file.// w  w w.  jav a2  s  .c  o m
 * @param options options for the row reader
 * @return a cloned options object that is modified for the event reader
 */
static Reader.Options createEventOptions(Reader.Options options) {
    Reader.Options result = options.clone();
    result.range(options.getOffset(), Long.MAX_VALUE);
    // slide the columns down by 6 for the include array
    if (options.getInclude() != null) {
        boolean[] orig = options.getInclude();
        // we always need the base row
        orig[0] = true;
        boolean[] include = new boolean[orig.length + OrcRecordUpdater.FIELDS];
        Arrays.fill(include, 0, OrcRecordUpdater.FIELDS, true);
        for (int i = 0; i < orig.length; ++i) {
            include[i + OrcRecordUpdater.FIELDS] = orig[i];
        }
        result.include(include);
    }

    // slide the column names down by 6 for the name array
    if (options.getColumnNames() != null) {
        String[] orig = options.getColumnNames();
        String[] cols = new String[orig.length + OrcRecordUpdater.FIELDS];
        for (int i = 0; i < orig.length; ++i) {
            cols[i + OrcRecordUpdater.FIELDS] = orig[i];
        }
        result.searchArgument(options.getSearchArgument(), cols);
    }
    return result;
}

From source file:com.blm.orc.OrcRawRecordMerger.java

/**
 * Create a reader that merge sorts the ACID events together.
 * @param conf the configuration/* w  w  w  .  j  a v a  2s. c  o  m*/
 * @param collapseEvents should the events on the same row be collapsed
 * @param isOriginal is the base file a pre-acid file
 * @param bucket the bucket we are reading
 * @param options the options to read with
 * @param deltaDirectory the list of delta directories to include
 * @throws IOException
 */
OrcRawRecordMerger(Configuration conf, boolean collapseEvents, Reader reader, boolean isOriginal, int bucket,
        ValidTxnList validTxnList, Reader.Options options, Path[] deltaDirectory) throws IOException {
    this.conf = conf;
    this.collapse = collapseEvents;
    this.offset = options.getOffset();
    this.length = options.getLength();
    this.validTxnList = validTxnList;
    // modify the optins to reflect the event instead of the base row
    Reader.Options eventOptions = createEventOptions(options);
    if (reader == null) {
        baseReader = null;
    } else {

        // find the min/max based on the offset and length
        if (isOriginal) {
            discoverOriginalKeyBounds(reader, bucket, options);
        } else {
            discoverKeyBounds(reader, options);
        }
        LOG.info("min key = " + minKey + ", max key = " + maxKey);
        // use the min/max instead of the byte range
        ReaderPair pair;
        ReaderKey key = new ReaderKey();
        if (isOriginal) {
            options = options.clone();
            options.range(options.getOffset(), Long.MAX_VALUE);
            pair = new OriginalReaderPair(key, reader, bucket, minKey, maxKey, options);
        } else {
            pair = new ReaderPair(key, reader, bucket, minKey, maxKey, eventOptions);
        }

        // if there is at least one record, put it in the map
        if (pair.nextRecord != null) {
            readers.put(key, pair);
        }
        baseReader = pair.recordReader;
    }

    // we always want to read all of the deltas
    eventOptions.range(0, Long.MAX_VALUE);
    // Turn off the sarg before pushing it to delta.  We never want to push a sarg to a delta as
    // it can produce wrong results (if the latest valid version of the record is filtered out by
    // the sarg) or ArrayOutOfBounds errors (when the sarg is applied to a delete record)
    eventOptions.searchArgument(null, null);
    if (deltaDirectory != null) {
        for (Path delta : deltaDirectory) {
            ReaderKey key = new ReaderKey();
            Path deltaFile = AcidUtils.createBucketFile(delta, bucket);
            FileSystem fs = deltaFile.getFileSystem(conf);
            long length = getLastFlushLength(fs, deltaFile);
            if (fs.exists(deltaFile) && length != -1) {
                Reader deltaReader = OrcFile.createReader(deltaFile,
                        OrcFile.readerOptions(conf).maxLength(length));
                ReaderPair deltaPair = new ReaderPair(key, deltaReader, bucket, minKey, maxKey, eventOptions);
                if (deltaPair.nextRecord != null) {
                    readers.put(key, deltaPair);
                }
            }
        }
    }

    // get the first record
    Map.Entry<ReaderKey, ReaderPair> entry = readers.pollFirstEntry();
    if (entry == null) {
        columns = 0;
        primary = null;
    } else {
        primary = entry.getValue();
        if (readers.isEmpty()) {
            secondaryKey = null;
        } else {
            secondaryKey = readers.firstKey();
        }
        // get the number of columns in the user's rows
        columns = primary.getColumns();
    }
}