Bläddra i källkod

HUE-3450 [metadata] Add similar queries API

Romain Rigaux 9 år sedan
förälder
incheckning
81e5477cc5

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

@@ -106,7 +106,6 @@ def table_details(request):
   if data['status'] == 'success':
     response['status'] = 0
     response['details'] = data['details']
-    print [c['columnName'] for c in data['details']['sortedTotal']]
   else:
     response['message'] = 'Optimizer: %s' % data['details']
 
@@ -161,6 +160,27 @@ def query_complexity(request):
   return JsonResponse(response)
 
 
+@require_POST
+@error_handler
+def simiar_queries(request):
+  response = {'status': -1}
+
+  source_platform = request.POST.get('sourcePlatform')
+  query = request.POST.get('query')
+
+  api = OptimizerApi()
+
+  data = api.similar_queries(source_platform=source_platform, query=query)
+
+  if data['status'] == 'success':
+    response['status'] = 0
+    response['similar_queries'] = json.loads(data['details']['similarQueries'])
+  else:
+    response['message'] = 'Optimizer: %s' % data['details']
+
+  return JsonResponse(response)
+
+
 @require_POST
 @error_handler
 def popular_values(request):

+ 16 - 0
desktop/libs/metadata/src/metadata/optimizer_client.py

@@ -191,6 +191,22 @@ class OptimizerApi(object):
       raise PopupException(e, title=_('Error while accessing Optimizer'))
 
 
+  def similar_queries(self, source_platform, query, 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,
+          'sourcePlatform': source_platform,
+          'query': query
+      }
+      return self._root.post('/api/similarQueries', data=json.dumps(data), contenttype=_JSON_CONTENT_TYPE)
+    except RestException, e:
+      raise PopupException(e, title=_('Error while accessing Optimizer'))
+
+
   def popular_filter_values(self, table_name, column_name=None, token=None, email=None):
     if token is None:
       token = self._authenticate()

+ 13 - 0
desktop/libs/metadata/src/metadata/optimizer_tests.py

@@ -155,3 +155,16 @@ class TestOptimizerApi(object):
     details = json.loads(resp['details']) # Auto fix suggestion is empty in most of the cases currently
 
     assert_equal('FAIL', details['platformCompilationStatus']['Hive']['queryStatus'], resp)
+
+
+  def test_similar_queries(self):
+    source_platform = 'Hive'
+    query = 'Select * from (Select item.id from item)'
+
+    resp = self.api.similar_queries(source_platform=source_platform, query=query)
+
+    assert_equal('successs', resp['status'], resp)
+
+    details = json.loads(resp['details']) # Auto fix suggestion is empty in most of the cases currently
+
+    assert_equal([], details['details']['similarQueries'], resp)

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

@@ -39,4 +39,5 @@ urlpatterns += patterns('metadata.optimizer_api',
   url(r'^api/optimizer_api/upload_history/?$', 'upload_history', name='upload_history'),
   url(r'^api/optimizer_api/query_complexity/?$', 'query_complexity', name='query_complexity'),
   url(r'^api/optimizer_api/popular_values/?$', 'popular_values', name='popular_values'),
+  url(r'^api/optimizer_api/similar_queries/?$', 'similar_queries', name='similar_queries'),
 )