class_docstr: The `ColumnCatalog` catalog stores information about the columns of the table.
  It maintains the following information for each column
  `_row_id:` an autogenerated identifier
  `_name: ` name of the column
  `_type:` the type of the column, refer `ColumnType`
  `_is_nullable:` which indicates whether the column is nullable
  `_array_type:` the type of array, as specified in `NdArrayType` (or `None` if the column is a primitive type)
  `_array_dimensions:` the dimensions of the array (if `_array_type` is not `None`)
  `_table_id:` the `_row_id` of the `TableCatalog` entry to which the column belongs
  `_dep_caches`: list of function caches associated with the column
code: def __init__(
      self,
      name: str,
      type: ColumnType,
      is_nullable: bool = False,
      array_type: NdArrayType = None,
      array_dimensions: Tuple[int] = (),
      table_id: int = None,
  ):
      self._name = name
      self._type = type
      self._is_nullable = is_nullable
      self._array_type = array_type
      self.array_dimensions = array_dimensions
      self._table_id = table_id
  
file_path: evadb/evadb/catalog/models/column_catalog.py
imports: from __future__ import annotations
  from ast import literal_eval
  from typing import Tuple
  from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, UniqueConstraint
  from sqlalchemy.orm import relationship
  from sqlalchemy.types import Enum
  from evadb.catalog.catalog_type import ColumnType, Dimension, NdArrayType
  from evadb.catalog.models.association_models import depend_column_and_function_cache
  from evadb.catalog.models.base_model import BaseModel
  from evadb.catalog.models.utils import ColumnCatalogEntry
label_desc: Use image node_id 1 to create a new ColumnCatalog object from inherited base classes: BaseModel with example: obj = ColumnCatalog(name, type, is_nullable, array_type, array_dimensions, table_id)