You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@impala.apache.org by "Michael Brown (JIRA)" <ji...@apache.org> on 2018/03/12 17:22:00 UTC

[jira] [Created] (IMPALA-6640) profile collection via standard Impyla usage won't have ExecSummary

Michael Brown created IMPALA-6640:
-------------------------------------

             Summary: profile collection via standard Impyla usage won't have ExecSummary
                 Key: IMPALA-6640
                 URL: https://issues.apache.org/jira/browse/IMPALA-6640
             Project: IMPALA
          Issue Type: Bug
          Components: Infrastructure
    Affects Versions: Impala 2.11.0
            Reporter: Michael Brown


It seems the Impyla (HS2 client for Python stress test) DB API paradigm doesn't lend itself to theĀ ideal collection of query profiles.
 # It seems a profile will not have an ExecSummary, End Time, or Errors unlessĀ the profile is requested after a CloseOperation RPC. This makes sense to me.
 # GetRuntimeProfile RPC must be called before the CloseSession RPC. This makes sense to me.
 # One can't really use standard, public methods in Impyla to do this: impala.hiveserver2.HiveServer2Cursor().close() handles both the CloseOperation and CloseSession RPCs in a single call.
 # The same is true of the cursor in a context manager \_\_exit\_\_ setting. \_\_exit\_\_ just calls close()

This means we have to tap into the more private bits of Impyla to do this.
{noformat}
#!/usr/bin/env impala-python

import impala.dbapi
from impala._thrift_api import TGetRuntimeProfileReq

with impala.dbapi.connect(host='localhost', port=21050) as conn:
  with conn.cursor() as cursor:
    cursor.execute('SELECT COUNT(2) FROM functional.alltypes')
    cursor.fetchall()
    with open('profile-before-close-operation.txt', 'w') as fh:
      fh.write(cursor.get_profile())
    # Normal cursor context would end here, but....
    # Issue CloseOperation RPC without CloseSession RPC.
    # This is impala.hiveserver2.Operation().close()
    resp = cursor._last_operation.close()
    req = TGetRuntimeProfileReq(operationHandle=cursor._last_operation.handle,
                                sessionHandle=cursor._last_operation.session.handle)
    resp = cursor._last_operation._rpc('GetRuntimeProfile', req)
    # impala.hiveserver2.HiveServer2Cursor()._reset_state() assist
    cursor._last_operation_active = False
    with open('profile-after-close-operation.txt', 'w') as fh:
      fh.write(resp.profile)
{noformat}

We should think about pythonic ways to make this better for Impyla, or at least alter the stress test to get the profiles of the queries after CloseOperation.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)