Kaynağa Gözat

HUE-5232 [metadata] Add top aggs API

Romain Rigaux 9 yıl önce
ebeveyn
işleme
fa477b2fbf

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

@@ -150,7 +150,7 @@ var MetastoreViewModel = (function () {
             $(document).trigger("error", xhr.responseText);
           });
 
-          $.post('/metadata/api/optimizer_api/top_tables', {
+          $.post('/metadata/api/optimizer/top_tables', {
             database: self.name
           }, function(data){
             if (data && data.status == 0) {
@@ -485,7 +485,7 @@ var MetastoreViewModel = (function () {
               });
             }
             if (self.optimizerEnabled) {
-              $.post('/metadata/api/optimizer_api/table_details', {
+              $.post('/metadata/api/optimizer/table_details', {
                 databaseName: self.database.name,
                 tableName: self.name
               }, function(data){

+ 21 - 2
desktop/libs/metadata/src/metadata/optimizer_api.py

@@ -183,7 +183,7 @@ def similar_queries(request):
 
 @require_POST
 @error_handler
-def popular_values(request):
+def top_filters(request):
   response = {'status': -1}
 
   database_name = request.POST.get('databaseName')
@@ -191,7 +191,7 @@ def popular_values(request):
   column_name = request.POST.get('columnName') # Unsused
 
   api = OptimizerApi()
-  data = api.popular_filter_values(database_name=database_name, table_name=table_name, column_name=column_name)
+  data = api.top_filters(database_name=database_name, table_name=table_name, column_name=column_name)
 
   if data['status'] == 'success':
     response['status'] = 0
@@ -221,6 +221,25 @@ def top_joins(request):
   return JsonResponse(response)
 
 
+@require_POST
+@error_handler
+def top_aggs(request):
+  response = {'status': -1}
+
+  db_tables = json.loads(request.POST.get('dbTables'), '[]')
+
+  api = OptimizerApi()
+  data = api.top_aggs(db_tables=db_tables)
+
+  if data['status'] == 'success':
+    response['status'] = 0
+    response['values'] = data['results']
+  else:
+    response['message'] = 'Optimizer: %s' % data
+
+  return JsonResponse(response)
+
+
 @require_POST
 @error_handler
 def upload_history(request):

+ 8 - 1
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -208,13 +208,20 @@ class OptimizerApi(object):
         '--query', query
     ])
 
-  def popular_filter_values(self, database_name, table_name, column_name=None):
+  def top_filters(self, database_name, table_name, column_name=None):
     return self._exec('get-top-filters', [
         '--tenant', self._product_name,
         '--db-name', database_name.lower(),
         '--table-name', table_name.lower()
     ])
 
+  def top_aggs(self, database_name, table_name, column_name=None):
+    return self._exec('get-top-aggs', [
+        '--tenant', self._product_name,
+        '--db-name', database_name.lower(),
+        '--table-name', table_name.lower()
+    ])
+
   def top_joins(self, db_tables=None):
     args = [
         '--tenant', self._product_name,

+ 12 - 0
desktop/libs/metadata/src/metadata/optimizer_client_tests.py

@@ -197,6 +197,18 @@ class TestOptimizerApi(object):
     assert_true('columns' in resp['results'][0], resp)
 
 
+  def test_top_aggs(self):
+    resp = self.api.top_aggs(db_tables='db1.Part')
+
+    assert_equal('success', resp['status'], resp)
+    assert_true('tables' in resp['results'][0], resp)
+    assert_true('queryIds' in resp['results'][0], resp)
+    assert_true('totalTableCount' in resp['results'][0], resp)
+    assert_true('totalQueryCount' in resp['results'][0], resp)
+    assert_true('type' in resp['results'][0], resp)
+    assert_true('columns' in resp['results'][0], resp)
+
+
   def test_similar_queries(self):
     source_platform = 'hive'
     query = 'Select * from (Select item.id from item)'

+ 4 - 1
desktop/libs/metadata/src/metadata/urls.py

@@ -37,7 +37,6 @@ urlpatterns = patterns('metadata.navigator_api',
 # Optimizer API
 urlpatterns += patterns('metadata.optimizer_api',
   url(r'^api/optimizer/upload_history/?$', 'upload_history', name='upload_history'),
-  url(r'^api/optimizer/popular_values/?$', 'popular_values', name='popular_values'),
   url(r'^api/optimizer/similar_queries/?$', 'similar_queries', name='similar_queries'),
 
   #v2
@@ -45,7 +44,11 @@ urlpatterns += patterns('metadata.optimizer_api',
 
   url(r'^api/optimizer/top_tables/?$', 'top_tables', name='top_tables'),
   url(r'^api/optimizer/top_joins/?$', 'top_joins', name='top_joins'),
+  url(r'^api/optimizer/top_filters/?$', 'top_filters', name='top_filters'),
+  url(r'^api/optimizer/top_aggs/?$', 'top_aggs', name='top_aggs'),
+
   url(r'^api/optimizer/table_details/?$', 'table_details', name='table_details'),
+
   url(r'^api/optimizer/query_risk/?$', 'query_risk', name='query_risk'),
   url(r'^api/optimizer/query_compatibility/?$', 'query_compatibility', name='query_compatibility'),
 )