private static RecordReader getLlapRecordReader(Path deleteDeltaFile, org.apache.orc.Reader.Options readerOptions, JobConf conf, CacheTag tag, Object fileId)
          throws IOException {
        JobConf c = new JobConf(conf);
        // DeleteReaderValue will actually read the ACID parts itself, thus as far as LLAP concerned this delete
        // delta should be deemed as an 'original' ORC file.
        HiveConf.setBoolVar(c, ConfVars.HIVE_TRANSACTIONAL_TABLE_SCAN, false);

        // Jobconf may contain predicate pushdown for the original table, this is not applicable for delete delta
        c.unset(TableScanDesc.FILTER_EXPR_CONF_STR);
        c.unset(ConvertAstToSearchArg.SARG_PUSHDOWN);

        // Schema info in this job conf relates to the table schema without ACID cols. Unsetting them forces LLAP to
        // use the file schema instead which is the correct way to handle delete delta files, as there's no such
        // thing as logical schema for them.
        HiveConf.setBoolVar(c, ConfVars.HIVE_SCHEMA_EVOLUTION, false);
        c.unset(serdeConstants.LIST_COLUMNS);
        c.unset(serdeConstants.LIST_COLUMN_TYPES);

        // Apply delete delta SARG if any
        SearchArgument deleteDeltaSarg = readerOptions.getSearchArgument();
        if (deleteDeltaSarg != null) {
          c.set(ConvertAstToSearchArg.SARG_PUSHDOWN, sargToKryo(deleteDeltaSarg));
        }
        return wrapLlapVectorizedRecordReader(
            LlapProxy.getIo().llapVectorizedOrcReaderForPath(fileId, deleteDeltaFile, tag,
            DELETE_DELTA_INCLUDE_COLUMNS, c, 0L, Long.MAX_VALUE, null)
        );
      }
Whenever we are reading a batch, we must ensure that all the records in the batch
have the same bucket id as the bucket id of the split. If not, throw exception.
ql/src/java/org/apache/hadoop/hive/ql/io/orc/VectorizedOrcAcidRowBatchReader.java