code: def _deserialize_sql_row(
      self, sql_row: dict, columns: List[ColumnCatalogEntry]
  ):
      # Deserialize numpy data
      dict_row = {}
      for idx, col in enumerate(columns):
          if col.type == ColumnType.NDARRAY:
              dict_row[col.name] = self._serializer.deserialize(
                  sql_row[col.name]
              )
          else:
              dict_row[col.name] = sql_row[col.name]
      dict_row[ROW_NUM_COLUMN] = dict_row[IDENTIFIER_COLUMN]
      return dict_row
  
imports: from typing import Iterator, List
  import numpy
  import pandas
  from sqlalchemy import Table, inspect
  from sqlalchemy.sql.expression import ColumnElement
  from evadb.catalog.catalog_type import ColumnType
  from evadb.catalog.models.base_model import BaseModel
  from evadb.catalog.models.column_catalog import ColumnCatalogEntry
  from evadb.catalog.models.table_catalog import TableCatalogEntry
  from evadb.catalog.schema_utils import SchemaUtils
  from evadb.catalog.sql_config import IDENTIFIER_COLUMN, ROW_NUM_COLUMN
  from evadb.database import EvaDBDatabase
  from evadb.models.storage.batch import Batch
  from evadb.parser.table_ref import TableInfo
  from evadb.storage.abstract_storage_engine import AbstractStorageEngine
  from evadb.utils.generic_utils import PickleSerializer, rebatch
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 3 for calling the SQLStorageEngine obj's underlying member method code with example usage: obj._deserialize_sql_row(sql_row, columns) and returns: dict_row