Browse Source

[metadata] Adding a predict API skeleton

Romain Rigaux 4 years ago
parent
commit
1350a9ed0a

+ 9 - 0
desktop/libs/metadata/src/metadata/optimizer/dummy_client.py

@@ -98,6 +98,15 @@ class DummyClient(Api):
     }
 
 
+  def predict(self, query, source_platform, connector):
+    hints = []
+    response = {}
+
+    return {
+      'hints': hints,
+    }
+
+
   def similar_queries(self, source_platform, query, page_size=100, startingToken=None, connector=None):
     raise PopupException(_('Call not supported'))
 

+ 18 - 0
desktop/libs/metadata/src/metadata/optimizer/optimizer_client.py

@@ -260,6 +260,24 @@ class OptimizerClient(object):
       'noDDL': response.get('noDDL', []),
     }
 
+
+  def predict(self, query, source_platform, connector):
+    response = self._call(
+      'predict', {
+        'tenant': self._tenant_id,
+        'connector': connector,
+        'query': _clean_query(query),
+        'sourcePlatform': source_platform,
+      }
+    )
+
+    hints = response.get(source_platform, [])
+
+    return {
+      'hints': hints,
+    }
+
+
   def similar_queries(self, source_platform, query, page_size=100, startingToken=None, connector=None):
     if is_admin(self.user):
       return self._call(

+ 23 - 0
desktop/libs/metadata/src/metadata/optimizer_api.py

@@ -209,6 +209,29 @@ def query_risk(request):
   return JsonResponse(response)
 
 
+@require_POST
+@error_handler
+def predict(request):
+  response = {'status': -1}
+
+  interface = request.POST.get('interface', OPTIMIZER.INTERFACE.get())
+  connector = json.loads(request.POST.get('connector', '{}'))
+  query = json.loads(request.POST.get('query', '""'))
+  source_platform = request.POST.get('sourcePlatform')
+
+  api = get_api(request.user, interface)
+
+  data = api.predict(query=query, source_platform=source_platform, connector=connector)
+
+  if data:
+    response['status'] = 0
+    response['predict'] = data
+  else:
+    response['message'] = 'Optimizer: %s' % data
+
+  return JsonResponse(response)
+
+
 @require_POST
 @error_handler
 def similar_queries(request):

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

@@ -26,7 +26,11 @@ from metadata import manager_api as metadata_manager_api
 # Catalog
 urlpatterns = [
   url(r'^api/catalog/search_entities/?$', metadata_catalog_api.search_entities, name='catalog_search_entities'),
-  url(r'^api/catalog/search_entities_interactive/?$', metadata_catalog_api.search_entities_interactive, name='catalog_search_entities_interactive'),
+  url(
+    r'^api/catalog/search_entities_interactive/?$',
+    metadata_catalog_api.search_entities_interactive,
+    name='catalog_search_entities_interactive'
+  ),
   url(r'^api/catalog/find_entity/?$', metadata_catalog_api.find_entity, name='catalog_find_entity'),
   url(r'^api/catalog/get_entity/?$', metadata_catalog_api.get_entity, name='catalog_get_entity'),
   url(r'^api/catalog/add_tags/?$', metadata_catalog_api.add_tags, name='catalog_add_tags'),
@@ -34,13 +38,21 @@ urlpatterns = [
   url(r'^api/catalog/list_tags/?$', metadata_catalog_api.list_tags, name='catalog_list_tags'),
   url(r'^api/catalog/suggest/?$', metadata_catalog_api.suggest, name='catalog_suggest'),
   url(r'^api/catalog/update_properties/?$', metadata_catalog_api.update_properties, name='catalog_update_properties'),
-  url(r'^api/catalog/delete_metadata_properties/?$', metadata_catalog_api.delete_metadata_properties, name='catalog_delete_metadata_properties'),
+  url(
+    r'^api/catalog/delete_metadata_properties/?$',
+    metadata_catalog_api.delete_metadata_properties,
+    name='catalog_delete_metadata_properties'
+  ),
   url(r'^api/catalog/lineage/?$', metadata_catalog_api.get_lineage, name='catalog_get_lineage'),
 ]
 # Navigator API (deprecated, renamed to Catalog)
 urlpatterns += [
   url(r'^api/navigator/search_entities/?$', metadata_catalog_api.search_entities, name='search_entities'),
-  url(r'^api/navigator/search_entities_interactive/?$', metadata_catalog_api.search_entities_interactive, name='search_entities_interactive'),
+  url(
+    r'^api/navigator/search_entities_interactive/?$',
+    metadata_catalog_api.search_entities_interactive,
+    name='search_entities_interactive'
+  ),
   url(r'^api/navigator/find_entity/?$', metadata_catalog_api.find_entity, name='find_entity'),
   url(r'^api/navigator/get_entity/?$', metadata_catalog_api.get_entity, name='get_entity'),
   url(r'^api/navigator/add_tags/?$', metadata_catalog_api.add_tags, name='add_tags'),
@@ -72,6 +84,7 @@ urlpatterns += [
   url(r'^api/optimizer/table_details/?$', metadata_optimizer_api.table_details, name='table_details'),
 
   url(r'^api/optimizer/query_risk/?$', metadata_optimizer_api.query_risk, name='query_risk'),
+  url(r'^api/optimizer/predict/?$', metadata_optimizer_api.predict, name='predict'),
   url(r'^api/optimizer/query_compatibility/?$', metadata_optimizer_api.query_compatibility, name='query_compatibility'),
   url(r'^api/optimizer/similar_queries/?$', metadata_optimizer_api.similar_queries, name='similar_queries'),
 ]
@@ -100,7 +113,11 @@ urlpatterns += [
   url(r'^api/dataeng/create_cluster/?$', dataeng_api.create_cluster, name='create_cluster'),
 ]
 urlpatterns += [
-  url(r'^api/workload_analytics/get_operation_execution_details/?$', metadata_workload_analytics_api.get_operation_execution_details, name='get_operation_execution_details'),
+  url(
+    r'^api/workload_analytics/get_operation_execution_details/?$',
+    metadata_workload_analytics_api.get_operation_execution_details,
+    name='get_operation_execution_details'
+  ),
   url(r'^api/workload_analytics/get_impala_query/?$', metadata_workload_analytics_api.get_impala_query, name='get_impala_query'),
   url(r'^api/workload_analytics/get_environment/?$', metadata_workload_analytics_api.get_environment, name='get_environment'),
 ]