diff --git a/core/src/main/resources/error/error-classes.json b/core/src/main/resources/error/error-classes.json index 19ab5ada2b5c..d37beab33753 100644 --- a/core/src/main/resources/error/error-classes.json +++ b/core/src/main/resources/error/error-classes.json @@ -1257,6 +1257,11 @@ "AES- with the padding by the function." ] }, + "ANALYZE_UNCACHED_TEMP_VIEW" : { + "message" : [ + "The ANALYZE TABLE FOR COLUMNS command can operate on temporary views that have been cached already. Consider to cache the view ." + ] + }, "CATALOG_OPERATION" : { "message" : [ "Catalog does not support ." @@ -2868,11 +2873,6 @@ "Partition spec is invalid. The spec () must match the partition spec () defined in table ''." ] }, - "_LEGACY_ERROR_TEMP_1234" : { - "message" : [ - "Temporary view is not cached for analyzing columns." - ] - }, "_LEGACY_ERROR_TEMP_1235" : { "message" : [ "Column in table is of type , and Spark does not support statistics collection on this column type." diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala index ed08e33829ee..e55ca94ad0fb 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala @@ -2287,8 +2287,8 @@ private[sql] object QueryCompilationErrors extends QueryErrorsBase { def tempViewNotCachedForAnalyzingColumnsError(tableIdent: TableIdentifier): Throwable = { new AnalysisException( - errorClass = "_LEGACY_ERROR_TEMP_1234", - messageParameters = Map("tableIdent" -> tableIdent.toString)) + errorClass = "UNSUPPORTED_FEATURE.ANALYZE_UNCACHED_TEMP_VIEW", + messageParameters = Map("viewName" -> toSQLId(tableIdent.toString))) } def columnTypeNotSupportStatisticsCollectionError( diff --git a/sql/core/src/test/scala/org/apache/spark/sql/StatisticsCollectionSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/StatisticsCollectionSuite.scala index d4077274d5c5..e72e8631a9f9 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/StatisticsCollectionSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/StatisticsCollectionSuite.scala @@ -581,10 +581,13 @@ class StatisticsCollectionSuite extends StatisticsCollectionTestBase with Shared withTempView("tempView") { // Analyzes in a temporary view sql("CREATE TEMPORARY VIEW tempView AS SELECT 1 id") - val errMsg = intercept[AnalysisException] { - sql("ANALYZE TABLE tempView COMPUTE STATISTICS FOR COLUMNS id") - }.getMessage - assert(errMsg.contains("Temporary view `tempView` is not cached for analyzing columns")) + checkError( + exception = intercept[AnalysisException] { + sql("ANALYZE TABLE tempView COMPUTE STATISTICS FOR COLUMNS id") + }, + errorClass = "UNSUPPORTED_FEATURE.ANALYZE_UNCACHED_TEMP_VIEW", + parameters = Map("viewName" -> "`tempView`") + ) // Cache the view then analyze it sql("CACHE TABLE tempView") @@ -604,11 +607,13 @@ class StatisticsCollectionSuite extends StatisticsCollectionTestBase with Shared ExpectedContext(s"$globalTempDB.gTempView", 14, 13 + s"$globalTempDB.gTempView".length)) // Analyzes in a global temporary view sql("CREATE GLOBAL TEMP VIEW gTempView AS SELECT 1 id") - val errMsg2 = intercept[AnalysisException] { - sql(s"ANALYZE TABLE $globalTempDB.gTempView COMPUTE STATISTICS FOR COLUMNS id") - }.getMessage - assert(errMsg2.contains( - s"Temporary view `$globalTempDB`.`gTempView` is not cached for analyzing columns")) + checkError( + exception = intercept[AnalysisException] { + sql(s"ANALYZE TABLE $globalTempDB.gTempView COMPUTE STATISTICS FOR COLUMNS id") + }, + errorClass = "UNSUPPORTED_FEATURE.ANALYZE_UNCACHED_TEMP_VIEW", + parameters = Map("viewName" -> "`global_temp`.`gTempView`") + ) // Cache the view then analyze it sql(s"CACHE TABLE $globalTempDB.gTempView") diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewSuite.scala index d3b43059d35d..833d9c3c7be2 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewSuite.scala @@ -218,10 +218,13 @@ abstract class SQLViewSuite extends QueryTest with SQLTestUtils { }.getMessage assert(e4.contains( s"$viewName is a temp view. 'ANALYZE TABLE' expects a table or permanent view.")) - val e5 = intercept[AnalysisException] { - sql(s"ANALYZE TABLE $viewName COMPUTE STATISTICS FOR COLUMNS id") - }.getMessage - assert(e5.contains(s"Temporary view `$viewName` is not cached for analyzing columns.")) + checkError( + exception = intercept[AnalysisException] { + sql(s"ANALYZE TABLE $viewName COMPUTE STATISTICS FOR COLUMNS id") + }, + errorClass = "UNSUPPORTED_FEATURE.ANALYZE_UNCACHED_TEMP_VIEW", + parameters = Map("viewName" -> "`testView`") + ) } }