class_docstr: This handler handles connection and execution of the Couchbase statements.
docstr: Returns a list of entity columns
  Args:
      table_name (str): name of one of tables returned by self.get_tables()
  Returns:
      HandlerResponse: shoud have same columns as information_schema.columns
          (https://dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html)
          Column 'COLUMN_NAME' is mandatory, other is optional. Hightly
          recomended to define also 'DATA_TYPE': it should be one of
          python data types (by default it str).
docstr_tok: ["Returns","a","list","of","entity","columns","Args",":","table_name","(","str",")",":","name","of","one","of","tables","returned","by","self.get_tables","(",")","Returns",":","HandlerResponse",":","shoud","have","same","columns","as","information_schema.columns","(","https",":","\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/information-schema-columns-table.html",")","Column","'COLUMN_NAME","'","is","mandatory",",","other","is","optional",".","Hightly","recomended","to","define","also","'DATA_TYPE","'",":","it","should","be","one","of","python","data","types","(","by","default","it","str",")","."]
code: def get_columns(self, table_name) -> Response:
      """Returns a list of entity columns
      Args:
          table_name (str): name of one of tables returned by self.get_tables()
      Returns:
          HandlerResponse: shoud have same columns as information_schema.columns
              (https://dev.mysql.com/doc/refman/8.0/en/information-schema-columns-table.html)
              Column 'COLUMN_NAME' is mandatory, other is optional. Hightly
              recomended to define also 'DATA_TYPE': it should be one of
              python data types (by default it str).
      """
  
      response = Response(False)
  
      cluster = self.connect()
      bucket = cluster.bucket(self.bucket_name)
      cb = bucket.scope(self.scope)
  
      try:
          q = f"SELECT * FROM `{table_name}` limit 1"
          row_iter = cb.query(q)
          data = []
          for row in row_iter:
              for k, v in row[table_name].items():
                  data.append([k, type(v).__name__])
          df = pd.DataFrame(data, columns=["Field", "Type"])
          response = Response(RESPONSE_TYPE.TABLE, df)
      except KeyspaceNotFoundException as e:
          response = Response(
              RESPONSE_TYPE.ERROR,
              error_message=f"Error: {e.error_context.first_error_message}",
          )
  
      return response
  
imports: from datetime import timedelta
  from collections import OrderedDict
  from mindsdb.integrations.libs.base import DatabaseHandler
  from mindsdb.utilities import log
  from mindsdb_sql.parser.ast.base import ASTNode
  import pandas
  from mindsdb.integrations.libs.const import HANDLER_CONNECTION_ARG_TYPE
  from mindsdb.integrations.libs.response import HandlerStatusResponse, HandlerResponse, RESPONSE_TYPE
  from couchbase.auth import PasswordAuthenticator
  from couchbase.cluster import Cluster
  from couchbase.exceptions import UnAmbiguousTimeoutException
  from couchbase.options import ClusterOptions
  from couchbase.exceptions import KeyspaceNotFoundException, CouchbaseException
label_desc: Use image node_id 8 for calling the CouchbaseHandler obj's underlying member method code with example usage: obj.get_columns(table_name) and returns: response