You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by dz...@apache.org on 2023/02/01 04:46:57 UTC

[drill] branch master updated: DRILL-8394: ANALYZE TABLE ... COMPUTE STATISTICS fails with a trailing slash (#2745)

This is an automated email from the ASF dual-hosted git repository.

dzamo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git


The following commit(s) were added to refs/heads/master by this push:
     new d9d5517590 DRILL-8394: ANALYZE TABLE ... COMPUTE STATISTICS fails with a trailing slash (#2745)
d9d5517590 is described below

commit d9d5517590799feab1b78b8f28c6b46fcc941ecc
Author: James Turton <91...@users.noreply.github.com>
AuthorDate: Wed Feb 1 06:46:50 2023 +0200

    DRILL-8394: ANALYZE TABLE ... COMPUTE STATISTICS fails with a trailing slash (#2745)
---
 .../exec/store/hive/schema/DrillHiveViewTable.java   |  4 ++--
 .../org/apache/calcite/jdbc/DynamicRootSchema.java   |  4 ++--
 .../drill/exec/planner/physical/TableModifyPrel.java |  4 ++--
 .../{SchemaUtilites.java => SchemaUtilities.java}    |  8 ++++----
 .../sql/conversion/DrillCalciteCatalogReader.java    | 10 +++++-----
 .../exec/planner/sql/conversion/SqlConverter.java    |  4 ++--
 .../planner/sql/handlers/AnalyzeTableHandler.java    | 13 +++++++++----
 .../planner/sql/handlers/CreateAliasHandler.java     |  8 ++++----
 .../planner/sql/handlers/CreateTableHandler.java     |  8 ++++----
 .../planner/sql/handlers/DescribeSchemaHandler.java  |  6 +++---
 .../planner/sql/handlers/DescribeTableHandler.java   | 13 ++++++-------
 .../exec/planner/sql/handlers/DrillTableInfo.java    | 10 +++++-----
 .../exec/planner/sql/handlers/DropTableHandler.java  |  6 +++---
 .../exec/planner/sql/handlers/InsertHandler.java     |  4 ++--
 .../handlers/MetastoreDropTableMetadataHandler.java  |  4 ++--
 .../planner/sql/handlers/RefreshMetadataHandler.java |  6 +++---
 .../exec/planner/sql/handlers/SchemaHandler.java     |  6 +++---
 .../exec/planner/sql/handlers/ShowFilesHandler.java  |  8 ++++----
 .../exec/planner/sql/handlers/ShowTablesHandler.java | 10 +++++-----
 .../exec/planner/sql/handlers/SqlHandlerConfig.java  |  4 ++--
 .../drill/exec/planner/sql/handlers/ViewHandler.java |  8 ++++----
 .../exec/planner/sql/parser/SqlCreateTable.java      |  4 ++--
 .../drill/exec/planner/sql/parser/SqlCreateView.java |  4 ++--
 .../drill/exec/planner/sql/parser/SqlDropTable.java  |  4 ++--
 .../planner/sql/parser/SqlDropTableMetadata.java     |  4 ++--
 .../drill/exec/planner/sql/parser/SqlDropView.java   |  4 ++--
 .../exec/planner/sql/parser/SqlRefreshMetadata.java  |  4 ++--
 .../drill/exec/planner/sql/parser/SqlSchema.java     |  4 ++--
 .../org/apache/drill/exec/rpc/user/UserSession.java  | 20 ++++++++++----------
 .../drill/exec/store/dfs/WorkspaceSchemaFactory.java |  4 ++--
 .../store/enumerable/EnumerableRecordReader.java     |  4 ++--
 .../java/org/apache/drill/exec/sql/TestAnalyze.java  | 11 +++++++++++
 32 files changed, 115 insertions(+), 100 deletions(-)

diff --git a/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/schema/DrillHiveViewTable.java b/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/schema/DrillHiveViewTable.java
index 018f8b3eda..967f7344af 100644
--- a/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/schema/DrillHiveViewTable.java
+++ b/contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/schema/DrillHiveViewTable.java
@@ -26,7 +26,7 @@ import org.apache.calcite.schema.SchemaPlus;
 import org.apache.calcite.sql.type.SqlTypeFactoryImpl;
 import org.apache.drill.exec.dotdrill.View;
 import org.apache.drill.exec.planner.logical.DrillViewTable;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.conversion.DrillViewExpander;
 import org.apache.drill.exec.planner.types.DrillRelDataTypeSystem;
 import org.apache.drill.exec.planner.types.HiveToRelDataTypeConverter;
@@ -68,7 +68,7 @@ public class DrillHiveViewTable extends DrillViewTable {
   @Override
   protected RelNode expandViewForImpersonatedUser(DrillViewExpander context,
                                                   List<String> workspaceSchemaPath, SchemaPlus tokenSchemaTree) {
-    SchemaPlus drillHiveSchema = SchemaUtilites.findSchema(tokenSchemaTree, workspaceSchemaPath);
+    SchemaPlus drillHiveSchema = SchemaUtilities.findSchema(tokenSchemaTree, workspaceSchemaPath);
     workspaceSchemaPath = ImmutableList.of();
     return super.expandViewForImpersonatedUser(context, workspaceSchemaPath, drillHiveSchema);
   }
diff --git a/exec/java-exec/src/main/java/org/apache/calcite/jdbc/DynamicRootSchema.java b/exec/java-exec/src/main/java/org/apache/calcite/jdbc/DynamicRootSchema.java
index 71925a28b5..098191dcb3 100644
--- a/exec/java-exec/src/main/java/org/apache/calcite/jdbc/DynamicRootSchema.java
+++ b/exec/java-exec/src/main/java/org/apache/calcite/jdbc/DynamicRootSchema.java
@@ -28,7 +28,7 @@ import org.apache.drill.common.expression.PathSegment;
 import org.apache.drill.common.expression.SchemaPath;
 import org.apache.drill.exec.ExecConstants;
 import org.apache.drill.exec.alias.AliasRegistryProvider;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.store.AbstractSchema;
 import org.apache.drill.exec.store.SchemaConfig;
 import org.apache.drill.exec.store.StoragePlugin;
@@ -157,7 +157,7 @@ public class DynamicRootSchema extends DynamicSchema {
       }
 
       // Could not find the plugin of schemaName. The schemaName could be `dfs.tmp`, a 2nd level schema under 'dfs'
-      List<String> paths = SchemaUtilites.getSchemaPathAsList(schemaName);
+      List<String> paths = SchemaUtilities.getSchemaPathAsList(schemaName);
       if (paths.size() == 2) {
         plugin = storages.getPlugin(paths.get(0));
         if (plugin == null) {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/TableModifyPrel.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/TableModifyPrel.java
index 8e7e917641..938922b6de 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/TableModifyPrel.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/TableModifyPrel.java
@@ -32,7 +32,7 @@ import org.apache.calcite.schema.SchemaPlus;
 import org.apache.drill.exec.physical.base.PhysicalOperator;
 import org.apache.drill.exec.planner.logical.ModifyTableEntry;
 import org.apache.drill.exec.planner.physical.visitor.PrelVisitor;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.record.BatchSchema;
 import org.jetbrains.annotations.NotNull;
 
@@ -67,7 +67,7 @@ public class TableModifyPrel extends TableModify implements Prel {
     String tableName = tablePath.get(tablePath.size() - 1);
     SchemaPlus schema = ((CalciteCatalogReader) getTable().getRelOptSchema()).getRootSchema().plus();
 
-    ModifyTableEntry modifyTableEntry = SchemaUtilites.resolveToDrillSchema(schema, schemaPath)
+    ModifyTableEntry modifyTableEntry = SchemaUtilities.resolveToDrillSchema(schema, schemaPath)
       .modifyTable(tableName);
 
     PhysicalOperator childPOP = child.getPhysicalOperator(creator);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SchemaUtilites.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SchemaUtilities.java
similarity index 98%
rename from exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SchemaUtilites.java
rename to exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SchemaUtilities.java
index 7fc2b03a39..780270eaca 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SchemaUtilites.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SchemaUtilities.java
@@ -34,8 +34,8 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
-public class SchemaUtilites {
-  private static final Logger logger = LoggerFactory.getLogger(SchemaUtilites.class);
+public class SchemaUtilities {
+  private static final Logger logger = LoggerFactory.getLogger(SchemaUtilities.class);
   public static final Joiner SCHEMA_PATH_JOINER = Joiner.on(".").skipNulls();
 
   /**
@@ -313,9 +313,9 @@ public class SchemaUtilites {
    */
   public static AbstractSchema resolveToTemporarySchema(List<String> tableSchema, SchemaPlus defaultSchema, DrillConfig config) {
     if (tableSchema.size() == 0) {
-      return SchemaUtilites.getTemporaryWorkspace(defaultSchema, config);
+      return SchemaUtilities.getTemporaryWorkspace(defaultSchema, config);
     } else {
-      return SchemaUtilites.resolveToMutableDrillSchema(defaultSchema, tableSchema);
+      return SchemaUtilities.resolveToMutableDrillSchema(defaultSchema, tableSchema);
     }
   }
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/conversion/DrillCalciteCatalogReader.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/conversion/DrillCalciteCatalogReader.java
index 244e8dc5d1..1b6434536e 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/conversion/DrillCalciteCatalogReader.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/conversion/DrillCalciteCatalogReader.java
@@ -33,7 +33,7 @@ import org.apache.drill.common.config.DrillConfig;
 import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.exec.metastore.MetadataProviderManager;
 import org.apache.drill.exec.planner.logical.DrillTable;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.rpc.user.UserSession;
 import org.apache.drill.shaded.guava.com.google.common.cache.CacheBuilder;
 import org.apache.drill.shaded.guava.com.google.common.cache.CacheLoader;
@@ -152,10 +152,10 @@ class DrillCalciteCatalogReader extends CalciteCatalogReader {
     if (names.size() == 1) {
       return true;
     }
-    String schemaPath = SchemaUtilites.getSchemaPath(names.subList(0, names.size() - 1));
-    return SchemaUtilites.isTemporaryWorkspace(schemaPath, drillConfig) ||
-        SchemaUtilites.isTemporaryWorkspace(
-            SchemaUtilites.SCHEMA_PATH_JOINER.join(defaultSchemaPath, schemaPath), drillConfig);
+    String schemaPath = SchemaUtilities.getSchemaPath(names.subList(0, names.size() - 1));
+    return SchemaUtilities.isTemporaryWorkspace(schemaPath, drillConfig) ||
+        SchemaUtilities.isTemporaryWorkspace(
+            SchemaUtilities.SCHEMA_PATH_JOINER.join(defaultSchemaPath, schemaPath), drillConfig);
   }
 
   /**
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/conversion/SqlConverter.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/conversion/SqlConverter.java
index 303db43b3f..25ed545c68 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/conversion/SqlConverter.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/conversion/SqlConverter.java
@@ -57,7 +57,7 @@ import org.apache.drill.exec.planner.physical.DrillDistributionTraitDef;
 import org.apache.drill.exec.planner.physical.PlannerSettings;
 import org.apache.drill.exec.planner.sql.DrillConformance;
 import org.apache.drill.exec.planner.sql.DrillConvertletTable;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.impl.DrillParserWithCompoundIdConverter;
 import org.apache.drill.exec.planner.sql.parser.impl.DrillSqlParseException;
 import org.apache.drill.exec.planner.types.DrillRelDataTypeSystem;
@@ -137,7 +137,7 @@ public class SqlConverter {
     this.isExpandedView = false;
     this.typeFactory = new JavaTypeFactoryImpl(DrillRelDataTypeSystem.DRILL_REL_DATATYPE_SYSTEM);
     this.defaultSchema = context.getNewDefaultSchema();
-    this.rootSchema = SchemaUtilites.rootSchema(defaultSchema);
+    this.rootSchema = SchemaUtilities.rootSchema(defaultSchema);
     this.temporarySchema = context.getConfig().getString(ExecConstants.DEFAULT_TEMPORARY_WORKSPACE);
     this.session = context.getSession();
     this.drillConfig = context.getConfig();
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/AnalyzeTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/AnalyzeTableHandler.java
index 2636c46ffc..d57e30daaf 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/AnalyzeTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/AnalyzeTableHandler.java
@@ -18,6 +18,7 @@
 package org.apache.drill.exec.planner.sql.handlers;
 
 import java.io.IOException;
+
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.type.RelDataType;
 import org.apache.calcite.schema.Table;
@@ -28,6 +29,7 @@ import org.apache.calcite.sql.SqlSelect;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import org.apache.calcite.tools.RelConversionException;
 import org.apache.calcite.tools.ValidationException;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.common.expression.SchemaPath;
 import org.apache.drill.common.logical.FormatPluginConfig;
@@ -41,7 +43,7 @@ import org.apache.drill.exec.planner.logical.DrillScreenRel;
 import org.apache.drill.exec.planner.logical.DrillTable;
 import org.apache.drill.exec.planner.logical.DrillWriterRel;
 import org.apache.drill.exec.planner.physical.Prel;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.SqlSelectBuilder;
 import org.apache.drill.exec.planner.sql.parser.SqlAnalyzeTable;
 import org.apache.drill.exec.store.AbstractSchema;
@@ -84,7 +86,7 @@ public class AnalyzeTableHandler extends DefaultSqlHandler {
     RelNode relScan = convertedRelNode.getConvertedNode();
     DrillTableInfo drillTableInfo = DrillTableInfo.getTableInfoHolder(sqlAnalyzeTable.getTableRef(), config);
     String tableName = drillTableInfo.tableName();
-    AbstractSchema drillSchema = SchemaUtilites.resolveToDrillSchema(
+    AbstractSchema drillSchema = SchemaUtilities.resolveToDrillSchema(
         config.getConverter().getDefaultSchema(), drillTableInfo.schemaPath());
     Table table = SqlHandlerUtil.getTableFromSchema(drillSchema, tableName);
 
@@ -116,10 +118,13 @@ public class AnalyzeTableHandler extends DefaultSqlHandler {
         formatSelection.getFormat()).getFsConf());
 
     Path selectionRoot = formatSelection.getSelection().getSelectionRoot();
-    if (!selectionRoot.toUri().getPath().endsWith(tableName) || !fs.getFileStatus(selectionRoot).isDirectory()) {
+    String tablePath = selectionRoot.toUri().getPath();
+    boolean pathMatchesTableName = tablePath.endsWith(StringUtils.stripEnd(tableName, "/"));
+
+    if (!pathMatchesTableName || !fs.getFileStatus(selectionRoot).isDirectory()) {
       return DrillStatsTable.notSupported(context, tableName);
     }
-    // Do not recompute statistics, if stale
+    // Do not recompute statistics if they already exist and are not stale.
     Path statsFilePath = new Path(selectionRoot, DotDrillType.STATS.getEnding());
     if (fs.exists(statsFilePath) && !isStatsStale(fs, statsFilePath)) {
      return DrillStatsTable.notRequired(context, tableName);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateAliasHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateAliasHandler.java
index 992a4ae3c4..4555ef7b90 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateAliasHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateAliasHandler.java
@@ -27,7 +27,7 @@ import org.apache.drill.exec.alias.AliasTarget;
 import org.apache.drill.exec.alias.Aliases;
 import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.planner.sql.DirectPlan;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.SqlCreateAlias;
 import org.apache.drill.exec.work.foreman.ForemanSetupException;
 import org.slf4j.Logger;
@@ -86,12 +86,12 @@ public class CreateAliasHandler extends BaseAliasHandler {
   }
 
   private String getStorageQualifier(List<String> path) {
-    SchemaUtilites.resolveToDrillSchema(
+    SchemaUtilities.resolveToDrillSchema(
       config.getConverter().getDefaultSchema(), path);
     if (path.size() > 1) {
       throw UserException.validationError()
         .message("Storage name expected, but provided [%s]",
-          SchemaUtilites.getSchemaPath(path))
+          SchemaUtilities.getSchemaPath(path))
         .build(logger);
     }
     return SchemaPath.getCompoundPath(path.get(0)).toExpr();
@@ -103,7 +103,7 @@ public class CreateAliasHandler extends BaseAliasHandler {
     if (drillTableInfo.drillTable() == null) {
       throw UserException.validationError()
         .message("No table with given name [%s] exists in schema [%s]", drillTableInfo.tableName(),
-          SchemaUtilites.getSchemaPath(drillTableInfo.schemaPath()))
+          SchemaUtilities.getSchemaPath(drillTableInfo.schemaPath()))
         .build(logger);
     }
     String[] paths = new String[drillTableInfo.schemaPath().size() + 1];
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateTableHandler.java
index 872663e9e0..689e9cc6eb 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/CreateTableHandler.java
@@ -53,7 +53,7 @@ import org.apache.drill.exec.planner.physical.ProjectPrel;
 import org.apache.drill.exec.planner.physical.WriterPrel;
 import org.apache.drill.exec.planner.physical.visitor.BasePrelVisitor;
 import org.apache.drill.exec.planner.sql.DrillSqlOperator;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.SqlCreateTable;
 import org.apache.drill.exec.store.AbstractSchema;
 import org.apache.drill.exec.util.Pointer;
@@ -282,14 +282,14 @@ public class CreateTableHandler extends DefaultSqlHandler {
   private AbstractSchema resolveSchema(SqlCreateTable sqlCreateTable, SchemaPlus defaultSchema, DrillConfig config) {
     AbstractSchema resolvedSchema;
     if (sqlCreateTable.isTemporary() && sqlCreateTable.getSchemaPath().size() == 0) {
-      resolvedSchema = SchemaUtilites.getTemporaryWorkspace(defaultSchema, config);
+      resolvedSchema = SchemaUtilities.getTemporaryWorkspace(defaultSchema, config);
     } else {
-      resolvedSchema = SchemaUtilites.resolveToMutableDrillSchema(
+      resolvedSchema = SchemaUtilities.resolveToMutableDrillSchema(
           defaultSchema, sqlCreateTable.getSchemaPath());
     }
 
     if (sqlCreateTable.isTemporary()) {
-      return SchemaUtilites.resolveToValidTemporaryWorkspace(resolvedSchema, config);
+      return SchemaUtilities.resolveToValidTemporaryWorkspace(resolvedSchema, config);
     }
 
     return resolvedSchema;
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java
index 24ebf561ea..cee39ebece 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeSchemaHandler.java
@@ -33,7 +33,7 @@ import org.apache.drill.common.exceptions.DrillRuntimeException;
 import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.planner.sql.DirectPlan;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.store.AbstractSchema;
 import org.apache.drill.exec.store.StoragePlugin;
 import org.apache.drill.exec.store.StoragePluginRegistry.PluginException;
@@ -76,7 +76,7 @@ public class DescribeSchemaHandler extends DefaultSqlHandler {
   @Override
   public PhysicalPlan getPlan(SqlNode sqlNode) throws ForemanSetupException {
     SqlIdentifier schema = unwrap(sqlNode, SqlDescribeSchema.class).getSchema();
-    SchemaPlus schemaPlus = SchemaUtilites.findSchema(config.getConverter().getDefaultSchema(), schema.names);
+    SchemaPlus schemaPlus = SchemaUtilities.findSchema(config.getConverter().getDefaultSchema(), schema.names);
 
     if (schemaPlus == null) {
       throw UserException.validationError()
@@ -84,7 +84,7 @@ public class DescribeSchemaHandler extends DefaultSqlHandler {
         .build(logger);
     }
 
-    AbstractSchema drillSchema = SchemaUtilites.unwrapAsDrillSchemaInstance(schemaPlus);
+    AbstractSchema drillSchema = SchemaUtilities.unwrapAsDrillSchemaInstance(schemaPlus);
     StoragePlugin storagePlugin;
     try {
       storagePlugin = context.getStorage().getPlugin(drillSchema.getSchemaPath().get(0));
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
index de058d1682..ce2245b622 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
@@ -42,7 +42,7 @@ import org.apache.calcite.util.NlsString;
 import org.apache.calcite.util.Pair;
 import org.apache.calcite.util.Util;
 import org.apache.drill.common.exceptions.UserException;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.SqlSelectBuilder;
 import org.apache.drill.exec.planner.sql.conversion.SqlConverter;
 import org.apache.drill.exec.planner.sql.parser.DrillParserUtil;
@@ -71,22 +71,21 @@ public class DescribeTableHandler extends DefaultSqlHandler {
 
       SchemaPlus defaultSchema = config.getConverter().getDefaultSchema();
       List<String> schemaPathGivenInCmd = Util.skipLast(node.getTable().names);
-      SchemaPlus schema = SchemaUtilites.findSchema(defaultSchema, schemaPathGivenInCmd);
+      SchemaPlus schema = SchemaUtilities.findSchema(defaultSchema, schemaPathGivenInCmd);
 
       if (schema == null) {
-        SchemaUtilites.throwSchemaNotFoundException(defaultSchema, SchemaUtilites.getSchemaPath(schemaPathGivenInCmd));
+        SchemaUtilities.throwSchemaNotFoundException(defaultSchema, SchemaUtilities.getSchemaPath(schemaPathGivenInCmd));
       }
 
-      if (SchemaUtilites.isRootSchema(schema)) {
+      if (SchemaUtilities.isRootSchema(schema)) {
         throw UserException.validationError()
             .message("No schema selected.")
             .build(logger);
       }
 
       // find resolved schema path
-      AbstractSchema drillSchema = SchemaUtilites.unwrapAsDrillSchemaInstance(schema);
+      AbstractSchema drillSchema = SchemaUtilities.unwrapAsDrillSchemaInstance(schema);
       String schemaPath = drillSchema.getFullSchemaName();
-
       String tableName = Util.last(node.getTable().names);
 
       if (schema.getTable(tableName) == null) {
@@ -96,7 +95,7 @@ public class DescribeTableHandler extends DefaultSqlHandler {
       }
 
       SqlNode schemaCondition = null;
-      if (!SchemaUtilites.isRootSchema(schema)) {
+      if (!SchemaUtilities.isRootSchema(schema)) {
         schemaCondition = DrillParserUtil.createCondition(
             new SqlIdentifier(SHRD_COL_TABLE_SCHEMA, SqlParserPos.ZERO),
             SqlStdOperatorTable.EQUALS,
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DrillTableInfo.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DrillTableInfo.java
index c789261b1e..924e536d0d 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DrillTableInfo.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DrillTableInfo.java
@@ -31,7 +31,7 @@ import org.apache.calcite.sql.validate.SqlUserDefinedTableMacro;
 import org.apache.calcite.util.Util;
 import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.exec.planner.logical.DrillTable;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.store.AbstractSchema;
 import org.apache.drill.shaded.guava.com.google.common.base.Preconditions;
 import org.slf4j.Logger;
@@ -88,16 +88,16 @@ public class DrillTableInfo {
         SqlUserDefinedTableMacro tableMacro = (SqlUserDefinedTableMacro) operator;
         SqlIdentifier tableIdentifier = tableMacro.getSqlIdentifier();
 
-        AbstractSchema drillSchema = SchemaUtilites.resolveToDrillSchema(
-            config.getConverter().getDefaultSchema(), SchemaUtilites.getSchemaPath(tableIdentifier));
+        AbstractSchema drillSchema = SchemaUtilities.resolveToDrillSchema(
+            config.getConverter().getDefaultSchema(), SchemaUtilities.getSchemaPath(tableIdentifier));
 
         DrillTable table = (DrillTable) tableMacro.getTable(new SqlCallBinding(config.getConverter().getValidator(), null, call.operand(0)));
         return new DrillTableInfo(table, drillSchema.getSchemaPath(), Util.last(tableIdentifier.names));
       }
       case IDENTIFIER: {
         SqlIdentifier tableIdentifier = (SqlIdentifier) tableRef;
-        AbstractSchema drillSchema = SchemaUtilites.resolveToDrillSchema(
-            config.getConverter().getDefaultSchema(), SchemaUtilites.getSchemaPath(tableIdentifier));
+        AbstractSchema drillSchema = SchemaUtilities.resolveToDrillSchema(
+            config.getConverter().getDefaultSchema(), SchemaUtilities.getSchemaPath(tableIdentifier));
         String tableName = Util.last(tableIdentifier.names);
         DrillTable table = getDrillTable(drillSchema, tableName);
         return new DrillTableInfo(table, drillSchema.getSchemaPath(), tableName);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DropTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DropTableHandler.java
index 11980dd9fd..c9f5e7f5bb 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DropTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DropTableHandler.java
@@ -28,7 +28,7 @@ import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.common.util.DrillStringUtils;
 import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.planner.sql.DirectPlan;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.SqlDropTable;
 import org.apache.drill.exec.rpc.user.UserSession;
 import org.apache.drill.exec.store.AbstractSchema;
@@ -60,13 +60,13 @@ public class DropTableHandler extends DefaultSqlHandler {
     DrillConfig drillConfig = context.getConfig();
     UserSession session = context.getSession();
 
-    AbstractSchema temporarySchema = SchemaUtilites.resolveToTemporarySchema(tableSchema, defaultSchema, drillConfig);
+    AbstractSchema temporarySchema = SchemaUtilities.resolveToTemporarySchema(tableSchema, defaultSchema, drillConfig);
     boolean isTemporaryTable = session.isTemporaryTable(temporarySchema, drillConfig, originalTableName);
 
     if (isTemporaryTable) {
       session.removeTemporaryTable(temporarySchema, originalTableName, drillConfig);
     } else {
-      AbstractSchema drillSchema = SchemaUtilites.resolveToMutableDrillSchema(defaultSchema, tableSchema);
+      AbstractSchema drillSchema = SchemaUtilities.resolveToMutableDrillSchema(defaultSchema, tableSchema);
       Table tableToDrop = SqlHandlerUtil.getTableFromSchema(drillSchema, originalTableName);
       // TableType.OTHER started getting reported for H2 DB when it was upgraded to v2.
       if (tableToDrop == null || (tableToDrop.getJdbcTableType() != Schema.TableType.TABLE &&
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/InsertHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/InsertHandler.java
index c3d23e5b9f..4821b50023 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/InsertHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/InsertHandler.java
@@ -22,7 +22,7 @@ import org.apache.calcite.tools.RelConversionException;
 import org.apache.calcite.tools.ValidationException;
 import org.apache.drill.common.exceptions.DrillRuntimeException;
 import org.apache.drill.common.exceptions.UserException;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.store.StoragePluginRegistry;
 import org.apache.drill.exec.util.Pointer;
 import org.apache.drill.exec.work.foreman.ForemanSetupException;
@@ -43,7 +43,7 @@ public class InsertHandler extends DefaultSqlHandler {
     throws ForemanSetupException, RelConversionException, ValidationException {
     ConvertedRelNode convertedRelNode = super.validateAndConvert(sqlNode);
 
-    String storageName = SchemaUtilites.getSchemaPathAsList(
+    String storageName = SchemaUtilities.getSchemaPathAsList(
       convertedRelNode.getConvertedNode().getTable().getQualifiedName().iterator().next()).iterator().next();
     try {
       if (!context.getStorage().getPlugin(storageName).supportsInsert()) {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/MetastoreDropTableMetadataHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/MetastoreDropTableMetadataHandler.java
index 77b682fad3..79aedc2ce3 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/MetastoreDropTableMetadataHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/MetastoreDropTableMetadataHandler.java
@@ -22,7 +22,7 @@ import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.exec.ExecConstants;
 import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.planner.sql.DirectPlan;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.SqlDropTableMetadata;
 import org.apache.drill.exec.store.AbstractSchema;
 import org.apache.drill.exec.util.Pointer;
@@ -56,7 +56,7 @@ public class MetastoreDropTableMetadataHandler extends DefaultSqlHandler {
 
     SqlDropTableMetadata dropTableMetadata = unwrap(sqlNode, SqlDropTableMetadata.class);
 
-    AbstractSchema drillSchema = SchemaUtilites.resolveToDrillSchema(
+    AbstractSchema drillSchema = SchemaUtilities.resolveToDrillSchema(
         config.getConverter().getDefaultSchema(), dropTableMetadata.getSchemaPath());
 
     List<String> schemaPath = drillSchema.getSchemaPath();
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/RefreshMetadataHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/RefreshMetadataHandler.java
index 00dedc1c1b..fa445a8a39 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/RefreshMetadataHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/RefreshMetadataHandler.java
@@ -29,7 +29,7 @@ import org.apache.drill.common.logical.FormatPluginConfig;
 import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.planner.logical.DrillTable;
 import org.apache.drill.exec.planner.sql.DirectPlan;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.SqlRefreshMetadata;
 import org.apache.drill.exec.store.dfs.DrillFileSystem;
 import org.apache.drill.exec.store.dfs.FileSelection;
@@ -45,7 +45,7 @@ import org.apache.hadoop.fs.Path;
 import java.util.HashSet;
 import java.util.Set;
 
-import static org.apache.drill.exec.planner.sql.SchemaUtilites.findSchema;
+import static org.apache.drill.exec.planner.sql.SchemaUtilities.findSchema;
 
 public class RefreshMetadataHandler extends DefaultSqlHandler {
   private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(RefreshMetadataHandler.class);
@@ -73,7 +73,7 @@ public class RefreshMetadataHandler extends DefaultSqlHandler {
 
       if (schema == null) {
         return direct(false, "Storage plugin or workspace does not exist [%s]",
-            SchemaUtilites.SCHEMA_PATH_JOINER.join(refreshTable.getSchemaPath()));
+            SchemaUtilities.SCHEMA_PATH_JOINER.join(refreshTable.getSchemaPath()));
       }
 
       final String tableName = refreshTable.getName();
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SchemaHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SchemaHandler.java
index 3487234a67..cee6c11bac 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SchemaHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SchemaHandler.java
@@ -26,7 +26,7 @@ import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.exec.ExecConstants;
 import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.planner.sql.DirectPlan;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.SqlCreateType;
 import org.apache.drill.exec.planner.sql.parser.SqlSchema;
 import org.apache.drill.exec.record.metadata.ColumnMetadata;
@@ -72,13 +72,13 @@ public abstract class SchemaHandler extends DefaultSqlHandler {
 
   public WorkspaceSchemaFactory.WorkspaceSchema getWorkspaceSchema(List<String> tableSchema, String tableName) {
     SchemaPlus defaultSchema = config.getConverter().getDefaultSchema();
-    AbstractSchema temporarySchema = SchemaUtilites.resolveToTemporarySchema(tableSchema, defaultSchema, context.getConfig());
+    AbstractSchema temporarySchema = SchemaUtilities.resolveToTemporarySchema(tableSchema, defaultSchema, context.getConfig());
 
     if (context.getSession().isTemporaryTable(temporarySchema, context.getConfig(), tableName)) {
       produceErrorResult(String.format("Indicated table [%s] is temporary table", tableName), true);
     }
 
-    AbstractSchema drillSchema = SchemaUtilites.resolveToMutableDrillSchema(defaultSchema, tableSchema);
+    AbstractSchema drillSchema = SchemaUtilities.resolveToMutableDrillSchema(defaultSchema, tableSchema);
     Table table = SqlHandlerUtil.getTableFromSchema(drillSchema, tableName);
     if (table == null || table.getJdbcTableType() != Schema.TableType.TABLE) {
       produceErrorResult(String.format("Table [%s] was not found", tableName), true);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowFilesHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowFilesHandler.java
index 1318e6f47d..86b612c97f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowFilesHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowFilesHandler.java
@@ -23,7 +23,7 @@ import org.apache.calcite.sql.SqlNode;
 import org.apache.drill.common.exceptions.UserException;
 import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.planner.sql.DirectPlan;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.SqlShowFiles;
 import org.apache.drill.exec.store.AbstractSchema;
 import org.apache.drill.exec.store.dfs.WorkspaceSchemaFactory.WorkspaceSchema;
@@ -59,10 +59,10 @@ public class ShowFilesHandler extends DefaultSqlHandler {
     if (from != null) {
       // We are not sure if the full from clause is just the schema or includes table name,
       // first try to see if the full path specified is a schema
-      drillSchema = SchemaUtilites.findSchema(defaultSchema, from.names);
+      drillSchema = SchemaUtilities.findSchema(defaultSchema, from.names);
       if (drillSchema == null) {
         // Entire from clause is not a schema, try to obtain the schema without the last part of the specified clause.
-        drillSchema = SchemaUtilites.findSchema(defaultSchema, from.names.subList(0, from.names.size() - 1));
+        drillSchema = SchemaUtilities.findSchema(defaultSchema, from.names.subList(0, from.names.size() - 1));
         // Listing for specific directory: show files in dfs.tmp.specific_directory
         fromDir = from.names.get((from.names.size() - 1));
       }
@@ -80,7 +80,7 @@ public class ShowFilesHandler extends DefaultSqlHandler {
     } catch (ClassCastException e) {
       throw UserException.validationError()
           .message("SHOW FILES is supported in workspace type schema only. Schema [%s] is not a workspace schema.",
-              SchemaUtilites.getSchemaPath(drillSchema))
+              SchemaUtilities.getSchemaPath(drillSchema))
           .build(logger);
     }
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
index 86d2e70911..abf4952557 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
@@ -33,7 +33,7 @@ import org.apache.calcite.tools.ValidationException;
 import org.apache.calcite.util.NlsString;
 import org.apache.calcite.util.Util;
 import org.apache.drill.common.exceptions.UserException;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.SqlSelectBuilder;
 import org.apache.drill.exec.planner.sql.parser.DrillParserUtil;
 import org.apache.drill.exec.planner.sql.parser.SqlShowTables;
@@ -63,11 +63,11 @@ public class ShowTablesHandler extends DefaultSqlHandler {
     SchemaPlus schemaPlus;
     if (node.getDb() != null) {
       List<String> schemaNames = node.getDb().names;
-      schemaPlus = SchemaUtilites.findSchema(config.getConverter().getDefaultSchema(), schemaNames);
+      schemaPlus = SchemaUtilities.findSchema(config.getConverter().getDefaultSchema(), schemaNames);
 
       if (schemaPlus == null) {
         throw UserException.validationError()
-            .message("Invalid schema name [%s]", SchemaUtilites.getSchemaPath(schemaNames))
+            .message("Invalid schema name [%s]", SchemaUtilities.getSchemaPath(schemaNames))
             .build(logger);
       }
 
@@ -76,14 +76,14 @@ public class ShowTablesHandler extends DefaultSqlHandler {
       schemaPlus = config.getConverter().getDefaultSchema();
     }
 
-    if (SchemaUtilites.isRootSchema(schemaPlus)) {
+    if (SchemaUtilities.isRootSchema(schemaPlus)) {
       // If the default schema is a root schema, throw an error to select a default schema
       throw UserException.validationError()
           .message("No default schema selected. Select a schema using 'USE schema' command")
           .build(logger);
     }
 
-    AbstractSchema drillSchema = SchemaUtilites.unwrapAsDrillSchemaInstance(schemaPlus);
+    AbstractSchema drillSchema = SchemaUtilities.unwrapAsDrillSchemaInstance(schemaPlus);
 
     SqlNode where = DrillParserUtil.createCondition(
         new SqlIdentifier(SHRD_COL_TABLE_SCHEMA, SqlParserPos.ZERO),
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SqlHandlerConfig.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SqlHandlerConfig.java
index 868c5f9135..2731da0845 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SqlHandlerConfig.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/SqlHandlerConfig.java
@@ -35,7 +35,7 @@ import org.apache.drill.exec.ops.QueryContext;
 import org.apache.drill.exec.planner.PlannerPhase;
 import org.apache.drill.exec.planner.common.DrillRelOptUtil;
 import org.apache.drill.exec.planner.logical.DrillTable;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.conversion.SqlConverter;
 import org.apache.drill.exec.store.StoragePlugin;
 import org.apache.drill.exec.store.StoragePluginRegistry;
@@ -109,7 +109,7 @@ public class SqlHandlerConfig {
     }
 
     private void collectPlugins(RelNode relNode) {
-      String pluginName = SchemaUtilites.getSchemaPathAsList(
+      String pluginName = SchemaUtilities.getSchemaPathAsList(
         relNode.getTable().getQualifiedName().iterator().next()).iterator().next();
       CheckedSupplier<StoragePlugin, StoragePluginRegistry.PluginException> pluginsProvider =
         () -> storagePlugins.getPlugin(pluginName);
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ViewHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ViewHandler.java
index 7812d84c93..089de0ce83 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ViewHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ViewHandler.java
@@ -32,7 +32,7 @@ import org.apache.drill.exec.dotdrill.View;
 import org.apache.drill.exec.ops.QueryContext;
 import org.apache.drill.exec.physical.PhysicalPlan;
 import org.apache.drill.exec.planner.sql.DirectPlan;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.parser.SqlCreateView;
 import org.apache.drill.exec.planner.sql.parser.SqlDropView;
 import org.apache.drill.exec.store.AbstractSchema;
@@ -75,10 +75,10 @@ public abstract class ViewHandler extends DefaultSqlHandler {
       final RelNode newViewRelNode = SqlHandlerUtil.resolveNewTableRel(true, createView.getFieldNames(), validatedRowType, queryRelNode);
 
       final SchemaPlus defaultSchema = context.getNewDefaultSchema();
-      final AbstractSchema drillSchema = SchemaUtilites.resolveToMutableDrillSchema(defaultSchema, createView.getSchemaPath());
+      final AbstractSchema drillSchema = SchemaUtilities.resolveToMutableDrillSchema(defaultSchema, createView.getSchemaPath());
 
       final View view = new View(newViewName, viewSql, newViewRelNode.getRowType(),
-          SchemaUtilites.getSchemaPathAsList(defaultSchema));
+          SchemaUtilities.getSchemaPathAsList(defaultSchema));
       final String schemaPath = drillSchema.getFullSchemaName();
 
       // check view creation possibility
@@ -159,7 +159,7 @@ public abstract class ViewHandler extends DefaultSqlHandler {
       SqlDropView dropView = unwrap(sqlNode, SqlDropView.class);
       final String viewName = DrillStringUtils.removeLeadingSlash(dropView.getName());
       final AbstractSchema drillSchema =
-          SchemaUtilites.resolveToMutableDrillSchema(context.getNewDefaultSchema(), dropView.getSchemaPath());
+          SchemaUtilities.resolveToMutableDrillSchema(context.getNewDefaultSchema(), dropView.getSchemaPath());
 
       final String schemaPath = drillSchema.getFullSchemaName();
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlCreateTable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlCreateTable.java
index 36eefa5e7e..047b10730f 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlCreateTable.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlCreateTable.java
@@ -19,7 +19,7 @@ package org.apache.drill.exec.planner.sql.parser;
 
 import java.util.List;
 
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.shaded.guava.com.google.common.base.Preconditions;
 
 import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
@@ -131,7 +131,7 @@ public class SqlCreateTable extends DrillSqlCall {
   }
 
   public List<String> getSchemaPath() {
-    return SchemaUtilites.getSchemaPath(tblName);
+    return SchemaUtilities.getSchemaPath(tblName);
   }
 
   public String getName() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlCreateView.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlCreateView.java
index 94dd1ba0a6..68e146d94c 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlCreateView.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlCreateView.java
@@ -17,7 +17,7 @@
  */
 package org.apache.drill.exec.planner.sql.parser;
 
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.shaded.guava.com.google.common.collect.Lists;
 import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
 import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
@@ -106,7 +106,7 @@ public class SqlCreateView extends DrillSqlCall {
   }
 
   public List<String> getSchemaPath() {
-    return SchemaUtilites.getSchemaPath(viewName);
+    return SchemaUtilities.getSchemaPath(viewName);
   }
 
   public String getName() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropTable.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropTable.java
index 797545ef0d..0ca518f126 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropTable.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropTable.java
@@ -19,7 +19,7 @@ package org.apache.drill.exec.planner.sql.parser;
 
 import java.util.List;
 
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
 import org.apache.drill.exec.planner.sql.handlers.DropTableHandler;
 import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
@@ -88,7 +88,7 @@ public class SqlDropTable extends DrillSqlCall {
   }
 
   public List<String> getSchema() {
-    return SchemaUtilites.getSchemaPath(tableName);
+    return SchemaUtilities.getSchemaPath(tableName);
   }
 
   public String getName() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropTableMetadata.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropTableMetadata.java
index 9f21922518..e9c258a54e 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropTableMetadata.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropTableMetadata.java
@@ -27,7 +27,7 @@ import org.apache.calcite.sql.SqlSpecialOperator;
 import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import org.apache.calcite.util.Util;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
 import org.apache.drill.exec.planner.sql.handlers.MetastoreDropTableMetadataHandler;
 import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
@@ -94,7 +94,7 @@ public class SqlDropTableMetadata extends DrillSqlCall {
   }
 
   public List<String> getSchemaPath() {
-    return SchemaUtilites.getSchemaPath(tableName);
+    return SchemaUtilities.getSchemaPath(tableName);
   }
 
   public String getName() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropView.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropView.java
index 2f5e002e8b..dc15cc41e8 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropView.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlDropView.java
@@ -19,7 +19,7 @@ package org.apache.drill.exec.planner.sql.parser;
 
 import java.util.List;
 
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
 import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
 import org.apache.drill.exec.planner.sql.handlers.ViewHandler.DropView;
@@ -88,7 +88,7 @@ public class SqlDropView extends DrillSqlCall {
   }
 
   public List<String> getSchemaPath() {
-    return SchemaUtilites.getSchemaPath(viewName);
+    return SchemaUtilities.getSchemaPath(viewName);
   }
 
   public String getName() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlRefreshMetadata.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlRefreshMetadata.java
index 9dd66d3a97..91df7cdba2 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlRefreshMetadata.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlRefreshMetadata.java
@@ -29,7 +29,7 @@ import org.apache.calcite.sql.SqlOperator;
 import org.apache.calcite.sql.SqlSpecialOperator;
 import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.parser.SqlParserPos;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
 import org.apache.drill.exec.planner.sql.handlers.RefreshMetadataHandler;
 import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
@@ -104,7 +104,7 @@ public class SqlRefreshMetadata extends DrillSqlCall {
   }
 
   public List<String> getSchemaPath() {
-    return SchemaUtilites.getSchemaPath(tblName);
+    return SchemaUtilities.getSchemaPath(tblName);
   }
 
   @Override
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlSchema.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlSchema.java
index 9fc3161461..45e4efe8c1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlSchema.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/parser/SqlSchema.java
@@ -30,7 +30,7 @@ import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import org.apache.calcite.sql.util.SqlBasicVisitor;
 import org.apache.drill.common.util.DrillStringUtils;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.handlers.AbstractSqlHandler;
 import org.apache.drill.exec.planner.sql.handlers.SqlHandlerConfig;
 import org.apache.drill.exec.planner.sql.handlers.SchemaHandler;
@@ -79,7 +79,7 @@ public abstract class SqlSchema extends DrillSqlCall {
   }
 
   public List<String> getSchemaPath() {
-    return hasTable() ? SchemaUtilites.getSchemaPath(table) : null;
+    return hasTable() ? SchemaUtilities.getSchemaPath(table) : null;
   }
 
   public String getTableName() {
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java b/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java
index a7594f6b69..1179ea6da0 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java
@@ -35,7 +35,7 @@ import org.apache.calcite.tools.ValidationException;
 import org.apache.drill.common.config.DrillConfig;
 import org.apache.drill.common.config.DrillProperties;
 import org.apache.drill.exec.planner.physical.PlannerSettings;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.planner.sql.handlers.SqlHandlerUtil;
 import org.apache.drill.exec.proto.UserBitShared.UserCredentials;
 import org.apache.drill.exec.proto.UserProtos.UserProperties;
@@ -218,23 +218,23 @@ public class UserSession implements AutoCloseable {
    */
   public void setDefaultSchemaPath(String newDefaultSchemaPath, SchemaPlus currentDefaultSchema)
       throws ValidationException {
-    final List<String> newDefaultPathAsList = SchemaUtilites.getSchemaPathAsList(newDefaultSchemaPath);
+    final List<String> newDefaultPathAsList = SchemaUtilities.getSchemaPathAsList(newDefaultSchemaPath);
     SchemaPlus newDefault;
 
     // First try to find the given schema relative to the current default schema.
-    newDefault = SchemaUtilites.findSchema(currentDefaultSchema, newDefaultPathAsList);
+    newDefault = SchemaUtilities.findSchema(currentDefaultSchema, newDefaultPathAsList);
 
     if (newDefault == null) {
       // If we fail to find the schema relative to current default schema, consider the given new default schema path as
       // absolute schema path.
-      newDefault = SchemaUtilites.findSchema(currentDefaultSchema, newDefaultPathAsList);
+      newDefault = SchemaUtilities.findSchema(currentDefaultSchema, newDefaultPathAsList);
     }
 
     if (newDefault == null) {
-      SchemaUtilites.throwSchemaNotFoundException(currentDefaultSchema, newDefaultSchemaPath);
+      SchemaUtilities.throwSchemaNotFoundException(currentDefaultSchema, newDefaultSchemaPath);
     }
 
-    properties.setProperty(DrillProperties.SCHEMA, SchemaUtilites.getSchemaPath(newDefault));
+    properties.setProperty(DrillProperties.SCHEMA, SchemaUtilities.getSchemaPath(newDefault));
   }
 
   /**
@@ -256,7 +256,7 @@ public class UserSession implements AutoCloseable {
       return null;
     }
 
-    return SchemaUtilites.findSchema(rootSchema, defaultSchemaPath);
+    return SchemaUtilities.findSchema(rootSchema, defaultSchemaPath);
   }
 
   /**
@@ -292,7 +292,7 @@ public class UserSession implements AutoCloseable {
    * @throws IOException if error during session temporary location creation
    */
   public String registerTemporaryTable(AbstractSchema schema, String tableName, DrillConfig config) throws IOException {
-    addTemporaryLocation(SchemaUtilites.resolveToValidTemporaryWorkspace(schema, config));
+    addTemporaryLocation(SchemaUtilities.resolveToValidTemporaryWorkspace(schema, config));
     String temporaryTableName = new Path(sessionId, UUID.randomUUID().toString()).toUri().getPath();
     String oldTemporaryTableName = temporaryTables.putIfAbsent(tableName.toLowerCase(), temporaryTableName);
     return oldTemporaryTableName == null ? temporaryTableName : oldTemporaryTableName;
@@ -334,7 +334,7 @@ public class UserSession implements AutoCloseable {
    * @return true if temporary table exists in schema, false otherwise
    */
   public boolean isTemporaryTable(AbstractSchema drillSchema, DrillConfig config, String tableName) {
-    if (drillSchema == null || !SchemaUtilites.isTemporaryWorkspace(drillSchema.getFullSchemaName(), config)) {
+    if (drillSchema == null || !SchemaUtilities.isTemporaryWorkspace(drillSchema.getFullSchemaName(), config)) {
       return false;
     }
     String temporaryTableName = resolveTemporaryTableName(tableName);
@@ -361,7 +361,7 @@ public class UserSession implements AutoCloseable {
     if (temporaryTable == null) {
       return;
     }
-    SqlHandlerUtil.dropTableFromSchema(SchemaUtilites.resolveToValidTemporaryWorkspace(schema, config), temporaryTable);
+    SqlHandlerUtil.dropTableFromSchema(SchemaUtilities.resolveToValidTemporaryWorkspace(schema, config), temporaryTable);
     temporaryTables.remove(tableName.toLowerCase());
   }
 
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/WorkspaceSchemaFactory.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/WorkspaceSchemaFactory.java
index 7023d81611..d4558c3eb1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/WorkspaceSchemaFactory.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/WorkspaceSchemaFactory.java
@@ -63,7 +63,7 @@ import org.apache.drill.exec.planner.logical.DrillViewTable;
 import org.apache.drill.exec.planner.logical.DynamicDrillTable;
 import org.apache.drill.exec.planner.logical.FileSystemCreateTableEntry;
 import org.apache.drill.exec.planner.sql.ExpandingConcurrentMap;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.record.metadata.schema.FsMetastoreSchemaProvider;
 import org.apache.drill.exec.store.AbstractSchema;
 import org.apache.drill.exec.store.PartitionNotFoundException;
@@ -413,7 +413,7 @@ public class WorkspaceSchemaFactory {
     }
 
     private boolean isTemporaryWorkspace() {
-      return SchemaUtilites.getSchemaPath(schemaPath).equals(schemaConfig.getTemporaryWorkspace());
+      return SchemaUtilities.getSchemaPath(schemaPath).equals(schemaConfig.getTemporaryWorkspace());
     }
 
     @Override
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/enumerable/EnumerableRecordReader.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/enumerable/EnumerableRecordReader.java
index ee079235cc..e0441ba2a7 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/enumerable/EnumerableRecordReader.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/enumerable/EnumerableRecordReader.java
@@ -30,7 +30,7 @@ import org.apache.drill.exec.physical.impl.scan.framework.ManagedReader;
 import org.apache.drill.exec.physical.impl.scan.framework.SchemaNegotiator;
 import org.apache.drill.exec.physical.resultSet.ResultSetLoader;
 import org.apache.drill.exec.physical.resultSet.RowSetLoader;
-import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SchemaUtilities;
 import org.apache.drill.exec.record.ColumnConverter;
 import org.apache.drill.exec.record.ColumnConverterFactory;
 import org.apache.drill.exec.record.metadata.TupleMetadata;
@@ -87,7 +87,7 @@ public class EnumerableRecordReader implements ManagedReader<SchemaNegotiator> {
   private void setup(OperatorContext context) {
     SchemaPlus rootSchema = context.getFragmentContext().getFullRootSchema();
     DataContext root = new DrillDataContext(
-        schemaPath != null ? SchemaUtilites.searchSchemaTree(rootSchema, SchemaUtilites.getSchemaPathAsList(schemaPath)) : rootSchema,
+        schemaPath != null ? SchemaUtilities.searchSchemaTree(rootSchema, SchemaUtilities.getSchemaPathAsList(schemaPath)) : rootSchema,
         new JavaTypeFactoryImpl(),
         Collections.emptyMap());
 
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestAnalyze.java b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestAnalyze.java
index 1d4b2f2b49..2eef180c07 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestAnalyze.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/sql/TestAnalyze.java
@@ -631,6 +631,17 @@ public class TestAnalyze extends ClusterTest {
     }
   }
 
+  @Test // DRILL-8394
+  public void testTrailingSlashInTableName() throws Exception {
+    try {
+      client.alterSession(ExecConstants.OUTPUT_FORMAT_OPTION, "parquet");
+      run("create table dfs.tmp.nation as select * from cp.`tpch/orders.parquet`");
+      run("analyze table dfs.tmp.`nation/` compute statistics");
+    } finally {
+      client.resetSession(ExecConstants.OUTPUT_FORMAT_OPTION);
+    }
+  }
+
   //Helper function to verify output of ANALYZE statement
   private void verifyAnalyzeOutput(String query, String message) throws Exception {
     DirectRowSet rowSet = queryBuilder().sql(query).rowSet();