소스 검색

HUE-8518 [editor] Fix sample Kudu

jdesjean 7 년 전
부모
커밋
91c3bb0

+ 13 - 12
apps/beeswax/src/beeswax/api.py

@@ -91,19 +91,20 @@ def error_handler(view_fn):
 
 @error_handler
 def autocomplete(request, database=None, table=None, column=None, nested=None):
+  cluster = request.POST.get('cluster')
   app_name = None if FORCE_HS2_METADATA.get() else get_app_name(request)
 
   do_as = request.user
   if (is_admin(request.user) or request.user.has_hue_permission(action="impersonate", app="security")) and 'doas' in request.GET:
     do_as = User.objects.get(username=request.GET.get('doas'))
 
-  db = _get_db(user=do_as, source_type=app_name)
+  db = _get_db(user=do_as, source_type=app_name, cluster=cluster)
 
-  response = _autocomplete(db, database, table, column, nested)
+  response = _autocomplete(db, database, table, column, nested, cluster=cluster)
   return JsonResponse(response)
 
 
-def _autocomplete(db, database=None, table=None, column=None, nested=None, query=None):
+def _autocomplete(db, database=None, table=None, column=None, nested=None, query=None, cluster=None):
   response = {}
 
   try:
@@ -122,12 +123,10 @@ def _autocomplete(db, database=None, table=None, column=None, nested=None, query
 
       cols_extended = massage_columns_for_json(table.cols)
 
-      if 'org.apache.kudu.mapreduce.KuduTableOutputFormat' in str(table.properties): # When queries from Impala directly
-        table.is_impala_only = True
-
-      if table.is_impala_only: # Expand Kudu columns information
-        query_server = get_query_server_config('impala')
-        db = dbms.get(db.client.user, query_server, cluster=db.cluster)
+      if table.is_impala_only:
+        if db.client.query_server['server_name'] != 'impala': # Expand Kudu columns information
+          query_server = get_query_server_config('impala', cluster=cluster)
+          db = dbms.get(db.client.user, query_server, cluster=cluster)
 
         col_options = db.get_table_describe(database, table.name)
         extra_col_options = dict([(col[0], dict(zip(col_options.cols(), col))) for col in col_options.rows()])
@@ -657,11 +656,11 @@ def get_sample_data(request, database, table, column=None):
   return JsonResponse(response)
 
 
-def _get_sample_data(db, database, table, column, async=False):
+def _get_sample_data(db, database, table, column, async=False, cluster=None):
   table_obj = db.get_table(database, table)
   if table_obj.is_impala_only and db.client.query_server['server_name'] != 'impala':
-    query_server = get_query_server_config('impala')
-    db = dbms.get(db.client.user, query_server)
+    query_server = get_query_server_config('impala', cluster=cluster)
+    db = dbms.get(db.client.user, query_server, cluster=cluster)
 
   sample_data = db.get_sample(database, table_obj, column, generate_sql_only=async)
   response = {'status': -1}
@@ -678,6 +677,8 @@ def _get_sample_data(db, database, table, column, async=False):
           is_task=False
       )
       response['result'] = notebook.execute(request=MockedDjangoRequest(user=db.client.user), batch=False)
+      if table_obj.is_impala_only:
+        response['result']['type'] = 'impala'
     else:
       sample = escape_rows(sample_data.rows(), nulls_only=True)
       if column:

+ 1 - 1
apps/beeswax/src/beeswax/server/hive_server2_lib.py

@@ -1067,7 +1067,7 @@ class HiveServerTableCompatible(HiveServerTable):
 
     self.describe = HiveServerTTableSchema(self.desc_results, self.desc_schema).cols()
     self._details = None
-    self.is_impala_only = False
+    self.is_impala_only = 'org.apache.kudu.mapreduce.KuduTableOutputFormat' in str(hive_table.properties)
 
   @property
   def cols(self):

+ 2 - 2
desktop/core/src/desktop/static/desktop/js/apiHelper.js

@@ -1409,7 +1409,7 @@ var ApiHelper = (function () {
       url = '/' + (options.sourceType === 'hive' ? 'beeswax' : options.sourceType) + '/api/table/' + options.path[0];
 
       if (options.path.length > 1) {
-        url += '/' + options.path[1];
+        url += '/' + options.path[1] + '/';
       }
 
       if (options.path.length > 2) {
@@ -1616,7 +1616,7 @@ var ApiHelper = (function () {
   var QueryResult = function (sourceType, response) {
     var self = this;
     self.id = UUID();
-    self.type = sourceType;
+    self.type = response.result.type || sourceType;
     self.status = response.status || 'running';
     self.result = response.result || {};
     self.result.type = 'table';

+ 2 - 2
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -466,13 +466,13 @@ class HS2Api(Api):
       query = self._get_current_statement(db, snippet)['statement']
       database, table = '', ''
 
-    return _autocomplete(db, database, table, column, nested, query=query)
+    return _autocomplete(db, database, table, column, nested, query=query, cluster=self.cluster)
 
 
   @query_error_handler
   def get_sample_data(self, snippet, database=None, table=None, column=None, async=False):
     try:
-      db = self._get_db(snippet, async)
+      db = self._get_db(snippet, async, cluster=self.cluster)
       return _get_sample_data(db, database, table, column, async)
     except QueryServerException, ex:
       raise QueryError(ex.message)