Explorar el Código

HUE-5145 [metadata] Adding popular table filters API

Romain Rigaux hace 9 años
padre
commit
4ed8e7d

+ 6 - 8
desktop/libs/metadata/src/metadata/optimizer_api.py

@@ -185,20 +185,18 @@ def similar_queries(request):
 def popular_values(request):
   response = {'status': -1}
 
+  database_name = request.POST.get('databaseName')
   table_name = request.POST.get('tableName')
-  column_name = request.POST.get('columnName')
+  column_name = request.POST.get('columnName') # Unsused
 
   api = OptimizerApi()
-  data = api.popular_filter_values(table_name=table_name, column_name=column_name)
+  data = api.popular_filter_values(database_name=database_name, table_name=table_name, column_name=column_name)
 
   if data['status'] == 'success':
-    if 'status' in data['details']:
-      response['values'] = [] # Bug in Opt API
-    else:
-      response['values'] = data['details']
-      response['status'] = 0
+    response['status'] = 0
+    response['values'] = data['results']
   else:
-    response['message'] = 'Optimizer: %s' % data['details']
+    response['message'] = 'Optimizer: %s' % data
 
   return JsonResponse(response)
 

+ 6 - 15
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -208,21 +208,12 @@ class OptimizerApi(object):
         '--query', query
     ])
 
-  def popular_filter_values(self, table_name, column_name=None, token=None, email=None):
-    if token is None:
-      token = self._authenticate()
-
-    try:
-      data = {
-          'email': email if email is not None else self._email,
-          'token': token,
-          'tableName': table_name.lower()
-      }
-      if column_name:
-        data['columnName'] = column_name
-      return self._root.post('/api/getPopularFilterValues', data=json.dumps(data), contenttype=_JSON_CONTENT_TYPE)
-    except RestException, e:
-      raise PopupException(e, title=_('Error while accessing Optimizer'))
+  def popular_filter_values(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 OptimizerDataAdapter(queries):

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

@@ -178,6 +178,14 @@ class TestOptimizerApi(object):
     assert_true('clauseString' in resp, resp)
 
 
+  def test_popular_filter_values(self):  # Requires test_upload to run before
+    resp = self.api.popular_filter_values(database_name='db1', table_name='Part')
+
+    assert_equal('success', resp['status'], resp)
+    assert_true('qids' in resp, resp)
+    assert_true('popularValues' in resp, resp)
+
+
   def test_similar_queries(self):
     source_platform = 'hive'
     query = 'Select * from (Select item.id from item)'