Explorar o código

HUE-4866 [editor] Support multiquery in query from a file

Romain Rigaux %!s(int64=9) %!d(string=hai) anos
pai
achega
c4a0c6e

+ 2 - 0
desktop/libs/notebook/src/notebook/connectors/base.py

@@ -282,3 +282,5 @@ class Api(object):
   def statement_risk(self, notebook, snippet): raise NotImplementedError()
 
   def statement_compatibility(self, notebook, snippet, source_platform, target_platform): raise NotImplementedError()
+
+  def statement_variables(self, notebook, snippet): raise NotImplementedError()

+ 16 - 7
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -223,13 +223,6 @@ class HS2Api(Api):
     statement = self._get_current_statement(db, snippet)
     session = self._get_session(notebook, snippet['type'])
 
-    if snippet.get('statementType') == 'file':
-      script_path = snippet['statementPath']
-      if script_path:
-        script_path = script_path.replace('hdfs://', '')
-        if self.request.fs.do_as_user(self.user, self.request.fs.exists, script_path):
-          statement['statement'] = self.request.fs.do_as_user(self.user, self.request.fs.read, script_path, 0, 16 * 1024 ** 2)
-
     query = self._prepare_hql_query(snippet, statement['statement'], session)
 
     try:
@@ -431,6 +424,7 @@ class HS2Api(Api):
     db = self._get_db(snippet)
     response = self._get_current_statement(db, snippet)
     session = self._get_session(notebook, snippet['type'])
+
     query = self._prepare_hql_query(snippet, response.pop('statement'), session)
 
     try:
@@ -530,6 +524,10 @@ class HS2Api(Api):
     return api.query_compatibility(source_platform, target_platform, query)
 
 
+  def statement_variables(self, notebook, snippet):
+    pass
+
+
   def upgrade_properties(self, lang='hive', properties=None):
     upgraded_properties = copy.deepcopy(self.get_properties(lang))
 
@@ -615,6 +613,9 @@ class HS2Api(Api):
     else:
       statement_id = 0
 
+    if snippet.get('statementType') == 'file':
+      snippet['statement'] = self._get_statement_from_file(snippet)
+
     statements = self._get_statements(snippet['statement'])
 
     resp = {
@@ -687,6 +688,14 @@ class HS2Api(Api):
 
     return dbms.get(self.user, query_server=get_query_server_config(name=name))
 
+  def _get_statement_from_file(self, snippet):
+    if snippet.get('statementType') == 'file':
+      script_path = snippet['statementPath']
+      if script_path:
+        script_path = script_path.replace('hdfs://', '')
+        if self.request.fs.do_as_user(self.user, self.request.fs.exists, script_path):
+          return self.request.fs.do_as_user(self.user, self.request.fs.read, script_path, 0, 16 * 1024 ** 2)
+
 
   def _parse_job_counters(self, job_id):
     # Attempt to fetch total records from the job's Hive counter

+ 3 - 0
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -419,6 +419,9 @@ var EditorViewModel = (function() {
     self.statementType = ko.observable(typeof snippet.statementType != "undefined" && snippet.statementType != null ? snippet.statementType : 'text');
     self.statementTypes = ko.observableArray(['text', 'file']); // Maybe computed later for spark
     self.statementPath = ko.observable(typeof snippet.statementPath != "undefined" && snippet.statementPath != null ? snippet.statementPath : '');
+    self.statementPath.subscribe(function(newVal) {
+      self.statement_raw('aaa ${aa} ddd');
+    });
     self.statement_raw = ko.observable(typeof snippet.statement_raw != "undefined" && snippet.statement_raw != null ? snippet.statement_raw : '');
     self.selectedStatement = ko.observable('');
     self.aceSize = ko.observable(typeof snippet.aceSize != "undefined" && snippet.aceSize != null ? snippet.aceSize : 100);