@Override
  public Iterator<HCatRecord> read() throws HCatException {

    HCatInputFormat inpFmt = new HCatInputFormat();
    RecordReader<WritableComparable, HCatRecord> rr;
    try {
      TaskAttemptContext cntxt =
          ShimLoader.getHadoopShims()
              .getHCatShim()
              .createTaskAttemptContext(conf, new TaskAttemptID());
      rr = inpFmt.createRecordReader(split, cntxt);
      rr.initialize(split, cntxt);
    } catch (IOException e) {
      throw new HCatException(ErrorType.ERROR_NOT_INITIALIZED, e);
    } catch (InterruptedException e) {
      throw new HCatException(ErrorType.ERROR_NOT_INITIALIZED, e);
    }
    return new HCatRecordItr(rr);
  }
 @Override
 public ReaderContext prepareRead() throws HCatException {
   try {
     Job job = new Job(conf);
     HCatInputFormat hcif =
         HCatInputFormat.setInput(job, re.getDbName(), re.getTableName(), re.getFilterString());
     ReaderContextImpl cntxt = new ReaderContextImpl();
     cntxt.setInputSplits(
         hcif.getSplits(
             ShimLoader.getHadoopShims()
                 .getHCatShim()
                 .createJobContext(job.getConfiguration(), null)));
     cntxt.setConf(job.getConfiguration());
     return cntxt;
   } catch (IOException e) {
     throw new HCatException(ErrorType.ERROR_NOT_INITIALIZED, e);
   } catch (InterruptedException e) {
     throw new HCatException(ErrorType.ERROR_NOT_INITIALIZED, e);
   }
 }