Преглед на файлове

[impala] Export query result

Be able to choose folder when selecting a file.
Overwrite appears to be broken on the front end.
Provide different help text.
Abraham Elmahrek преди 11 години
родител
ревизия
adcebbc
променени са 2 файла, в които са добавени 57 реда и са изтрити 10 реда
  1. 18 6
      apps/beeswax/src/beeswax/templates/execute.mako
  2. 39 4
      apps/beeswax/static/js/beeswax.vm.js

+ 18 - 6
apps/beeswax/src/beeswax/templates/execute.mako

@@ -522,7 +522,6 @@ ${layout.menubar(section='query')}
 <div id="chooseFile" class="modal hide fade">
   <div class="modal-header">
     <a href="#" class="close" data-dismiss="modal">&times;</a>
-
     <h3>${_('Choose a file')}</h3>
   </div>
   <div class="modal-body">
@@ -536,7 +535,6 @@ ${layout.menubar(section='query')}
 <div id="chooseFolder" class="modal hide fade">
   <div class="modal-header">
     <a href="#" class="close" data-dismiss="modal">&times;</a>
-
     <h3>${_('Choose a folder')}</h3>
   </div>
   <div class="modal-body">
@@ -547,6 +545,19 @@ ${layout.menubar(section='query')}
   </div>
 </div>
 
+<div id="choosePath" class="modal hide fade">
+  <div class="modal-header">
+    <a href="#" class="close" data-dismiss="modal">&times;</a>
+    <h3>${_('Choose a path')}</h3>
+  </div>
+  <div class="modal-body">
+    <div id="pathchooser">
+    </div>
+  </div>
+  <div class="modal-footer">
+  </div>
+</div>
+
 
 <div id="saveAs" class="modal hide fade">
   <div class="modal-header">
@@ -601,7 +612,7 @@ ${layout.menubar(section='query')}
               &nbsp;${ _('In an HDFS file') }
             </label>
             <span data-bind="visible: $root.design.results.save.type() == 'hdfs-file'">
-              <input data-bind="value: $root.design.results.save.path" type="text" name="target_file" placeholder="${_('Results location')}" class="fileChooser">
+              <input data-bind="value: $root.design.results.save.path" type="text" name="target_file" placeholder="${_('Results location')}" class="pathChooser">
             </span>
             <label class="radio" data-bind="visible: $root.design.results.save.type() == 'hdfs-file'">
               <input data-bind="checked: $root.design.results.save.overwrite" type="checkbox" name="overwrite">
@@ -635,7 +646,7 @@ ${layout.menubar(section='query')}
       </fieldset>
     </form>
     <div id="hdfs-directory-help-content" class="hide">
-      <p>${ _("Using this option will rerun the query. Use the 'save as file' option to skip rerunning the query.") }</p>
+      <p>${ _("Use this option if you have a large result. It will rerun the entire query.") }</p>
     </div>
   </div>
   <div class="modal-footer">
@@ -698,11 +709,11 @@ ${layout.menubar(section='query')}
     margin-bottom: 5px;
   }
 
-  #chooseFile, #chooseFolder {
+  #chooseFile, #chooseFolder, #choosePath {
     z-index: 1100;
   }
 
-  #filechooser, #folderchooser {
+  #filechooser, #folderchooser, #pathchooser {
     min-height: 100px;
     overflow-y: auto;
   }
@@ -2151,6 +2162,7 @@ $(window).data('beforeunload', window.onbeforeunload);
 % endif
 
 $(".folderChooser:not(:has(~ button))").after(getFolderBrowseButton($(".folderChooser:not(:has(~ button))"), true));
+$(".pathChooser:not(:has(~ button))").after(getPathBrowseButton($(".pathChooser:not(:has(~ button))"), true));
 
 
 // Routie

+ 39 - 4
apps/beeswax/static/js/beeswax.vm.js

@@ -56,8 +56,9 @@ function BeeswaxViewModel(server) {
       'errors': [],
       'save': {
         'errors': null,
-        'type': 'hive-table',
-        'path': null
+        'type': 'hdfs-file',
+        'path': null,
+        'overwrite': true
       }
     },
     'watch': {
@@ -160,7 +161,9 @@ function BeeswaxViewModel(server) {
   };
 
   self.updateDatabases = function(databases) {
-    self.databases(databases);
+    if (databases) {
+      self.databases(databases);
+    }
   };
 
   self.updateDesign = function(design) {
@@ -784,7 +787,8 @@ function BeeswaxViewModel(server) {
         case 'hdfs-file':
         data = {
           'server': self.server(),
-          'path': self.design.results.save.path()
+          'path': self.design.results.save.path(),
+          'overwrite': self.design.results.save.overwrite()
         };
         url = '/' + self.server() + '/api/query/' + self.design.history.id() + '/results/save/hdfs/file';
         break;
@@ -895,6 +899,37 @@ function getFolderBrowseButton(inputElement) {
   });
 }
 
+function pathChooser(inputElement) {
+  $("#pathchooser").jHueFileChooser({
+    initialPath: inputElement.val(),
+    onFolderChoose:function (folderPath) {
+      if (folderPath[folderPath.length - 1] != '/') {
+        folderPath += '/';
+      }
+      inputElement.val(folderPath + 'results');
+      inputElement.trigger("change");
+      $("#choosePath").modal("hide");
+    },
+    onFileChoose: function (filePath) {
+      inputElement.val(filePath);
+      inputElement.trigger("change");
+      $("#choosePath").modal("hide");
+    },
+    selectFolder: true,
+    createFolder: true,
+    selectFile: true,
+    uploadFile: true
+  });
+  $("#choosePath").modal("show");
+}
+
+function getPathBrowseButton(inputElement) {
+  return $("<button>").addClass("btn").addClass("fileChooserBtn").text("..").click(function (e) {
+    e.preventDefault();
+    pathChooser(inputElement);
+  });
+}
+
 
 // utils
 function clickHard(el) {