Forráskód Böngészése

HUE-7738 [impala] Adding function listing for Impala

Function name and return type and signature:

{"name":"casttobigint","signature":"FLOAT)","return_type":"BIGINT","is_builtin":"BUILTIN","is_persistent":"true"}
Romain 5 éve
szülő
commit
c861e1e9a9

+ 13 - 1
apps/beeswax/src/beeswax/api.py

@@ -181,7 +181,19 @@ def _get_functions(db, database=None):
   functions = db.get_functions(prefix=database)
   if functions:
     rows = escape_rows(functions, nulls_only=True)
-    data = [{'name': row[0]} for row in rows]
+
+    if db.client.query_server['dialect'] == 'impala':
+      data = [{
+          'name': row[1].split('(', 1)[0],
+          'signature': '(' + row[1].split('(', 1)[1],
+          'return_type': row[0],
+          'is_builtin': row[2],
+          'is_persistent': row[3]
+        }
+        for row in rows
+      ]
+    else:
+      data = [{'name': row[0]} for row in rows]
 
   return data
 

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

@@ -1104,21 +1104,25 @@ class HiveServer2Dbms(object):
     '''
     result = None
 
+    function_filter = "'%s*'" % prefix if prefix else ''
+
     if self.client.query_server['dialect'] == 'impala':
       if database is None:
         database = '_impala_builtins'
 
-    filter = '"%s.*"' % prefix if prefix else '".*"'
-    hql = 'SHOW FUNCTIONS %s' % filter
+    hql = 'SHOW FUNCTIONS %(function_filter)s %(database_filter)s' % {
+      'function_filter': "'%s*'" % prefix if prefix else '',
+      'database_filter': (' IN %s' % database) if database else ''
+    }
 
     query = hql_query(hql)
     handle = self.execute_and_wait(query, timeout_sec=5.0)
 
     if handle:
-      result = self.fetch(handle, rows=1000).rows()
+      rows = self.fetch(handle, rows=1000).rows()
       self.close(handle)
 
-    return result
+    return rows
 
 
   def get_query_metadata(self, query):