use of com.sap.hadoop.windowing.query2.definition.ColumnDef in project SQLWindowing by hbutani.
the class PTFOperator method setupKeysWrapper.
protected void setupKeysWrapper(ObjectInspector inputOI) throws HiveException {
PartitionDef pDef = RuntimeUtils.getFirstTableFunction(qDef).getWindow().getPartDef();
ArrayList<ColumnDef> cols = pDef.getColumns();
int numCols = cols.size();
ExprNodeEvaluator[] keyFields = new ExprNodeEvaluator[numCols];
ObjectInspector[] keyOIs = new ObjectInspector[numCols];
ObjectInspector[] currentKeyOIs = new ObjectInspector[numCols];
for (int i = 0; i < numCols; i++) {
ColumnDef cDef = cols.get(i);
/*
* Why cannot we just use the ExprNodeEvaluator on the column?
* - because on the reduce-side it is initialized based on the rowOI of the HiveTable
* and not the OI of the ExtractOp ( the parent of this Operator on the reduce-side)
*/
keyFields[i] = ExprNodeEvaluatorFactory.get(cDef.getExprNode());
keyOIs[i] = keyFields[i].initialize(inputOI);
currentKeyOIs[i] = ObjectInspectorUtils.getStandardObjectInspector(keyOIs[i], ObjectInspectorCopyOption.WRITABLE);
}
keyWrapperFactory = new WindowingKeyWrapperFactory(keyFields, keyOIs, currentKeyOIs);
newKeys = keyWrapperFactory.getWindowingKeyWrapper();
}
use of com.sap.hadoop.windowing.query2.definition.ColumnDef in project SQLWindowing by hbutani.
the class Executor method executeSelectList.
/**
* For each row in the partition:
* 1. evaluate the where condition if applicable.
* 2. evaluate the value for each column retrieved
* from the select list
* 3. Forward the writable value or object based on the
* implementation of the ForwardSink
* @param qDef
* @param oPart
* @param rS
* @throws WindowingException
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void executeSelectList(QueryDef qDef, Partition oPart, ForwardSink rS) throws WindowingException {
ArrayList<ColumnDef> cols = qDef.getSelectList().getColumns();
ObjectInspector selectOI = qDef.getSelectList().getOI();
SerDe oSerDe = qDef.getOutput().getSerDe();
Object[] output = new Object[cols.size()];
WhereDef whDef = qDef.getWhere();
boolean applyWhere = whDef != null;
Converter whConverter = !applyWhere ? null : ObjectInspectorConverters.getConverter(whDef.getOI(), PrimitiveObjectInspectorFactory.javaBooleanObjectInspector);
ExprNodeEvaluator whCondEval = !applyWhere ? null : whDef.getExprEvaluator();
Writable value = null;
PartitionIterator<Object> pItr = oPart.iterator();
RuntimeUtils.connectLeadLagFunctionsToPartition(qDef, pItr);
while (pItr.hasNext()) {
int colCnt = 0;
ArrayList selectList = new ArrayList();
Object oRow = pItr.next();
if (applyWhere) {
Object whCond = null;
try {
whCond = whCondEval.evaluate(oRow);
whCond = whConverter.convert(whCond);
} catch (HiveException he) {
throw new WindowingException(he);
}
if (whCond == null || !((Boolean) whCond).booleanValue()) {
continue;
}
}
for (ColumnDef cDef : cols) {
try {
Object newCol = cDef.getExprEvaluator().evaluate(oRow);
output[colCnt++] = newCol;
selectList.add(newCol);
} catch (HiveException he) {
throw new WindowingException(he);
}
}
//else collect the writable key-value pairs for outstream
if (rS.acceptObject()) {
rS.collectOutput(output);
} else {
try {
value = oSerDe.serialize(selectList, selectOI);
} catch (SerDeException se) {
throw new WindowingException(se);
}
rS.collectOutput(NullWritable.get(), value);
}
}
}
Aggregations