Răsfoiți Sursa

HUE-4908 [metastore] Fetch table properties to confirm that this is a Kudu table

Romain Rigaux 9 ani în urmă
părinte
comite
549dc6d
1 a modificat fișierele cu 18 adăugiri și 2 ștergeri
  1. 18 2
      apps/beeswax/src/beeswax/server/dbms.py

+ 18 - 2
apps/beeswax/src/beeswax/server/dbms.py

@@ -202,8 +202,9 @@ class HiveServer2Dbms(object):
     try:
       return self.client.get_table(database, table_name)
     except QueryServerException, e:
-      LOG.debug("Seems like %s.%s is a Kudu table" % (database, table_name))
-      if 'java.lang.ClassNotFoundException' in e.message:
+      LOG.debug("Seems like %s.%s could be a Kudu table" % (database, table_name))
+
+      if 'java.lang.ClassNotFoundException' in e.message and [prop for prop in self.get_table_properties(database, table_name, property_name='storage_handler').rows() if 'KuduStorageHandler' in prop[0]]:
         query_server = get_query_server_config('impala')
         db = get(self.client.user, query_server)
         table = db.get_table(database, table_name)
@@ -212,6 +213,7 @@ class HiveServer2Dbms(object):
       else:
         raise e
 
+
   def alter_table(self, database, table_name, new_table_name=None, comment=None, tblproperties=None):
     hql = 'ALTER TABLE `%s`.`%s`' % (database, table_name)
 
@@ -475,6 +477,20 @@ class HiveServer2Dbms(object):
       return []
 
 
+  def get_table_properties(self, database, table, property_name=None):
+    hql = 'SHOW TBLPROPERTIES `%s`.`%s`' % (database, table)
+    if property_name:
+      hql += ' ("%s")' % property_name
+
+    query = hql_query(hql)
+    handle = self.execute_and_wait(query, timeout_sec=5.0)
+
+    if handle:
+      result = self.fetch(handle, rows=100)
+      self.close(handle)
+      return result
+
+
   def get_top_terms(self, database, table, column, limit=30, prefix=None):
     limit = min(limit, 100)
     prefix_match = ''