浏览代码

HUE-1108 [beeswax] Hive Server 2 query properties and UDF support

Romain Rigaux 12 年之前
父节点
当前提交
1f53916b01

+ 16 - 5
apps/beeswax/src/beeswax/server/hive_server2_lib.py

@@ -328,7 +328,7 @@ class HiveServerClient:
 
 
   def execute_query(self, query, max_rows=100):
-    # TODO: Need to set jars, UDF etc
+    # Only execute_async_query() supports configuration
     if self.query_server['server_name'] == 'beeswax':
       self.execute_statement(statement='SET hive.server2.blocking.query=true')
 
@@ -337,11 +337,22 @@ class HiveServerClient:
 
 
   def execute_async_query(self, query, statement=0):
+    # Set configuration manually until Hive Server 2 supports confOverlay
+    # This will leak the config in the session
+    if statement == 0:
+      if self.query_server['server_name'] == 'beeswax':
+        self.execute_statement(statement='SET hive.server2.blocking.query=true')
+      for resource in query.get_configuration():
+        self.execute_statement(resource.strip())
+
     if self.query_server['server_name'] == 'beeswax':
       self.execute_statement(statement='SET hive.server2.blocking.query=false')
 
-    query_statement = query.get_query_statement(statement)
-    return self.execute_async_statement(statement=query_statement)
+    confOverlay = {}
+    confOverlay.update(dict([(setting['key'], setting['value']) for setting in query.settings]))
+
+    query_statement =  query.get_query_statement(statement)
+    return self.execute_async_statement(statement=query_statement, confOverlay=confOverlay)
 
 
   def execute_statement(self, statement, max_rows=100):
@@ -351,9 +362,9 @@ class HiveServerClient:
     return self.fetch_result(res.operationHandle, max_rows=max_rows)
 
 
-  def execute_async_statement(self, statement):
+  def execute_async_statement(self, statement, confOverlay):
     # confOverlay is not used by Hive Server 2
-    req = TExecuteStatementReq(statement=statement, confOverlay={})
+    req = TExecuteStatementReq(statement=statement, confOverlay=confOverlay)
     res = self.call(self._client.ExecuteStatement, req)
 
     return HiveServerQueryHandle(secret=res.operationHandle.operationId.secret,

+ 4 - 3
apps/beeswax/src/beeswax/templates/watch_results.mako

@@ -14,6 +14,7 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 <%!
+from desktop.lib.i18n import smart_unicode
 from desktop.views import commonheader, commonfooter
 from django.utils.translation import ugettext as _
 %>
@@ -155,16 +156,16 @@ ${layout.menubar(section='query')}
             <tr>
               <th>&nbsp;</th>
               % for col in columns:
-                <th>${col}</th>
+                <th>${ col }</th>
               % endfor
             </tr>
             </thead>
             <tbody>
               % for i, row in enumerate(results):
               <tr>
-                <td>${start_row + i}</td>
+                <td>${ start_row + i }</td>
                 % for item in row:
-                  <td>${ item }</td>
+                  <td>${ smart_unicode(item, errors='ignore') }</td>
                 % endfor
               </tr>
               % endfor