浏览代码

[metastore] Ajaxify loading of the partitions

Johan Ahlen 10 年之前
父节点
当前提交
b14084d122

+ 61 - 5
apps/metastore/src/metastore/templates/metastore.mako

@@ -779,7 +779,7 @@ ${ assist.assistPanel() }
           self.loading(false);
           self.loading(false);
         }
         }
       })
       })
-    }
+    };
 
 
 
 
     MetastoreDatabase.prototype.setTable = function (metastoreTable) {
     MetastoreDatabase.prototype.setTable = function (metastoreTable) {
@@ -792,8 +792,54 @@ ${ assist.assistPanel() }
         $('a[href="#overview"]').click();
         $('a[href="#overview"]').click();
       }, 200);
       }, 200);
       huePubSub.publish('metastore.url.change');
       huePubSub.publish('metastore.url.change');
+    };
+
+    /**
+     * @param {Object} options
+     * @param {AssistHelper} options.assistHelper
+     * @param {MetastoreTable} options.metastoreTable
+     */
+    function MetastoreTablePartitions (options) {
+      var self = this;
+      self.rows = ko.observableArray();
+      self.headers = ko.observableArray();
+      self.metastoreTable = options.metastoreTable;
+      self.assistHelper = options.assistHelper;
+
+      self.loaded = ko.observable(false);
+      self.loading = ko.observable(true);
+
+      self.preview = {
+        headers: ko.observableArray(),
+        rows: ko.observableArray()
+      }
     }
     }
 
 
+    MetastoreTablePartitions.prototype.load = function () {
+      var self = this;
+      if (self.loaded()) {
+        return;
+      }
+      self.assistHelper.fetchPartitions({
+        databaseName: self.metastoreTable.database.name,
+        tableName: self.metastoreTable.name,
+        successCallback: function (data) {
+          self.rows(data.partition_values_json);
+          self.headers(data.partition_keys_json);
+          self.preview.rows(self.rows().slice(0, 3));
+          self.preview.headers(self.headers());
+          self.loading(false);
+          self.loaded(true);
+        },
+        errorCallback: function (data) {
+          console.error('assistHelper.fetchPartitions error');
+          console.error(data);
+          self.loading(false);
+          self.loaded(true);
+        }
+      })
+    };
+
     /**
     /**
      * @param {Object} options
      * @param {Object} options
      * @param {AssistHelper} options.assistHelper
      * @param {AssistHelper} options.assistHelper
@@ -841,7 +887,7 @@ ${ assist.assistPanel() }
           self.loaded(true);
           self.loaded(true);
         }
         }
       });
       });
-    }
+    };
 
 
 
 
     /**
     /**
@@ -869,6 +915,10 @@ ${ assist.assistPanel() }
         assistHelper: self.assistHelper,
         assistHelper: self.assistHelper,
         metastoreTable: self
         metastoreTable: self
       });
       });
+      self.partitions = new MetastoreTablePartitions({
+        assistHelper: self.assistHelper,
+        metastoreTable: self
+      });
       self.tableDetails = ko.observable();
       self.tableDetails = ko.observable();
       self.tableStats = ko.observable();
       self.tableStats = ko.observable();
       self.refreshingTableStats = ko.observable(false);
       self.refreshingTableStats = ko.observable(false);
@@ -881,7 +931,7 @@ ${ assist.assistPanel() }
 ##         $.post("${ url('metastore:alter_table', database=database, table=table.name) }", {
 ##         $.post("${ url('metastore:alter_table', database=database, table=table.name) }", {
 ##           comment: newValue ? newValue : ""
 ##           comment: newValue ? newValue : ""
 ##         });
 ##         });
-      })
+      });
 
 
       self.refreshTableStats = function () {
       self.refreshTableStats = function () {
         if (self.refreshingTableStats()) {
         if (self.refreshingTableStats()) {
@@ -902,7 +952,7 @@ ${ assist.assistPanel() }
             console.error(data);
             console.error(data);
           }
           }
         })
         })
-      }
+      };
 
 
       self.fetchFields = function () {
       self.fetchFields = function () {
         var self = this;
         var self = this;
@@ -924,7 +974,7 @@ ${ assist.assistPanel() }
             console.error(data);
             console.error(data);
           }
           }
         })
         })
-      }
+      };
 
 
       self.fetchDetails = function () {
       self.fetchDetails = function () {
         var self = this;
         var self = this;
@@ -939,6 +989,12 @@ ${ assist.assistPanel() }
             self.samples.load();
             self.samples.load();
             self.loaded(true);
             self.loaded(true);
             self.loading(false);
             self.loading(false);
+            if (data.partition_keys.length) {
+              self.partitions.load();
+            } else {
+              self.partitions.loading(false);
+              self.partitions.loaded(true);
+            }
           },
           },
           errorCallback: function (data) {
           errorCallback: function (data) {
             self.refreshingTableStats(false);
             self.refreshingTableStats(false);

+ 22 - 0
desktop/core/src/desktop/static/desktop/js/assist/assistHelper.js

@@ -117,6 +117,28 @@
     });
     });
   };
   };
 
 
+  /**
+   * @param {Object} options
+   * @param {string} options.databaseName
+   * @param {string} options.tableName
+   * @param {function} options.successCallback
+   * @param {function} options.errorCallback
+   */
+  AssistHelper.prototype.fetchPartitions = function (options) {
+    // http://127.0.0.1:8000/metastore/table/default/blog/partitions?format=json
+    $.ajax({
+      url: "/metastore/table/" + options.databaseName + "/" + options.tableName + "/partitions",
+      data: {
+        "format" : 'json'
+      },
+      beforeSend: function (xhr) {
+        xhr.setRequestHeader("X-Requested-With", "Hue");
+      },
+      success: options.successCallback,
+      error: options.errorCallback
+    });
+  };
+
   /**
   /**
    * @param {Object} options
    * @param {Object} options
    * @param {string} options.sourceType
    * @param {string} options.sourceType