Browse Source

HUE-5412 [editor] Integrate skeleton of similar query suggestion API

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

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

@@ -166,7 +166,7 @@ def similar_queries(request):
   response = {'status': -1}
 
   source_platform = request.POST.get('sourcePlatform')
-  query = request.POST.get('query')
+  query = json.loads(request.POST.get('query'))
 
   api = OptimizerApi()
 
@@ -174,9 +174,9 @@ def similar_queries(request):
 
   if data['status'] == 'success':
     response['status'] = 0
-    response['similar_queries'] = json.loads(data['details']['similarQueries'])
+    response['similar_queries'] = data
   else:
-    response['message'] = 'Optimizer: %s' % data['details']
+    response['message'] = 'Optimizer: %s' % data
 
   return JsonResponse(response)
 

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

@@ -206,7 +206,7 @@ class OptimizerApi(object):
 
 
   def similar_queries(self, source_platform, query):
-    return self._exec('get-query-risk', [
+    return self._exec('get-similar-queries', [
         '--tenant', self._product_name,
         '--source-platform', source_platform,
         '--query', query

+ 1 - 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/similar_queries/?$', 'similar_queries', name='similar_queries'),
 
   #v2
   url(r'^api/optimizer/get_tenant/?$', 'get_tenant', name='get_tenant'),
@@ -53,4 +52,5 @@ urlpatterns += patterns('metadata.optimizer_api',
 
   url(r'^api/optimizer/query_risk/?$', 'query_risk', name='query_risk'),
   url(r'^api/optimizer/query_compatibility/?$', 'query_compatibility', name='query_compatibility'),
+  url(r'^api/optimizer/similar_queries/?$', 'similar_queries', name='similar_queries'),
 )

+ 18 - 0
desktop/libs/notebook/src/notebook/api.py

@@ -736,6 +736,24 @@ def statement_compatibility(request):
   return JsonResponse(response)
 
 
+@require_POST
+@check_document_access_permission()
+@api_error_handler
+def statement_similarity(request):
+  response = {'status': -1, 'message': ''}
+
+  notebook = json.loads(request.POST.get('notebook', '{}'))
+  snippet = json.loads(request.POST.get('snippet', '{}'))
+  source_platform = request.POST.get('sourcePlatform')
+
+  api = get_api(request, snippet)
+
+  response['statement_similarity'] = api.statement_similarity(notebook, snippet, source_platform=source_platform)
+  response['status'] = 0
+
+  return JsonResponse(response)
+
+
 @require_POST
 @check_document_access_permission()
 @api_error_handler

+ 2 - 0
desktop/libs/notebook/src/notebook/connectors/base.py

@@ -282,3 +282,5 @@ class Api(object):
   def statement_risk(self, notebook, snippet): raise NotImplementedError()
 
   def statement_compatibility(self, notebook, snippet, source_platform, target_platform): raise NotImplementedError()
+
+  def statement_similarity(self, notebook, snippet, source_platform, target_platform): raise NotImplementedError()

+ 11 - 0
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -525,6 +525,17 @@ class HS2Api(Api):
     return api.query_compatibility(source_platform, target_platform, query)
 
 
+  def statement_similarity(self, notebook, snippet, source_platform):
+    db = self._get_db(snippet)
+
+    response = self._get_current_statement(db, snippet)
+    query = response['statement']
+
+    api = OptimizerApi()
+
+    return api.similar_queries(source_platform, query)
+
+
   def upgrade_properties(self, lang='hive', properties=None):
     upgraded_properties = copy.deepcopy(self.get_properties(lang))
 

+ 19 - 3
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -1046,7 +1046,7 @@ var EditorViewModel = (function() {
       logGA('compatibility');
       self.suggestion(false);
 
-      $.post("/notebook/api/optimizer/compatibility", {
+      $.post("/notebook/api/optimizer/statement/compatibility", {
         notebook: ko.mapping.toJSON(notebook.getContext()),
         snippet: ko.mapping.toJSON(self.getContext()),
         sourcePlatform: self.type(),
@@ -1364,7 +1364,7 @@ var EditorViewModel = (function() {
       logGA('get_query_risk');
       self.complexity(null);
 
-      $.post("/notebook/api/optimizer/statement_risk", {
+      $.post("/notebook/api/optimizer/statement/risk", {
         notebook: ko.mapping.toJSON(notebook.getContext()),
         snippet: ko.mapping.toJSON(self.getContext())
       }, function(data) {
@@ -1382,7 +1382,23 @@ var EditorViewModel = (function() {
       $.post("/metadata/api/optimizer/upload_history", {
       }, function(data) {
         if (data.status == 0) {
-          $(document).trigger("info", "Query uploaded successfully");
+          $(document).trigger("info", "N Queries uploaded successfully");
+        } else {
+          $(document).trigger("error", data.message);
+        }
+      });
+    };
+
+    self.getSimilarQueries = function () {
+      logGA('get_query_similarity');
+
+      $.post("/notebook/api/optimizer/statement/similarity", {
+        notebook: ko.mapping.toJSON(notebook.getContext()),
+        snippet: ko.mapping.toJSON(self.getContext()),
+        sourcePlatform: self.type()
+      }, function(data) {
+        if (data.status == 0) {
+          console.log(data.statement_similarity);
         } else {
           $(document).trigger("error", data.message);
         }

+ 5 - 0
desktop/libs/notebook/src/notebook/templates/editor_components.mako

@@ -2217,6 +2217,11 @@ ${ hueIcons.symbols() }
             <i class="fa fa-fw fa-check"></i> ${_('Check complexity')}
           </a>
         </li>
+        <li>
+          <a href="javascript:void(0)" data-bind="click: getSimilarQueries" title="${ _('Expand query with similar queries suggestions') }">
+            <i class="fa fa-fw fa-comments"></i> ${_('Show similarities')}
+          </a>
+        </li>
         <li>
           <a href="javascript:void(0)" data-bind="click: loadQueryHistory" title="${ _('Load past query history in order to improve recommendations') }">
             <i class="fa fa-fw fa-cloud-upload"></i> ${_('Upload history')}

+ 3 - 2
desktop/libs/notebook/src/notebook/urls.py

@@ -74,8 +74,9 @@ urlpatterns += patterns('notebook.api',
 
   url(r'^api/notebook/export_result/?$', 'export_result', name='export_result'),
 
-  url(r'^api/optimizer/statement_risk/?$', 'statement_risk', name='statement_risk'),
-  url(r'^api/optimizer/compatibility/?$', 'statement_compatibility', name='statement_compatibility'),
+  url(r'^api/optimizer/statement/risk/?$', 'statement_risk', name='statement_risk'),
+  url(r'^api/optimizer/statement/compatibility/?$', 'statement_compatibility', name='statement_compatibility'),
+  url(r'^api/optimizer/statement/similarity/?$', 'statement_similarity', name='statement_similarity'),
 )
 
 # Assist API