Iterating over Data Stored in an IMDC with the API - Aster Execution Engine

Teradata Aster® Developer Guide

Product
Aster Execution Engine
Release Number
7.00.02
Published
July 2017
Language
English (United States)
Last Update
2018-04-13
dita:mapPath
xnl1494366523182.ditamap
dita:ditavalPath
Generic_no_ie_no_tempfilter.ditaval
dita:id
ffu1489104705746
lifecycle
previous
Product Category
Software

When an IMDC is in the iterable state, you can iterate over its data.

You cannot iterate over IMDC data during contract negotiation.
  • Iterate over the data in an iterable IMDC:
    import java.util.List;
    import java.util.ArrayList;
    import com.asterdata.ncluster.sqlmr.RowFunction;
    import com.asterdata.ncluster.sqlmr.data.RowEmitter;
    import com.asterdata.ncluster.sqlmr.data.RowIterator;
    import com.asterdata.ncluster.sqlmr.InMemoryDataCollectionRepository;
    import com.asterdata.ncluster.sqlmr.data.InMemoryDataCollection;
    import com.asterdata.ncluster.sqlmr.data.InMemoryDataCollectionRowIterator;
    import com.asterdata.ncluster.sqlmr.data.SqlType;
    import com.asterdata.ncluster.sqlmr.data.RowView;
    import com.asterdata.ncluster.sqlmr.data.RowBuilder;
      
    ...
      public void drainOutputRows(RowEmitter outputEmitter)
      {
        ...
        //Get handle to IMDC
        InMemoryDataCollection IMDC_name =
          InMemoryDataCollectionRepository.getInMemoryDataCollection(
            "IMDC_name",
            TaskInfo);
            
        //Get iterator to iterate over rows stored in IMDC
        InMemoryDataCollectionRowIterator IMDC_rowIterator_var =
          myIMDC.newRowIterator();
            
          while( IMDC_rowIterator_var.advanceToNextRow() )
          {
             outputEmitter.addInt(IMDC_rowIterator_var.gettype_0At(0));
             outputEmitter.addDouble(IMDC_rowIterator_var.gettype_1At(1));
             ...
             outputEmitter.addString(IMDC_rowIterator_var.gettype_nAt(n));
             outputEmitter.emitRow();
          }
          ...
       }
    For example, the following code iterates over the rows of an IMDC named myIMDC, which has columns of types integer, double, and var.
    import java.util.List;
    import java.util.ArrayList;
    import com.asterdata.ncluster.sqlmr.RowFunction;
    import com.asterdata.ncluster.sqlmr.data.RowEmitter;
    import com.asterdata.ncluster.sqlmr.data.RowIterator;
    import com.asterdata.ncluster.sqlmr.InMemoryDataCollectionRepository;
    import com.asterdata.ncluster.sqlmr.data.InMemoryDataCollection;
    import com.asterdata.ncluster.sqlmr.data.InMemoryDataCollectionRowIterator;
    import com.asterdata.ncluster.sqlmr.data.SqlType;
    import com.asterdata.ncluster.sqlmr.data.RowView;
    import com.asterdata.ncluster.sqlmr.data.RowBuilder;
      
    ...
      public void drainOutputRows(RowEmitter outputEmitter)
      {
        ...
        //Get handle to IMDC
        InMemoryDataCollection myIMDC =
          InMemoryDataCollectionRepository.getInMemoryDataCollection(
            "myIMDC",
            TaskInfo);
            
        //Get iterator to iterate over rows stored in IMDC
        InMemoryDataCollectionRowIterator myIMDC_rowIterator =
          myIMDC.newRowIterator();
            
          while( myIMDC_rowIterator.advanceToNextRow() )
          {
             outputEmitter.addInt(myIMDC_rowIterator.getIntAt(0));
             outputEmitter.addDouble(myIMDC_rowIterator.getDoubleAt(1));
             outputEmitter.addString(myIMDC_rowIterator.getStringAt(2));
             outputEmitter.emitRow();
          }
          ...
       }
    An alternative to getting a handle to the IMDC is to use a variable of the type RowIterator, because InMemoryDataCollectionRowIterator extends the RowIterator interface.
The row iterator remains open until you close it. To close the row iterator, call the method RowIterator::endIteration.