Pārlūkot izejas kodu

[beeswax] Pass in tableTypes to GetTables HS2 call

Defaults to TABLE and VIEW (filters out INDEX_TABLE, SYSTEM_TABLE, etc).
Jenny Kim 10 gadi atpakaļ
vecāks
revīzija
2dc79c5

+ 4 - 4
apps/beeswax/src/beeswax/server/dbms.py

@@ -180,23 +180,23 @@ class HiveServer2Dbms(object):
     return self.client.get_database(database)
 
 
-  def get_tables_meta(self, database='default', table_names='*'):
+  def get_tables_meta(self, database='default', table_names='*', table_types=None):
     if self.server_name == 'beeswax':
       identifier = self.to_matching_wildcard(table_names)
     else:
       identifier = None
-    tables = self.client.get_tables_meta(database, identifier)
+    tables = self.client.get_tables_meta(database, identifier, table_types)
     if len(tables) <= APPLY_NATURAL_SORT_MAX.get():
       tables = apply_natural_sort(tables, key='name')
     return tables
 
 
-  def get_tables(self, database='default', table_names='*'):
+  def get_tables(self, database='default', table_names='*', table_types=None):
     if self.server_name == 'beeswax':
       identifier = self.to_matching_wildcard(table_names)
     else:
       identifier = None
-    tables = self.client.get_tables(database, identifier)
+    tables = self.client.get_tables(database, identifier, table_types)
     if len(tables) <= APPLY_NATURAL_SORT_MAX.get():
       tables = apply_natural_sort(tables)
     return tables

+ 18 - 8
apps/beeswax/src/beeswax/server/hive_server2_lib.py

@@ -438,6 +438,11 @@ class HiveServerClient:
       'PAM': 'PLAIN'
   }
 
+  DEFAULT_TABLE_TYPES = [
+    'TABLE',
+    'VIEW',
+  ]
+
   def __init__(self, query_server, user):
     self.query_server = query_server
     self.user = user
@@ -643,8 +648,10 @@ class HiveServerClient:
     return HiveServerTRowSet(desc_results.results, desc_schema.schema).cols(cols)[0]  # Should only contain one row
 
 
-  def get_tables_meta(self, database, table_names):
-    req = TGetTablesReq(schemaName=database, tableName=table_names)
+  def get_tables_meta(self, database, table_names, table_types=None):
+    if not table_types:
+      table_types = self.DEFAULT_TABLE_TYPES
+    req = TGetTablesReq(schemaName=database, tableName=table_names, tableTypes=table_types)
     res = self.call(self._client.GetTables, req)
 
     results, schema = self.fetch_result(res.operationHandle, orientation=TFetchOrientation.FETCH_NEXT, max_rows=5000)
@@ -654,12 +661,15 @@ class HiveServerClient:
     return HiveServerTRowSet(results.results, schema.schema).cols(cols)
 
 
-  def get_tables(self, database, table_names):
-    req = TGetTablesReq(schemaName=database, tableName=table_names)
+  def get_tables(self, database, table_names, table_types=None):
+    if not table_types:
+      table_types = self.DEFAULT_TABLE_TYPES
+    req = TGetTablesReq(schemaName=database, tableName=table_names, tableTypes=table_types)
     res = self.call(self._client.GetTables, req)
 
     results, schema = self.fetch_result(res.operationHandle, orientation=TFetchOrientation.FETCH_NEXT, max_rows=5000)
     self.close_operation(res.operationHandle)
+
     return HiveServerTRowSet(results.results, schema.schema).cols(('TABLE_NAME',))
 
 
@@ -1015,8 +1025,8 @@ class HiveServerClientCompatible(object):
     return self._client.get_database(database)
 
 
-  def get_tables_meta(self, database, table_names):
-    tables = self._client.get_tables_meta(database, table_names)
+  def get_tables_meta(self, database, table_names, table_types=None):
+    tables = self._client.get_tables_meta(database, table_names, table_types)
     massaged_tables = []
     for table in tables:
       massaged_tables.append({
@@ -1027,8 +1037,8 @@ class HiveServerClientCompatible(object):
     return massaged_tables
 
 
-  def get_tables(self, database, table_names):
-    tables = [table['TABLE_NAME'] for table in self._client.get_tables(database, table_names)]
+  def get_tables(self, database, table_names, table_types=None):
+    tables = [table['TABLE_NAME'] for table in self._client.get_tables(database, table_names, table_types)]
     tables.sort()
     return tables
 

+ 10 - 0
apps/metastore/src/metastore/tests.py

@@ -144,6 +144,16 @@ class TestMetastoreWithHadoop(BeeswaxSampleProvider):
       assert_true('name' in response.context["tables"][0])
       assert_false('comment' in response.context["tables"][0], response.context["tables"])
       assert_false('type' in response.context["tables"][0])
+
+      hql = """
+        CREATE INDEX test_index ON TABLE test_show_tables_1 (a) AS 'COMPACT' WITH DEFERRED REBUILD;
+      """
+      resp = _make_query(self.client, hql, wait=True, local=False, max=30.0, database=self.db_name)
+
+      # By default, index table should not appear in show tables view
+      response = self.client.get("/metastore/tables/%s" % self.db_name)
+      assert_equal(200, response.status_code)
+      assert_false('test_index' in response.context['tables'])
     finally:
       for reset in resets:
         reset()