def METHOD_NAME(
    self, path: DbPath, raw_schema: Dict[str, tuple], filter_columns: Sequence[str], where: str = None
):
    accept = {i.lower() for i in filter_columns}
    rows = [row for name, row in raw_schema.items() if name.lower() in accept]
    resulted_rows = []
    for row in rows:
        row_type = "DECIMAL" if row[1].startswith("DECIMAL") else row[1]
        type_cls = self.dialect.TYPE_CLASSES.get(row_type, UnknownColType)
        if issubclass(type_cls, Integer):
            row = (row[0], row_type, None, None, 0)
        elif issubclass(type_cls, Float):
            numeric_precision = math.ceil(row[2] / math.log(2, 10))
            row = (row[0], row_type, None, numeric_precision, None)
        elif issubclass(type_cls, Decimal):
            items = row[1][8:].rstrip(")").split(",")
            numeric_precision, numeric_scale = int(items[0]), int(items[1])
            row = (row[0], row_type, None, numeric_precision, numeric_scale)
        elif issubclass(type_cls, Timestamp):
            row = (row[0], row_type, row[2], None, None)
        else:
            row = (row[0], row_type, None, None, None)
        resulted_rows.append(row)
    col_dict: Dict[str, ColType] = {row[0]: self.dialect.parse_type(path, *row) for row in resulted_rows}
    self._refine_coltypes(path, col_dict, where)
    return col_dict