فهرست منبع

HUE-3450 [metadata] Add related queries on table page

Romain Rigaux 9 سال پیش
والد
کامیت
612522c

+ 14 - 15
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -48,7 +48,7 @@
     self.loading = ko.observable(false);
     self.tables = ko.observableArray();
     self.stats = ko.observable();
-    self.optimizerStats = ko.observableArray();
+    self.optimizerStats = ko.observableArray(); // TODO to plugify, duplicates similar MetastoreTable
     self.navigatorStats = ko.observable();
 
     self.showAddTagName = ko.observable(false);
@@ -355,6 +355,7 @@
     self.refreshingTableStats = ko.observable(false);
     self.showAddTagName = ko.observable(false);
     self.addTagName = ko.observable('');
+    self.loadingQueries = ko.observable(true);
 
     //TODO: Fetch table comment async and don't set it from python
     self.comment = ko.observable(options.comment);
@@ -443,7 +444,7 @@
                 type: 'table',
                 database: self.database.name,
                 name: self.name
-              }, function(data){
+              }, function(data) {
                 if (data && data.status == 0) {
                   self.navigatorStats(ko.mapping.fromJS(data.entity));
                 } else {
@@ -452,16 +453,19 @@
               }).fail(function (xhr, textStatus, errorThrown) {
                 $(document).trigger("error", xhr.responseText);
               });
+
               $.post('/metadata/api/optimizer_api/table_details', {
                 tableName: self.name
-                }, function(data){
-                  if (data && data.status == 0) {
-                    self.optimizerDetails(ko.mapping.fromJS(data.table_details));
-                  } else {
-                    $(document).trigger("info", data.message);
-                  }
+              }, function(data){
+                self.loadingQueries(false);
+                if (data && data.status == 0) {
+                  self.optimizerDetails(ko.mapping.fromJS(data.details));
+                  console.log(self.optimizerDetails());
+                } else {
+                  $(document).trigger("info", data.message);
+                }
               }).fail(function (xhr, textStatus, errorThrown) {
-                  $(document).trigger("error", xhr.responseText);
+                $(document).trigger("error", xhr.responseText);
               });
             }
           }
@@ -584,7 +588,7 @@
       huePubSub.publish('meta.optimizer.enabled', newValue);
     });
 
-    self.optimizerUrl = ko.observable(options.optimizer_url);
+    self.optimizerUrl = ko.observable(options.optimizerUrl);
 
     huePubSub.subscribe("assist.db.panel.ready", function () {
       huePubSub.publish('assist.set.database', {
@@ -747,11 +751,6 @@
       }
     });
 
-    // TODO: Move queries into MetastoreTable
-    self.loadingQueries = ko.observable(false);
-    self.queries = ko.observableArray([]);
-
-
     function loadURL() {
       var path = window.location.pathname.split('/');
       switch (path[2]) {

+ 24 - 27
apps/metastore/src/metastore/templates/metastore.mako

@@ -685,23 +685,29 @@ ${ assist.assistPanel() }
 
 <script type="text/html" id="metastore-queries-tab">
   <i class="fa fa-spinner fa-spin" data-bind="visible: $root.loadingQueries"></i>
-  <table data-bind="visible: !$root.loadingQueries() && $root.queries().length > 0" class="table table-condensed">
+  <table data-bind="visible: ! loadingQueries() && $data.optimizerDetails().FullQueryList().length > 0" class="table table-condensed">
     <thead>
     <tr>
-      <th width="20%">${ _('Name') }</th>
-      <th>${ _('Query') }</th>
-      <th width="20%">${ _('Owner') }</th>
+      <th width="10%">${ _('Id') }</th>
+      <th width="10%">${ _('Count') }</th>
+      <th>${ _('Character') }</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: $root.queries, itemHeight: 29, scrollable: '.right-panel', scrollableOffset: 200}">
-    <tr class="pointer" data-bind="click: function(){ location.href=doc.absoluteUrl; }">
-      <td data-bind="text: doc.name"></td>
-      <td><code data-bind="text: data.snippets[0].statement_raw"></code></td>
-      <td><code data-bind="text: doc.owner"></code></td>
+    <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>
     </tr>
     </tbody>
   </table>
-  <div data-bind="visible: !$root.loadingQueries() && $root.queries().length == 0" class="empty-message">
+  <div data-bind="visible: ! loadingQueries() && $data.optimizerDetails().FullQueryList().length == 0" class="empty-message">
     ${ _('No queries found for the current table.') }
   </div>
 </script>
@@ -951,8 +957,8 @@ ${ assist.assistPanel() }
     </div>
 
     <div class="tab-pane" id="queries">
-      <!-- ko if: $root.currentTab() == 'table-queries' -->
-      <!-- ko template: 'metastore-queries-tab' --><!-- /ko -->
+      <!-- ko if: $root.optimizerEnabled() && $root.currentTab() == 'table-queries' -->
+        <!-- ko template: {name: 'metastore-queries-tab', data: $root.database().table()} --><!-- /ko -->
       <!-- /ko -->
     </div>
 
@@ -960,15 +966,12 @@ ${ assist.assistPanel() }
       <!-- ko if: $root.database() && $root.database().table() -->
         <span data-bind="text: $root.database().table().optimizerDetails()"></span>
         
-        ## top cols
+        ## show top 5 most important
+        ## top stats above tags
         
-        ## joined tables
+        ## joined tables --> relationsips
         
-        ## col stats
-        
-        ## query lists
-        
-        ## link to optimizer
+        ## col stats, nb# joins on ....
       <!-- /ko -->
     </div>
 
@@ -1096,7 +1099,8 @@ ${ assist.assistPanel() }
           errorLoadingDatabases: '${ _('There was a problem loading the databases. Please try again.') }',
           errorLoadingTablePreview: '${ _('There was a problem loading the table preview. Please try again.') }'
         },
-        optimizerEnabled: '${is_optimizer_enabled}' === 'True'
+        optimizerEnabled: '${ is_optimizer_enabled }' === 'True',
+        optimizerUrl: '${ optimizer_url }'
       };
 
       var viewModel = new MetastoreViewModel(options);
@@ -1107,13 +1111,6 @@ ${ assist.assistPanel() }
       });
 
       viewModel.currentTab.subscribe(function(tab){
-        if (tab == 'table-queries') {
-          viewModel.loadingQueries(true);
-          $.getJSON('/metastore/table/' + viewModel.database().name + '/' + viewModel.database().table().name + '/queries', function (data) {
-            viewModel.queries(data.queries);
-            viewModel.loadingQueries(false);
-          });
-        }
         if (tab == 'table-sample') {
           var selector = '#sample .sample-table';
           if ($(selector).parents('.dataTables_wrapper').length == 0){

+ 3 - 1
apps/metastore/src/metastore/views.py

@@ -81,6 +81,7 @@ def databases(request):
     'partitions': [],
     'has_write_access': has_write_access(request.user),
     'is_optimizer_enabled': has_optimizer(),
+    'optimizer_url': get_optimizer_url(),
   })
 
 
@@ -253,7 +254,8 @@ def describe_table(request, database, table):
       'partitions': partitions,
       'database': database,
       'has_write_access': has_write_access(request.user),
-      'is_optimizer_enabled': has_optimizer()
+      'is_optimizer_enabled': has_optimizer(),
+      'optimizer_url': get_optimizer_url()
     })
 
 

+ 1 - 1
desktop/libs/metadata/src/metadata/optimizer_api.py

@@ -100,7 +100,7 @@ def table_details(request):
 
   api = OptimizerApi()
 
-  response['table_details'] = api.table_details(table_name=table_name)
+  response['details'] = api.table_details(table_name=table_name)['details']
   response['status'] = 0
 
   return JsonResponse(response)