diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
index ec2a400..e1fc811 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryResources.java
@@ -45,6 +45,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Path("/")
 @RolesAllowed(DrillUserPrincipal.AUTHENTICATED_ROLE)
@@ -66,13 +67,20 @@
   @Inject
   HttpServletRequest request;
 
+  @Inject
+  StorageResources sr;
+
   @GET
   @Path("/query")
   @Produces(MediaType.TEXT_HTML)
   public Viewable getQuery() {
+    List<StorageResources.StoragePluginModel> enabledPlugins = sr.getConfigsFor("enabled")
+      .stream()
+      .map(plugin -> new StorageResources.StoragePluginModel(plugin, request))
+      .collect(Collectors.toList());
     return ViewableWithPermissions.create(
         authEnabled.get(), "/rest/query/query.ftl",
-        sc, new QueryPage(work, request));
+        sc, new QueryPage(work, enabledPlugins, request));
   }
 
   @POST
@@ -119,10 +127,12 @@
     private final boolean onlyImpersonationEnabled;
     private final boolean autoLimitEnabled;
     private final int defaultRowsAutoLimited;
+    private final List<StorageResources.StoragePluginModel> enabledPlugins;
     private final String csrfToken;
 
-    public QueryPage(WorkManager work, HttpServletRequest request) {
+    public QueryPage(WorkManager work, List<StorageResources.StoragePluginModel> enabledPlugins, HttpServletRequest request) {
       DrillConfig config = work.getContext().getConfig();
+      this.enabledPlugins = enabledPlugins;
       //if impersonation is enabled without authentication, will provide mechanism to add user name to request header from Web UI
       onlyImpersonationEnabled = WebServer.isOnlyImpersonationEnabled(config);
       autoLimitEnabled = config.getBoolean(ExecConstants.HTTP_WEB_CLIENT_RESULTSET_AUTOLIMIT_CHECKED);
@@ -142,6 +152,10 @@
       return defaultRowsAutoLimited;
     }
 
+    public List<StorageResources.StoragePluginModel> getEnabledPlugins() {
+      return enabledPlugins;
+    }
+
     public String getCsrfToken() {
       return csrfToken;
     }
diff --git a/exec/java-exec/src/main/resources/rest/query/query.ftl b/exec/java-exec/src/main/resources/rest/query/query.ftl
index e7bbed2..1034674 100644
--- a/exec/java-exec/src/main/resources/rest/query/query.ftl
+++ b/exec/java-exec/src/main/resources/rest/query/query.ftl
@@ -82,7 +82,17 @@
       Submit
     </button>
     <input type="checkbox" name="forceLimit" value="limit" <#if model.isAutoLimitEnabled()>checked</#if>> Limit results to <input type="text" id="autoLimit" name="autoLimit" min="0" value="${model.getDefaultRowsAutoLimited()?c}" size="6" pattern="[0-9]*"> rows <span class="glyphicon glyphicon-info-sign" title="Limits the number of records retrieved in the query. Ignored if query has a limit already" style="cursor:pointer"></span>
-    <label> Default Schema <input type="text" size="10" name="defaultSchema" id="defaultSchema"> </label>
+    <label for="defaultSchema">
+      Default Schema
+      <input type="text" name="defaultSchema" id="defaultSchema" list="enabledPlugins" placeholder="-- default schema --">
+      <datalist id="enabledPlugins">
+        <#list model.getEnabledPlugins() as pluginModel>
+          <#if pluginModel.getPlugin()?? && pluginModel.getPlugin().enabled() == true>
+            <option value="${pluginModel.getPlugin().getName()}">
+          </#if>
+        </#list>
+      </datalist>
+    </label>
     <span class="glyphicon glyphicon-info-sign" title="Set the default schema used to find table names, and for SHOW FILES and SHOW TABLES" style="cursor:pointer"></span>
     <input type="hidden" name="csrfToken" value="${model.getCsrfToken()}">
   </form>
