Эх сурвалжийг харах

HUE-8798 [metastore] Display database, table, column via HMS only

Romain 6 жил өмнө
parent
commit
45fbdc24c8

+ 55 - 6
apps/beeswax/src/beeswax/server/hive_metastore_server.py

@@ -27,10 +27,12 @@ import hadoop.cluster
 from desktop.lib import thrift_util
 from desktop.conf import KERBEROS
 from hive_metastore import ThriftHiveMetastore
+from TCLIService.ttypes import TOperationState
 
-from beeswax import conf
-from beeswax import models
 from beeswax import hive_site
+from beeswax.conf import SERVER_CONN_TIMEOUT
+from beeswax.server.hive_server2_lib import ResultCompatible
+from beeswax.models import HiveServerQueryHandle, QueryHistory
 from beeswax.server.dbms import Table, DataTable
 
 
@@ -126,7 +128,7 @@ class HiveMetastoreClient:
 
     table = HiveTable(meta_table)
     setattr(table, 'details', {'properties': {'table_type': meta_table.tableType}, 'stats': {'val': 1}})
-    setattr(table, 'properties', {'val': 1})
+    setattr(table, 'properties', [])
     setattr(table, 'stats', [{'val': 1}])
     setattr(table, 'is_impala_only', False)
 
@@ -139,8 +141,32 @@ class HiveMetastoreClient:
     return self.meta_client.get_partitions(db_name, tbl_name, max_parts)
 
 
-  def getStatus(self):
-    return self.meta_client.getStatus()
+  def use(self, query):
+    pass
+
+
+  def query(self, query, statement=0, with_multiple_session=False):
+    return HiveServerQueryHandle(secret='mock', guid='mock')
+
+
+  def get_state(self, handle):
+    return QueryHistory.STATE.available
+
+
+  def close(self, handle):
+    pass
+
+
+  def get_operation_status(self, handle):
+    return MockFinishedOperation()
+
+
+  def get_default_configuration(self, *args, **kwargs):
+    return []
+
+
+  def fetch(self, handle, start_over=False, max_rows=None):
+    return EmptyResultCompatible()
 
 
   @classmethod
@@ -258,11 +284,34 @@ class HiveMetastoreClient:
         service_name="Hive Metastore Server",
         kerberos_principal=kerberos_principal_short_name,
         use_sasl=use_sasl,
-        timeout_seconds=conf.SERVER_CONN_TIMEOUT.get()
+        timeout_seconds=SERVER_CONN_TIMEOUT.get()
     )
     return UnicodeMetastoreClient(client)
 
 
+class EmptyResultCompatible:
+  def __init__(self):
+    self.data_table = type('Col', (object,), {'cols': self.cols})
+    self.rows = lambda: []
+    self.has_more = False
+    self.ready = True
+
+  @property
+  def columns(self):
+    return self.cols()
+
+  def cols(self):
+    return []
+
+  def full_cols(self):
+    return []
+
+
+class MockFinishedOperation():
+  def __init__(self):
+    self.operationState = TOperationState.FINISHED_STATE
+
+
 def _decode_struct_attr(struct, attr):
   try:
     val = getattr(struct, attr)