def METHOD_NAME(self) -> Iterator[TableMetadata]:
    """
    Using itertools.groupby and raw level iterator, it groups to table and yields TableMetadata
    :return:
    """
    for key, group in groupby(self._get_raw_extract_iter(), self._get_table_key):
        columns = []
        for row in group:
            last_row = row
            columns.append(ColumnMetadata(row['col_name'], row['col_description'],
                                          row['col_type'], row['col_sort_order']))
        yield TableMetadata(self._database, last_row['cluster'],
                            last_row['schema'],
                            last_row['name'],
                            last_row['description'],
                            columns)