/** * Check if LLAP IO supports the column type that is being read * @param conf - configuration * @return false for types not supported by vectorization, true otherwise */ public static boolean checkVectorizerSupportedTypes(final Configuration conf) { final String[] readColumnNames = ColumnProjectionUtils.getReadColumnNames(conf); final String columnNames = conf.get(serdeConstants.LIST_COLUMNS); final String columnTypes = conf.get(serdeConstants.LIST_COLUMN_TYPES); if (columnNames == null || columnTypes == null || columnNames.isEmpty() || columnTypes.isEmpty()) { LOG.warn("Column names ({}) or types ({}) is null. Skipping type checking for LLAP IO.", columnNames, columnTypes); return true; } final List<String> allColumnNames = Lists.newArrayList(columnNames.split(",")); final List<TypeInfo> typeInfos = TypeInfoUtils.getTypeInfosFromTypeString(columnTypes); final List<String> allColumnTypes = TypeInfoUtils.getTypeStringsFromTypeInfo(typeInfos); return checkVectorizerSupportedTypes(Lists.newArrayList(readColumnNames), allColumnNames, allColumnTypes); }
private boolean checkVectorizerSupportedTypes(boolean hasLlap) { for (Map.Entry<String, Operator<? extends OperatorDesc>> entry : aliasToWork.entrySet()) { final String alias = entry.getKey(); Operator<? extends OperatorDesc> op = entry.getValue(); PartitionDesc partitionDesc = aliasToPartnInfo.get(alias); if (op instanceof TableScanOperator && partitionDesc != null && partitionDesc.getTableDesc() != null) { final TableScanOperator tsOp = (TableScanOperator) op; final List<String> readColumnNames = tsOp.getNeededColumns(); final Properties props = partitionDesc.getTableDesc().getProperties(); final List<TypeInfo> typeInfos = TypeInfoUtils.getTypeInfosFromTypeString( props.getProperty(serdeConstants.LIST_COLUMN_TYPES)); final List<String> allColumnTypes = TypeInfoUtils.getTypeStringsFromTypeInfo(typeInfos); final List<String> allColumnNames = Utilities.getColumnNames(props); hasLlap = Utilities.checkVectorizerSupportedTypes(readColumnNames, allColumnNames, allColumnTypes); } } return hasLlap; }