Преглед на файлове

HUE-7 [metastore] Add success url to open the table page after the creation

Romain Rigaux преди 9 години
родител
ревизия
639fbd8

+ 12 - 12
desktop/libs/indexer/src/indexer/api3.py

@@ -222,19 +222,19 @@ def _create_table_from_a_file(request, source, destination):
     if table_format in ('parquet', 'kudu'):
       table_name, final_table_name = 'hue__tmp_%s' % table_name, table_name
 
+      sql += '\n\nDROP TABLE IF EXISTS `%(database)s`.`%(table_name)s`;\n' % {
+          'database': database,
+          'table_name': table_name
+      }
+
   if external or load_data and table_format in ('parquet', 'kudu'):
     if not request.fs.isdir(external_path): # File selected
-      external_path = request.fs.split(external_path)[0]
-      if len(request.fs.listdir(external_path)) != 1:
-        external_path = external_path + '_table' # If dir not just the file, create data dir and move file there.
-        request.fs.mkdir(source_path + '_table')
-        request.fs.rename(source_path, external_path)
+      external_path, external_file_name = request.fs.split(external_path)
 
-  
-  sql += '\n\nDROP TABLE IF EXISTS `%(database)s`.`%(table_name)s`;\n' % {
-      'database': database,
-      'table_name': table_name
-  }
+      if len(request.fs.listdir(external_path)) > 1:
+        external_path = external_path + '/%s_table' % external_file_name # If dir not just the file, create data dir and move file there.
+        request.fs.mkdir(external_path)
+        request.fs.rename(source_path, external_path)
 
   sql += django_mako.render_to_string("gen/create_table_statement.mako", {
       'table': {
@@ -293,8 +293,8 @@ def _create_table_from_a_file(request, source, destination):
 
   try:
     editor_type = 'impala' if table_format == 'kudu' else 'hive'
-    # on_success_url = reverse('metastore:describe_table', kwargs={'database': database, 'table': table_name})
-    notebook = make_notebook(name='Execute and watch', editor_type=editor_type, statement=sql, status='ready', database=database)
+    on_success_url = reverse('metastore:describe_table', kwargs={'database': database, 'table': table_name})
+    notebook = make_notebook(name='Execute and watch', editor_type=editor_type, statement=sql, status='ready', database=database, on_success_url=on_success_url)
 
     return notebook.execute(request, batch=False)
   except Exception, e:

+ 1 - 1
desktop/libs/indexer/src/indexer/templates/gen/create_table_statement.mako

@@ -90,7 +90,7 @@ ROW FORMAT \
 INPUTFORMAT ${table["input_format_class"] | n} OUTPUTFORMAT ${table["output_format_class"] | n}
 % endif
 % if table.get("external", False):
-LOCATION "${table["path"] | n}"
+LOCATION '${table["path"] | n}'
 % endif
 % if table.get("skip_header", False):
 TBLPROPERTIES("skip.header.line.count" = "1")

+ 8 - 4
desktop/libs/indexer/src/indexer/templates/importer.mako

@@ -1179,10 +1179,14 @@ ${ assist.assistPanel() }
                 self.isIndexing(false);
                 self.indexingStarted(false);
                 self.indexingError(true);
-              } else {
-                // if success of CREATE and one more DROP statement execute
-                if (self.editorVM.selectedNotebook().snippets()[0].result.handle().statement_id < self.editorVM.selectedNotebook().snippets()[0].result.handle().statements_count) {
-                  self.editorVM.selectedNotebook().snippets()[0].execute();
+              } else if (val == 'available') {
+                var snippet = self.editorVM.selectedNotebook().snippets()[0]; // Could be native to editor at some point
+                if (! snippet.result.handle().has_more_statements) {
+                  if (self.editorVM.selectedNotebook().onSuccessUrl()) {
+                    window.location.href = self.editorVM.selectedNotebook().onSuccessUrl();
+                  }
+                } else { // Perform last DROP statement execute
+                  //snippet.execute();
                 }
               }
             });

+ 3 - 1
desktop/libs/notebook/src/notebook/models.py

@@ -54,7 +54,8 @@ def escape_rows(rows, nulls_only=False):
 
 
 def make_notebook(name='Browse', description='', editor_type='hive', statement='', status='ready',
-                  files=None, functions=None, settings=None, is_saved=False, database='default', snippet_properties=None, batch_submit=False):
+                  files=None, functions=None, settings=None, is_saved=False, database='default', snippet_properties=None, batch_submit=False,
+                  on_success_url=None):
   from notebook.connectors.hiveserver2 import HS2Api
 
   editor = Notebook()
@@ -95,6 +96,7 @@ def make_notebook(name='Browse', description='', editor_type='hive', statement='
     'type': 'query-%s' % editor_type,
     'showHistory': True,
     'isSaved': is_saved,
+    'onSuccessUrl': on_success_url,
     'snippets': [
       {
          'status': status,

+ 2 - 1
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -1531,6 +1531,7 @@ var EditorViewModel = (function() {
     self.parentSavedQueryUuid = ko.observable(typeof notebook.parentSavedQueryUuid != "undefined" && notebook.parentSavedQueryUuid != null ? notebook.parentSavedQueryUuid : null); // History parent
     self.isSaved = ko.observable(typeof notebook.isSaved != "undefined" && notebook.isSaved != null ? notebook.isSaved : false);
     self.canWrite = ko.observable(typeof notebook.can_write != "undefined" && notebook.can_write != null ? notebook.can_write : true);
+    self.onSuccessUrl = ko.observable(typeof notebook.onSuccessUrl != "undefined" && notebook.onSuccessUrl != null ? notebook.onSuccessUrl : null);
     self.snippets = ko.observableArray();
     self.selectedSnippet = ko.observable(vm.editorType()); // Aka selectedSnippetType
     self.creatingSessionLocks = ko.observableArray();
@@ -2174,7 +2175,7 @@ var EditorViewModel = (function() {
     self.combinedContent = ko.observable();
     self.isPlayerMode = ko.observable(false);
     self.isFullscreenMode = ko.observable(false);
-    self.successUrl = ko.observable(options.success_url);
+    self.successUrl = ko.observable(options.success_url); // Deprecated
     self.isOptimizerEnabled = ko.observable(options.is_optimizer_enabled);
     self.isNavigatorEnabled = ko.observable(options.is_navigator_enabled);