Преглед изворни кода

HUE-5287 [metadata] Add API for top columns autocomplete

Romain Rigaux пре 9 година
родитељ
комит
cafa153fd3

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

@@ -257,6 +257,25 @@ def top_databases(request):
   return JsonResponse(response)
 
 
+@require_POST
+@error_handler
+def top_columns(request):
+  response = {'status': -1}
+
+  db_tables = json.loads(request.POST.get('dbTables'), '[]')
+
+  api = OptimizerApi()
+  data = api.top_columns(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):

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

@@ -208,6 +208,7 @@ class OptimizerApi(object):
         '--query', query
     ])
 
+
   def top_filters(self, database_name, table_name, column_name=None):
     return self._exec('get-top-filters', [
         '--tenant', self._product_name,
@@ -215,6 +216,7 @@ class OptimizerApi(object):
         '--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,
@@ -222,6 +224,15 @@ class OptimizerApi(object):
         '--table-name', table_name.lower()
     ])
 
+
+  def top_columns(self, database_name, table_name, column_name=None):
+    return self._exec('get-top-columns', [
+        '--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,

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

@@ -209,6 +209,13 @@ class TestOptimizerApi(object):
     assert_true('columns' in resp['results'][0], resp)
 
 
+  def test_top_columns(self):
+    resp = self.api.top_columns(db_tables='db1.Part')
+
+    assert_equal('success', resp['status'], resp)
+    assert_true('tables' in resp['results'][0], resp)
+
+
   def test_top_databases(self): 
     resp = self.api.top_databases()
 

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

@@ -44,6 +44,7 @@ urlpatterns += patterns('metadata.optimizer_api',
 
   url(r'^api/optimizer/top_databases/?$', 'top_databases', name='top_databases'),
   url(r'^api/optimizer/top_tables/?$', 'top_tables', name='top_tables'),
+  url(r'^api/optimizer/top_columns/?$', 'top_columns', name='top_columns'),
   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'),