Przeglądaj źródła

HUE-6355 [metastore] Parameterize the database type used to browse the tables

Instead of Hardcoding to 'hive'. Default is still 'hive'.
Romain Rigaux 8 lat temu
rodzic
commit
b1f43e3

+ 1 - 0
apps/beeswax/src/beeswax/server/dbms.py

@@ -42,6 +42,7 @@ LOG = logging.getLogger(__name__)
 DBMS_CACHE = {}
 DBMS_CACHE_LOCK = threading.Lock()
 
+
 def get(user, query_server=None):
   global DBMS_CACHE
   global DBMS_CACHE_LOCK

+ 9 - 7
apps/metastore/src/metastore/static/metastore/js/metastore.ko.js

@@ -31,6 +31,7 @@ var MetastoreViewModel = (function () {
     self.apiHelper.withTotalStorage('assist', 'assist_panel_visible', self.isLeftPanelVisible, true);
     self.optimizerEnabled = ko.observable(options.optimizerEnabled || false);
     self.navigatorEnabled = ko.observable(options.navigatorEnabled || false);
+    self.sourceType = ko.observable(options.sourceType || 'hive');
 
     self.navigatorEnabled.subscribe(function (newValue) {
       huePubSub.publish('meta.navigator.enabled', newValue);
@@ -41,7 +42,7 @@ var MetastoreViewModel = (function () {
 
     huePubSub.subscribe("assist.db.panel.ready", function () {
       huePubSub.publish('assist.set.database', {
-        source: 'hive',
+        source: self.sourceType(),
         name: null
       });
     });
@@ -75,7 +76,7 @@ var MetastoreViewModel = (function () {
       }
       self.reloading(true);
       huePubSub.publish('assist.clear.db.cache', {
-        sourceType: 'hive',
+        sourceType: self.sourceType(),
         clearAll: true
       });
       huePubSub.publish('assist.clear.db.cache', {
@@ -175,13 +176,14 @@ var MetastoreViewModel = (function () {
 
     self.loading(true);
     self.apiHelper.loadDatabases({
-      sourceType: 'hive',
+      sourceType: self.sourceType(),
       successCallback: function (databaseNames) {
         self.databases($.map(databaseNames, function (name) {
           return new MetastoreDatabase({
             name: name,
             optimizerEnabled: self.optimizerEnabled,
-            navigatorEnabled: self.navigatorEnabled
+            navigatorEnabled: self.navigatorEnabled,
+            sourceType: self.sourceType,
           })
         }));
         self.loading(false);
@@ -213,13 +215,13 @@ var MetastoreViewModel = (function () {
             self.database().setTable(foundTables[0], callback);
           } else if (clearDbCacheOnMissing) {
             huePubSub.publish('assist.clear.db.cache', {
-              sourceType: 'hive',
+              sourceType: self.sourceType(),
               clearAll: false,
               databaseName: self.database().name
             });
             self.database().load(function () {
               setTableAfterLoad(false);
-            }, self.optimizerEnabled(), self.navigatorEnabled());
+            }, self.optimizerEnabled(), self.navigatorEnabled(), self.sourceType());
           }
         };
 
@@ -314,7 +316,7 @@ var MetastoreViewModel = (function () {
     self.database(metastoreDatabase);
 
     if (!metastoreDatabase.loaded()) {
-      metastoreDatabase.load(callback, self.optimizerEnabled(), self.navigatorEnabled());
+      metastoreDatabase.load(callback, self.optimizerEnabled(), self.navigatorEnabled(), self.sourceType());
     } else if (callback) {
       callback();
     }

+ 13 - 11
apps/metastore/src/metastore/static/metastore/js/metastore.model.js

@@ -101,7 +101,7 @@ var MetastoreDatabase = (function () {
     };
   }
 
-  MetastoreDatabase.prototype.load = function (callback, optimizerEnabled, navigatorEnabled) {
+  MetastoreDatabase.prototype.load = function (callback, optimizerEnabled, navigatorEnabled, sourceType) {
     var self = this;
     if (self.loading()) {
       return;
@@ -109,7 +109,7 @@ var MetastoreDatabase = (function () {
 
     self.loading(true);
     self.apiHelper.fetchTables({
-      sourceType: 'hive',
+      sourceType: sourceType,
       databaseName: self.name,
       successCallback: function (data) {
         self.tables($.map(data.tables_meta, function (tableMeta) {
@@ -119,7 +119,8 @@ var MetastoreDatabase = (function () {
             type: tableMeta.type,
             comment: tableMeta.comment,
             optimizerEnabled: optimizerEnabled,
-            navigatorEnabled: navigatorEnabled
+            navigatorEnabled: navigatorEnabled,
+            sourceType: sourceType
           })
         }));
         self.loaded(true);
@@ -334,7 +335,7 @@ var MetastoreTable = (function () {
     }
     self.hasErrors(false);
     self.apiHelper.fetchTableSample({
-      sourceType: "hive",
+      sourceType: self.metastoreTable.sourceType,
       databaseName: self.metastoreTable.database.name,
       tableName: self.metastoreTable.name,
       silenceErrors: true,
@@ -368,6 +369,7 @@ var MetastoreTable = (function () {
     self.apiHelper = ApiHelper.getInstance();
     self.optimizerEnabled = options.optimizerEnabled;
     self.navigatorEnabled = options.navigatorEnabled;
+    self.sourceType = options.sourceType;
     self.name = options.name;
     self.type = options.type;
 
@@ -428,7 +430,7 @@ var MetastoreTable = (function () {
         comment: newValue ? newValue : ""
       }, function () {
         huePubSub.publish('assist.clear.db.cache', {
-          sourceType: 'hive',
+          sourceType: self.sourceType,
           databaseName: self.database.name
         })
       });
@@ -442,7 +444,7 @@ var MetastoreTable = (function () {
       self.apiHelper.refreshTableStats({
         tableName: self.name,
         databaseName: self.database.name,
-        sourceType: "hive",
+        sourceType: self.sourceType,
         successCallback: function (data) {
           self.fetchDetails();
         },
@@ -459,7 +461,7 @@ var MetastoreTable = (function () {
       var self = this;
       self.loadingColumns(true);
       self.apiHelper.fetchFields({
-        sourceType: "hive",
+        sourceType: self.sourceType,
         databaseName: self.database.name,
         tableName: self.name,
         fields: [],
@@ -483,7 +485,7 @@ var MetastoreTable = (function () {
       var self = this;
       self.loadingDetails(true);
       self.apiHelper.fetchTableDetails({
-        sourceType: "hive",
+        sourceType: self.sourceType,
         databaseName: self.database.name,
         tableName: self.name,
         successCallback: function (data) {
@@ -656,7 +658,7 @@ var MetastoreTable = (function () {
         identifierChain: [{ name: entry.name }]
       },
       orientation: orientation || 'right',
-      sourceType: 'hive',
+      sourceType: self.sourceType,
       defaultDatabase: entry.database.name,
       source: {
         element: event.target,
@@ -707,7 +709,7 @@ var MetastoreColumn = (function () {
       }, function (data) {
         if (data.status == 0) {
           huePubSub.publish('assist.clear.db.cache', {
-            sourceType: 'hive',
+            sourceType: self.sourceType,
             databaseName: self.table.database.name,
             tableName: self.table.name
           });
@@ -729,7 +731,7 @@ var MetastoreColumn = (function () {
         identifierChain: [{ name: entry.table.name }, { name: entry.name() }]
       },
       orientation: 'right',
-      sourceType: 'hive',
+      sourceType: self.sourceType,
       defaultDatabase: entry.table.database.name,
       source: {
         element: event.target,

+ 4 - 2
apps/metastore/src/metastore/templates/metastore.mako

@@ -1199,7 +1199,8 @@ ${ components.menubar(is_embeddable) }
 
   function queryAndWatch(url) {
     $.post(url, {
-      format: "json"
+      format: "json",
+      sourceType: '${ source_type }'
     },function(resp) {
       if (resp.history_uuid) {
         huePubSub.publish('open.editor.query', resp.history_uuid);
@@ -1225,7 +1226,8 @@ ${ components.menubar(is_embeddable) }
         optimizerEnabled: '${ is_optimizer_enabled }' === 'True',
         navigatorEnabled: '${ is_navigator_enabled }' === 'True',
         optimizerUrl: '${ optimizer_url }',
-        navigatorUrl: '${ navigator_url }'
+        navigatorUrl: '${ navigator_url }',
+        sourceType: '${ source_type }'
       };
 
       var viewModel = new MetastoreViewModel(options);

+ 11 - 11
apps/metastore/src/metastore/views.py

@@ -87,6 +87,7 @@ def databases(request):
     'optimizer_url': get_optimizer_url(),
     'navigator_url': get_navigator_url(),
     'is_embeddable': request.GET.get('is_embeddable', False),
+    'source_type': db.server_name,
   })
 
 
@@ -119,7 +120,7 @@ def drop_database(request):
     except Exception, ex:
       error_message, log = dbms.expand_exception(ex, db)
       error = _("Failed to remove %(databases)s.  Error: %(error)s") % {'databases': ','.join(databases), 'error': error_message}
-      raise PopupException(error, title=_("Hive Error"), detail=log)
+      raise PopupException(error, title=_("DB Error"), detail=log)
   else:
     title = _("Do you really want to delete the database(s)?")
     return render('confirm.mako', request, {'url': request.path, 'title': title})
@@ -229,6 +230,7 @@ def show_tables(request, database=None):
     'optimizer_url': get_optimizer_url(),
     'navigator_url': get_navigator_url(),
     'is_embeddable': request.REQUEST.get('is_embeddable', False),
+    'source_type': db.server_name,
     })
 
   return resp
@@ -256,18 +258,13 @@ def get_table_metadata(request, database, table):
 
 def describe_table(request, database, table):
   app_name = get_app_name(request)
-  #query_server = get_query_server_config(app_name)
-  #db = dbms.get(request.user, query_server)
   db = dbms.get(request.user)
 
   try:
     table = db.get_table(database, table)
   except Exception, e:
     LOG.exception("Describe table error")
-    if hasattr(e, 'message') and e.message:
-      raise PopupException(_("Hive Error"), detail=e.message)
-    else:
-      raise PopupException(_("Hive Error"), detail=e)
+    raise PopupException(_("DB Error"), detail=e.message if hasattr(e, 'message') and e.message else e)
 
   if request.REQUEST.get("format", "html") == "json":
     return JsonResponse({
@@ -308,9 +305,11 @@ def describe_table(request, database, table):
       'has_write_access': has_write_access(request.user),
       'is_optimizer_enabled': has_optimizer(),
       'is_navigator_enabled': has_navigator(request.user),
+      'source_type': has_navigator(request.user),
       'optimizer_url': get_optimizer_url(),
       'navigator_url': get_navigator_url(),
       'is_embeddable': request.REQUEST.get('is_embeddable', False),
+      'source_type': db.server_name,
     })
 
 
@@ -393,7 +392,7 @@ def drop_table(request, database):
         sql = db.drop_tables(database, tables_objects, design=None, skip_trash=skip_trash, generate_ddl_only=True)
         job = make_notebook(
             name='Execute and watch',
-            editor_type='hive',
+            editor_type=db.server_name,
             statement=sql.strip(),
             status='ready',
             database=database,
@@ -410,7 +409,7 @@ def drop_table(request, database):
     except Exception, ex:
       error_message, log = dbms.expand_exception(ex, db)
       error = _("Failed to remove %(tables)s.  Error: %(error)s") % {'tables': ','.join(tables), 'error': error_message}
-      raise PopupException(error, title=_("Hive Error"), detail=log)
+      raise PopupException(error, title=_("DB Error"), detail=log)
   else:
     title = _("Do you really want to delete the table(s)?")
     return render('confirm.mako', request, {'url': request.path, 'title': title})
@@ -452,7 +451,7 @@ def load_table(request, database, table):
         if generate_ddl_only:
           job = make_notebook(
             name='Execute and watch',
-            editor_type='hive',
+            editor_type=db.server_name,
             statement=query_history.strip(),
             status='ready',
             database=database,
@@ -539,6 +538,7 @@ def describe_partitions(request, database, table):
         'has_write_access': has_write_access(request.user),
         'is_optimizer_enabled': has_optimizer(),
         'is_navigator_enabled': has_navigator(request.user),
+        'source_type': db.server_name,
     })
 
 
@@ -606,7 +606,7 @@ def drop_partition(request, database, table):
     except Exception, ex:
       error_message, log = dbms.expand_exception(ex, db)
       error = _("Failed to remove %(partition)s.  Error: %(error)s") % {'partition': '\n'.join(partition_specs), 'error': error_message}
-      raise PopupException(error, title=_("Hive Error"), detail=log)
+      raise PopupException(error, title=_("DB Error"), detail=log)
   else:
     title = _("Do you really want to delete the partition(s)?")
     return render('confirm.mako', request, {'url': request.path, 'title': title})

+ 1 - 1
desktop/libs/notebook/src/notebook/views.py

@@ -140,7 +140,7 @@ def new(request):
 
 
 def browse(request, database, table, partition_spec=None):
-  snippet = {'type': 'hive'}
+  snippet = {'type': request.POST.get('sourceType', 'hive')}
 
   statement = get_api(request, snippet).get_browse_query(snippet, database, table, partition_spec)