Github user ravipesala commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2396#discussion_r197496409
--- Diff:
core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java
---
@@ -156,8 +162,70 @@ private static boolean isColumnMatches(boolean
isTransactionalTable,
// If it is non transactional table just check the column names, no
need to validate
// column id as multiple sdk's output placed in a single folder
doesn't have same
// column ID but can have same column name
- return (tableColumn.getColumnId().equals(queryColumn.getColumnId()) ||
- (!isTransactionalTable &&
tableColumn.getColName().equals(queryColumn.getColName())));
+ if (tableColumn.getDataType().isComplexType() &&
!(tableColumn.getDataType().getId()
+ == DataTypes.ARRAY_TYPE_ID)) {
+ if (tableColumn.getColumnId().equals(queryColumn.getColumnId())) {
+ return true;
+ } else {
+ return isColumnMatchesStruct(tableColumn, queryColumn);
+ }
+ } else {
+ return (tableColumn.getColumnId().equals(queryColumn.getColumnId())
|| (!isTransactionalTable
+ && tableColumn.getColName().equals(queryColumn.getColName())));
+ }
+ }
+
+ /**
+ * In case of Multilevel Complex column - STRUCT/STRUCTofSTRUCT,
traverse all the child dimension
+ * to check column Id
+ *
+ * @param tableColumn
+ * @param queryColumn
+ * @return
+ */
+ private static boolean isColumnMatchesStruct(CarbonColumn tableColumn,
CarbonColumn queryColumn) {
+ if (tableColumn instanceof CarbonDimension) {
+ CarbonDimension dimension = (CarbonDimension) tableColumn;
+ if
(dimension.getColName().equalsIgnoreCase(queryColumn.getColName().split("\\.")[0]))
{
+ if (dimension.getListOfChildDimensions() != null) {
+ CarbonColumn columnMatchesStructlevel =
+ isColumnMatchesStructlevel(tableColumn,
dimension.getListOfChildDimensions(),
+ queryColumn);
+ if (null != columnMatchesStructlevel) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ } else {
+ return
(tableColumn.getColumnId().equals(queryColumn.getColumnId()));
+ }
+ }
+ return false;
+ }
+
+ private static CarbonColumn isColumnMatchesStructlevel(CarbonColumn
tableColumn,
--- End diff --
CHange as per CarbonTable suggested code
---