瀏覽代碼

HUE-1197 [beeswax] Support explain with hive server 2

Impala support too
Romain Rigaux 12 年之前
父節點
當前提交
ac2534e2b4
共有 2 個文件被更改,包括 12 次插入3 次删除
  1. 12 1
      apps/beeswax/src/beeswax/server/hive_server2_lib.py
  2. 0 2
      apps/beeswax/src/beeswax/templates/execute.mako

+ 12 - 1
apps/beeswax/src/beeswax/server/hive_server2_lib.py

@@ -443,6 +443,10 @@ class HiveServerClient:
     return self.call(self._client.GetOperationStatus, req)
 
 
+  def explain(self, query):
+    return self.execute_query_statement('EXPLAIN %s' % query.query['query'])
+
+
   def get_log(self, operation_handle):
     try:
       req = TGetLogReq(operationHandle=operation_handle)
@@ -512,6 +516,12 @@ class PartitionValueCompatible:
     self.sd = type('Sd', (object,), {'location': '%s/%s' % (table.path_location, ','.join(partition)),})
 
 
+class ExplainCompatible:
+
+  def __init__(self, data_table):
+    self.textual = '\n'.join([line[0] for line in data_table.rows()])
+
+
 class HiveServerClientCompatible:
   """Same API as Beeswax"""
 
@@ -533,7 +543,8 @@ class HiveServerClientCompatible:
 
 
   def explain(self, query):
-    raise NotImplementedError()
+    data_table = self._client.explain(query)
+    return ExplainCompatible(data_table)
 
 
   def fetch(self, handle, start_over=False, max_rows=None):

+ 0 - 2
apps/beeswax/src/beeswax/templates/execute.mako

@@ -50,9 +50,7 @@
         <button type="button" id="saveQuery" class="btn">${_('Save')}</button>
         % endif
         <button type="button" id="saveQueryAs" class="btn">${_('Save as...')}</button>
-        % if app_name != 'impala':
         <button type="button" id="explainQuery" class="btn">${_('Explain')}</button>
-        % endif
         &nbsp; ${_('or create a')} &nbsp;<a type="button" class="btn" href="${ url(app_name + ':execute_query') }">${_('New query')}</a>
     </div>
 </%def>