class_docstr: This handler handles connection and consumption of the CKAN API.
docstr: Execute a query on the CKAN instance.
  :param query_str: The query to execute.
  :return: The response of the query.
docstr_tok: ["Execute","a","query","on","the","CKAN","instance",".",":","param","query_str",":","The","query","to","execute",".",":","return",":","The","response","of","the","query","."]
code: def native_query(self, query_str: str) -> HandlerResponse:
      """
      Execute a query on the CKAN instance.
      :param query_str: The query to execute.
      :return: The response of the query.
      """
      if not self.ckan:
          self.connect()
      result = self.ckan.action.datastore_search_sql(sql=query_str)
      if len(result.get("records")) > 0:
          df = pd.DataFrame(result["records"])
          response = HandlerResponse(RESPONSE_TYPE.TABLE, df)
      else:
          response = HandlerResponse(RESPONSE_TYPE.TABLE, None)
      return response
  
file_path: mindsdb/mindsdb/integrations/handlers/ckan_handler/ckan_handler.py
imports: from ckanapi import RemoteCKAN
  import pandas
  from mindsdb.integrations.libs.base import DatabaseHandler
  from mindsdb.integrations.libs.response import HandlerStatusResponse, HandlerResponse, RESPONSE_TYPE
  from mindsdb_sql.parser.ast.base import ASTNode
  from mindsdb_sql.render.sqlalchemy_render import SqlalchemyRender
  from mindsdb.utilities import log
label_desc: Use image node_id 6 for calling the CkanHandler obj's underlying member method code with example usage: obj.native_query(query_str) and returns: response