diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala index 68edf851bf2af..9c97e1e9b441b 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala @@ -1015,7 +1015,7 @@ class Analyzer( private def lookupRelation(identifier: Seq[String]): Option[LogicalPlan] = { expandRelationName(identifier) match { case SessionCatalogAndIdentifier(catalog, ident) => - def loaded = CatalogV2Util.loadTable(catalog, ident).map { + lazy val loaded = CatalogV2Util.loadTable(catalog, ident).map { case v1Table: V1Table => v1SessionCatalog.getRelation(v1Table.v1Table) case table => @@ -1024,7 +1024,12 @@ class Analyzer( DataSourceV2Relation.create(table, Some(catalog), Some(ident))) } val key = catalog.name +: ident.namespace :+ ident.name - Option(AnalysisContext.get.relationCache.getOrElseUpdate(key, loaded.orNull)) + AnalysisContext.get.relationCache.get(key).map(_.transform { + case multi: MultiInstanceRelation => multi.newInstance() + }).orElse { + loaded.foreach(AnalysisContext.get.relationCache.update(key, _)) + loaded + } case _ => None } }