code: def read_dataset_schema(schema_path: str) -> Dict[str, List[TableColumn]]:
      
      schema: Dict[str, List[TableColumn]] = defaultdict(list)
      for i, line in enumerate(open(schema_path, "r")):
          if i == 0:
              header = [x.strip() for x in line.split(",")]
          elif line[0] == "-":
              continue
          else:
              data = {key: value for key, value in zip(header, [x.strip() for x in line.split(",")])}
  
              table = data.get("Table Name", None) or data.get("Table")
              column = data.get("Field Name", None) or data.get("Field")
              is_primary_key = data.get("Primary Key") == "y"
              schema[table.upper()].append(TableColumn(column.upper(), data["Type"], is_primary_key))
  
      return {**schema}
docs: Reads a schema from the text2sql data, returning a dictionary
      mapping table names to their columns and respective types.
      This handles columns in an arbitrary order and also allows
      either ``{Table, Field}`` or ``{Table, Field} Name`` as headers,
      because both appear in the data. It also uppercases table and
      column names if they are not already uppercase.
  
      Parameters
      ----------
      schema_path : ``str``, required.
          The path to the csv schema.
  
      Returns
      -------
      A dictionary mapping table names to typed columns.