diff --git a/impala/dbapi.py b/impala/dbapi.py index d11ff38e5..680d71283 100644 --- a/impala/dbapi.py +++ b/impala/dbapi.py @@ -41,7 +41,7 @@ def connect(host='localhost', port=21050, database=None, timeout=None, use_ssl=False, ca_cert=None, auth_mechanism='NOSASL', user=None, password=None, kerberos_service_name='impala', use_ldap=None, ldap_user=None, ldap_password=None, use_kerberos=None, - protocol=None): + protocol=None,username=None): """Get a connection to HiveServer2 (HS2). These options are largely compatible with the impala-shell command line @@ -145,7 +145,7 @@ def connect(host='localhost', port=21050, database=None, timeout=None, ca_cert=ca_cert, user=user, password=password, kerberos_service_name=kerberos_service_name, auth_mechanism=auth_mechanism) - return hs2.HiveServer2Connection(service, default_db=database) + return hs2.HiveServer2Connection(service, default_db=database, impersonate=username) class _DBAPITypeObject(object): diff --git a/impala/hiveserver2.py b/impala/hiveserver2.py index f3ecc72f9..70d1b2a41 100644 --- a/impala/hiveserver2.py +++ b/impala/hiveserver2.py @@ -51,12 +51,14 @@ class HiveServer2Connection(Connection): # HiveServer2Connection objects are associated with a TCLIService.Client # thrift service # it's instantiated with an alive TCLIService.Client - - def __init__(self, service, default_db=None): + impersonate=None + + def __init__(self, service, default_db=None, impersonate=None): log.debug('HiveServer2Connection(service=%s, default_db=%s)', service, default_db) self.service = service self.default_db = default_db + self.impersonate=impersonate def close(self): """Close the session and the Thrift transport.""" @@ -122,6 +124,12 @@ def cursor(self, user=None, configuration=None, convert_types=True, log.debug('.cursor(): getting new session_handle') + if self.impersonate != None: + log.debug('Impersonating user %s' % self.impersonate) + configuration = { + 'impala.doas.user': self.impersonate + } + session = self.service.open_session(user, configuration) log.debug('HiveServer2Cursor(service=%s, session_handle=%s, '