Jelajahi Sumber

HUE-7928 [metastore] Config flag to force metadata calls to go to HiveServer2

Romain Rigaux 7 tahun lalu
induk
melakukan
38fe673

+ 6 - 3
apps/beeswax/src/beeswax/api.py

@@ -48,6 +48,8 @@ from beeswax.server.dbms import expand_exception, get_query_server_config, Query
 from beeswax.views import authorized_get_design, authorized_get_query_history, make_parameterization_form,\
                           safe_get_design, save_design, massage_columns_for_json, _get_query_handle_and_state, \
                           parse_out_jobs
+from metastore.conf import FORCE_HS2_METADATA
+from metastore.views import _get_db
 
 
 LOG = logging.getLogger(__name__)
@@ -88,12 +90,13 @@ def error_handler(view_fn):
 
 @error_handler
 def autocomplete(request, database=None, table=None, column=None, nested=None):
-  app_name = get_app_name(request)
-  query_server = get_query_server_config(app_name)
+  app_name = None if FORCE_HS2_METADATA.get() else get_app_name(request)
+
   do_as = request.user
   if (request.user.is_superuser 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 = dbms.get(do_as, query_server)
+
+  db = _get_db(user=do_as, source_type=app_name)
 
   response = _autocomplete(db, database, table, column, nested)
   return JsonResponse(response)

+ 7 - 0
apps/metastore/src/metastore/conf.py

@@ -26,3 +26,10 @@ ENABLE_NEW_CREATE_TABLE = Config(
   type=bool,
   default=True
 )
+
+FORCE_HS2_METADATA = Config(
+  key="force_hs2_metadata",
+  help=_("Flag to force all metadata calls (e.g. list tables, table or column details...) to happen via HiveServer2 if available instead of Impala."),
+  type=bool,
+  default=False
+)

+ 6 - 1
apps/metastore/src/metastore/views.py

@@ -41,6 +41,7 @@ from metadata.conf import has_optimizer, has_navigator, get_optimizer_url, get_n
 from notebook.connectors.base import Notebook, QueryError
 from notebook.models import make_notebook
 
+from metastore.conf import FORCE_HS2_METADATA
 from metastore.forms import LoadDataForm, DbForm
 from metastore.settings import DJANGO_APPS
 
@@ -660,7 +661,11 @@ def has_write_access(user):
 
 def _get_db(user, source_type=None):
   if source_type is None:
-    source_type = get_cluster_config(user)['default_sql_interpreter']
+    cluster_config = get_cluster_config(user)
+    if FORCE_HS2_METADATA.get() and cluster_config['app_config'].get('editor') and 'hive' in cluster_config['app_config'].get('editor')['interpreter_names']:
+      source_type = 'hive'
+    else:
+      source_type = cluster_config['default_sql_interpreter']
 
   query_server = get_query_server_config(name=source_type if source_type != 'hive' else 'beeswax')
   return dbms.get(user, query_server)

+ 3 - 0
desktop/conf.dist/hue.ini

@@ -1050,6 +1050,9 @@
   # Flag to turn on the new version of the create table wizard.
   ## enable_new_create_table=true
 
+  # Flag to force all metadata calls (e.g. list tables, table or column details...) to happen via HiveServer2 if available instead of Impala.
+  ## force_hs2_metadata=false
+
 
 ###########################################################################
 # Settings to configure Impala

+ 3 - 0
desktop/conf/pseudo-distributed.ini.tmpl

@@ -1052,6 +1052,9 @@
   # Flag to turn on the new version of the create table wizard.
   ## enable_new_create_table=true
 
+  # Flag to force all metadata calls (e.g. list tables, table or column details...) to happen via HiveServer2 if available instead of Impala.
+  ## force_hs2_metadata=false
+
 
 ###########################################################################
 # Settings to configure Impala