Browse Source

HUE-5145 [metadata] Adding more information about popular queries and joins

Romain Rigaux 9 năm trước cách đây
mục cha
commit
5dae2bb2c0

+ 9 - 9
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -498,7 +498,7 @@ var MetastoreViewModel = (function () {
                   self.optimizerDetails(ko.mapping.fromJS(data.details));
 
                   // Bump the most important columns first
-                  var topCol = self.optimizerDetails().table_donut.topColumns().slice(0, 5);
+                  var topCol = self.optimizerDetails().topColumns().slice(0, 5);
                   if (topCol.length >= 3 && self.favouriteColumns().length > 0) {
                     self.favouriteColumns($.grep(self.columns(), function(col) {
                         return topCol.indexOf(col.name()) != -1;
@@ -506,14 +506,14 @@ var MetastoreViewModel = (function () {
                     );
                   }
                   // Column popularity, stats
-                  $.each(self.optimizerDetails().sortedTotal(), function(index, optimizerCol) {
-                    var metastoreCol = $.grep(self.columns(), function(col) {
-                      return col.name() == optimizerCol.columnName();
-                    });
-                    if (metastoreCol.length > 0) {
-                      metastoreCol[0].popularity(optimizerCol.totalCount())
-                    }
-                  });
+//                  $.each(self.optimizerDetails().topColumns(), function(index, optimizerCol) {
+//                    var metastoreCol = $.grep(self.columns(), function(col) {
+//                      return col.name() == optimizerCol.columnName();
+//                    });
+//                    if (metastoreCol.length > 0) {
+//                      metastoreCol[0].popularity(optimizerCol.totalCount())
+//                    }
+//                  });
                 } else {
                   $(document).trigger("info", data.message);
                 }

+ 22 - 17
apps/metastore/src/metastore/templates/metastore.mako

@@ -690,29 +690,34 @@ ${ assist.assistPanel() }
 <script type="text/html" id="metastore-queries-tab">
   <br/>
   <i class="fa fa-spinner fa-spin" data-bind="visible: $root.loadingQueries"></i>
-  <table data-bind="visible: ! loadingQueries() && $data.optimizerDetails().FullQueryList().length > 0" class="table table-condensed">
+  <table data-bind="visible: ! loadingQueries() && $data.optimizerDetails().queryList().length > 0" class="table table-condensed">
     <thead>
     <tr>
       <th width="10%">${ _('Id') }</th>
-      <th width="10%">${ _('Count') }</th>
+      <th width="10%">${ _('Popularity') }</th>
       <th>${ _('Character') }</th>
+      <th>${ _('Query') }</th>
       <th width="20%">${ _('Complexity') }</th>
       <th width="10%">${ _('Hive Compatible') }</th>
       <th width="10%">${ _('Impala Compatible') }</th>
     </tr>
     </thead>
-    <tbody data-bind="hueach: {data: $data.optimizerDetails().FullQueryList(), itemHeight: 29, scrollable: '.right-panel', scrollableOffset: 200}">
-    <tr class="pointer" data-bind="click: function(){ window.open($root.optimizerUrl() + '#/query/' + eid(), '_blank'); }">
-      <td data-bind="text: eid"></td>
-      <td data-bind="text: instanceCount"></td>
-      <td><code data-bind="text: character"></code></td>
-      <td data-bind="text: complexity, css: {'alert-success': complexity() == 'Low', 'alert-warning': complexity() == 'Medium', 'alert-danger': complexity() == 'High'}" class="alert"></td>
-      <td data-bind="text: compatibility.hive"></td>
-      <td data-bind="text: compatibility.impala"></td>
+    <tbody data-bind="hueach: {data: $data.optimizerDetails().queryList(), itemHeight: 29, scrollable: '.right-panel', scrollableOffset: 200}">
+    <tr class="pointer" data-bind="click: function(){ window.open($root.optimizerUrl() + '#/query/' + qid(), '_blank'); }">
+      <td data-bind="text: qid"></td>
+      <td style="height: 10px; width: 70px; margin-top:5px;" data-bind="attr: {'title': queryCount()}">
+        <div class="progress bar" style="background-color: #338bb8" data-bind="style: { 'width' : Math.round(queryCount() / $parent.optimizerDetails().queryCount() * 100) + '%' }"></div>
+      </td>
+      <td><code data-bind="text: queryChar"></code></td>
+      <td><code data-bind="text: query().substring(0, 100) + '...'"></code></td>
+      ##<td data-bind="text: complexity, css: {'alert-success': complexity() == 'Low', 'alert-warning': complexity() == 'Medium', 'alert-danger': complexity() == 'High'}" class="alert"></td>
+      <td class="alert alert-danger"></td>
+      <td data-bind="text: hiveCompatible"></td>
+      <td data-bind="text: impalaCompatible"></td>
     </tr>
     </tbody>
   </table>
-  <div data-bind="visible: ! loadingQueries() && $data.optimizerDetails().FullQueryList().length == 0" class="empty-message">
+  <div data-bind="visible: ! loadingQueries() && $data.optimizerDetails().queryList().length == 0" class="empty-message">
     ${ _('No queries found for the current table.') }
   </div>
 </script>
@@ -760,7 +765,7 @@ ${ assist.assistPanel() }
     <!-- ko if: $root.optimizerEnabled() -->
       <!-- ko if: $root.database().table().optimizerDetails() -->
       <li><a href="#permissions" data-toggle="tab" data-bind="click: function(){ $root.currentTab('table-permissions'); }">${_('Permissions')}</a></li>
-      <li><a href="#queries" data-toggle="tab" data-bind="click: function(){ $root.currentTab('table-queries'); }">${_('Queries')} (<span data-bind="text: $root.database().table().optimizerDetails().total"></span>)</a></li>
+      <li><a href="#queries" data-toggle="tab" data-bind="click: function(){ $root.currentTab('table-queries'); }">${_('Queries')} (<span data-bind="text: $root.database().table().optimizerDetails().queryCount"></span>)</a></li>
       <li><a href="#joins" data-toggle="tab" data-bind="click: function(){ $root.currentTab('table-joins'); }">${_('Joins')} (<span data-bind="text: $root.database().table().optimizerDetails().joinCount"></span>)</a></li>
       <!-- /ko -->
       <!-- ko if: $root.database().table().relationshipsDetails() -->
@@ -978,18 +983,18 @@ ${ assist.assistPanel() }
 
     <div class="tab-pane" id="joins">
       <!-- ko if: $root.optimizerEnabled() && $root.database().table().optimizerDetails() -->
-      <!-- ko with: $root.database().table().optimizerDetails().table_donut -->
-        <table data-bind="visible: joinedtables().length > 0" class="table table-condensed">
+      <!-- ko with: $root.database().table().optimizerDetails().joinTables -->
+        <table data-bind="visible: $data.length > 0" class="table table-condensed">
           <thead>
           <tr>
             <th width="10%">${ _('Id') }</th>
-            <th width="10%">${ _('Join Percentage') }</th>
+            <th width="10%">${ _('Popularity') }</th>
             <th width="30%">${ _('Table Name') }</th>
             <th>${ _('Join Column') }</th>
             <th width="10%">${ _('Join counts') }</th>
           </tr>
           </thead>
-          <tbody data-bind="hueach: {data: joinedtables(), itemHeight: 29, scrollable: '.right-panel', scrollableOffset: 200}">
+          <tbody data-bind="hueach: {data: $data, itemHeight: 29, scrollable: '.right-panel', scrollableOffset: 200}">
           <tr>
             <td class="pointer" data-bind="text: tableEid, click: function(){ window.open($root.optimizerUrl() + '#/table/' + tableEid(), '_blank'); }"></td>
             <td style="height: 10px; width: 70px; margin-top:5px;" data-bind="attr: {'title': joinpercent()}">
@@ -997,7 +1002,7 @@ ${ assist.assistPanel() }
             </td>
             <td><a data-bind="text: tableName, attr: { href: '/metastore/table/' + $root.database().name + '/' + tableName() }"</a></td>
             <td class="pointer"><code data-bind="text: joinColumns, click: scrollToColumn"></code></td>
-            <td data-bind="text: joincount"></td>
+            <td data-bind="text: numJoins"></td>
           </tr>
           </tbody>
         </table>

+ 7 - 7
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -96,7 +96,7 @@ class OptimizerApi(object):
       raise OptimizerApiException(e, title=_('Error while accessing Optimizer'))
 
     if data:
-      response = json.loads(data) 
+      response = json.loads(data)
       response['status'] = 'success'
     return response
 
@@ -170,24 +170,24 @@ class OptimizerApi(object):
         raise PopupException(e, title=_('Error while accessing Optimizer'))
 
 
-  def top_tables(self, workfloadId=None, database_name='default'): 
+  def top_tables(self, workfloadId=None, database_name='default'):
     return self._exec('get-top-tables', [
         '--tenant', self._product_name,
-        '--db-name', database_name
+        '--db-name', database_name.lower()
     ])
 
 
   def table_details(self, database_name, table_name):
     return self._exec('get-tables-detail', [
         '--tenant', self._product_name,
-        '--db-name', database_name,
-        '--table-name', table_name
+        '--db-name', database_name.lower(),
+        '--table-name', table_name.lower()
     ])
 
 
   def query_compatibility(self, source_platform, target_platform, query):
     return self._exec('get-query-compatible', [
-        '--tenant', self._product_name,        
+        '--tenant', self._product_name,
         '--source-platform', source_platform,
         '--target-platform', target_platform,
         '--query', query,
@@ -216,7 +216,7 @@ class OptimizerApi(object):
       data = {
           'email': email if email is not None else self._email,
           'token': token,
-          'tableName': table_name
+          'tableName': table_name.lower()
       }
       if column_name:
         data['columnName'] = column_name