use of com.sap.hadoop.windowing.query2.definition.QueryDef in project SQLWindowing by hbutani.
the class OutputTranslation method translate.
public static void translate(QueryDef qDef) throws WindowingException {
QueryTranslationInfo tInfo = qDef.getTranslationInfo();
translateSelectExprs(qDef);
validateOutputSpec(qDef);
QueryOutputDef oDef = new QueryOutputDef();
oDef.setOutputSpec(qDef.getSpec().getOutput());
qDef.setOutput(oDef);
setupOutputSerDe(tInfo.getHiveCfg(), qDef.getSelectList(), oDef);
}
use of com.sap.hadoop.windowing.query2.definition.QueryDef in project SQLWindowing by hbutani.
the class OutputTranslation method validateOutputSpec.
public static void validateOutputSpec(QueryDef qDef) throws WindowingException {
QueryTranslationInfo tInfo = qDef.getTranslationInfo();
QueryOutputSpec spec = qDef.getSpec().getOutput();
// ensure outputPath is specified. It is optional in grammar because it is not required in Hive mode.
if (spec == null || spec.getPath() == null) {
throw new WindowingException("Query doesn't contain an output Path for results");
}
// if tableName is specified; validate it exists
Table oTbl = null;
if (spec.getHiveTable() != null) {
oTbl = getHiveTableDetails(tInfo.getHiveCfg(), spec.getHiveTable(), qDef.getInput().getHiveTableSpec());
}
// validate serDeClass
if (spec.getSerDeClass() == null) {
if (oTbl != null && oTbl.getSd().getSerdeInfo().isSetSerializationLib()) {
spec.setSerDeClass(oTbl.getSd().getSerdeInfo().getSerializationLib());
if (oTbl.getSd().getSerdeInfo().isSetParameters()) {
Iterator<Map.Entry<String, String>> props = oTbl.getSd().getSerdeInfo().getParameters().entrySet().iterator();
while (props.hasNext()) {
Map.Entry<String, String> e = props.next();
spec.addSerdeProperty(e.getKey(), e.getValue());
}
}
} else {
spec.setSerDeClass(com.sap.hadoop.windowing.Constants.DEFAULT_SERDE_CLASSNAME);
spec.addSerdeProperty(org.apache.hadoop.hive.serde.Constants.FIELD_DELIM, ",");
}
}
try {
Class.forName(spec.getSerDeClass());
} catch (Throwable t) {
throw new WindowingException(sprintf("Unknown SerDe Class %s", spec.getSerDeClass()), t);
}
// validate outputFormat
if (spec.getOutputFormatClass() == null) {
if (oTbl != null) {
spec.setOutputFormatClass(oTbl.getSd().getOutputFormat());
} else {
spec.setOutputFormatClass(Constants.DEFAULT_OUTPUTFORMAT_CLASSNAME);
}
}
try {
Class.forName(spec.getOutputFormatClass());
} catch (Throwable t) {
throw new WindowingException(sprintf("Unknown OutputFormat Class %s", spec.getOutputFormatClass()), t);
}
// ensure user has not specified a FormatClass
if (spec.getRecordWriterClass() != null) {
throw new WindowingException("Illegal Output Spec: RecordWriter class not valid in MR mode");
}
}
use of com.sap.hadoop.windowing.query2.definition.QueryDef in project SQLWindowing by hbutani.
the class OutputTranslation method translateSelectExprs.
public static void translateSelectExprs(QueryDef qDef) throws WindowingException {
QueryTranslationInfo tInfo = qDef.getTranslationInfo();
QueryInputDef iDef = qDef.getInput();
InputInfo iInfo = tInfo.getInputInfo(iDef);
SelectDef selectDef = qDef.getSelectList();
SelectSpec selectSpec = qDef.getSpec().getSelectList();
Iterator<Object> selectExprsAndAliases = selectSpec.getColumnListAndAlias();
int i = 0;
ColumnDef cDef = null;
while (selectExprsAndAliases.hasNext()) {
Object[] o = (Object[]) selectExprsAndAliases.next();
boolean isWnFn = ((Boolean) o[0]).booleanValue();
if (isWnFn) {
cDef = translateWindowFnAlias(qDef, iInfo, i++, (String) o[1]);
} else {
cDef = translateSelectExpr(qDef, iInfo, i++, (String) o[1], (ASTNode) o[2]);
}
selectDef.addColumn(cDef);
}
TranslateUtils.setupSelectOI(selectDef);
}
use of com.sap.hadoop.windowing.query2.definition.QueryDef in project SQLWindowing by hbutani.
the class TranslateUtils method buildArgDef.
public static ArgDef buildArgDef(QueryDef qDef, InputInfo iInfo, ASTNode arg) throws WindowingException {
ArgDef argDef = new ArgDef();
ExprNodeDesc exprNode = TranslateUtils.buildExprNode(arg, iInfo.getTypeCheckCtx());
ExprNodeEvaluator exprEval = WindowingExprNodeEvaluatorFactory.get(qDef.getTranslationInfo(), exprNode);
ObjectInspector oi = initExprNodeEvaluator(qDef, exprNode, exprEval, iInfo);
argDef.setExpression(arg);
argDef.setExprNode(exprNode);
argDef.setExprEvaluator(exprEval);
argDef.setOI(oi);
return argDef;
}
use of com.sap.hadoop.windowing.query2.definition.QueryDef in project SQLWindowing by hbutani.
the class MRUtils method addPTFMapOperator.
/**
* Returns true if the query needs a map-side reshape. PTFOperator is added
* on the map-side before ReduceSinkOperator in this scenario.
*
* @param qdef
* @return
* @throws WindowingException
*/
public static boolean addPTFMapOperator(QueryDef qdef) throws WindowingException {
boolean hasMap = false;
TableFuncDef tabDef = RuntimeUtils.getFirstTableFunction(qdef);
TableFunctionEvaluator tEval = tabDef.getFunction();
if (tEval.isTransformsRawInput()) {
hasMap = true;
}
return hasMap;
}
Aggregations