Github user jackylk commented on a diff in the pull request: https://github.com/apache/carbondata/pull/2579#discussion_r206903988 --- Diff: datamap/mv/core/src/main/scala/org/apache/carbondata/mv/datamap/MVAnalyzerRule.scala --- @@ -80,26 +83,54 @@ class MVAnalyzerRule(sparkSession: SparkSession) extends Rule[LogicalPlan] { } def isValidPlan(plan: LogicalPlan, catalog: SummaryDatasetCatalog): Boolean = { - !plan.isInstanceOf[Command] && !isDataMapExists(plan, catalog.listAllSchema()) && - !plan.isInstanceOf[DeserializeToObject] + if (!plan.isInstanceOf[Command] && !plan.isInstanceOf[DeserializeToObject]) { + val catalogs = extractCatalogs(plan) + !isDataMapReplaced(catalog.listAllValidSchema(), catalogs) && + isDataMapExists(catalog.listAllValidSchema(), catalogs) + } else { + false + } + } /** * Check whether datamap table already updated in the query. * - * @param plan * @param mvs * @return */ - def isDataMapExists(plan: LogicalPlan, mvs: Array[SummaryDataset]): Boolean = { - val catalogs = plan collect { - case l: LogicalRelation => l.catalogTable - } - catalogs.isEmpty || catalogs.exists { c => + def isDataMapReplaced( + mvs: Array[SummaryDataset], + catalogs: Seq[Option[CatalogTable]]): Boolean = { + catalogs.exists { c => mvs.exists { mv => val identifier = mv.dataMapSchema.getRelationIdentifier identifier.getTableName.equals(c.get.identifier.table) && identifier.getDatabaseName.equals(c.get.database) } } } + + /** + * Check whether any suitable datamaps exists for this plan. --- End diff -- suitable means matched plan?
---