def METHOD_NAME(self) -> Model:
    self.validate()
    try:
        database_id = self._base_model.database_id
        table_name = self._properties["table_name"]
        owners = self._properties["owners"]
        database = db.session.query(Database).get(database_id)
        if not database:
            raise SupersetErrorException(
                SupersetError(
                    message=__("The database was not found."),
                    error_type=SupersetErrorType.DATABASE_NOT_FOUND_ERROR,
                    level=ErrorLevel.ERROR,
                ),
                status=404,
            )
        table = SqlaTable(table_name=table_name, owners=owners)
        table.database = database
        table.schema = self._base_model.schema
        table.template_params = self._base_model.template_params
        table.normalize_columns = self._base_model.normalize_columns
        table.is_sqllab_view = True
        table.sql = ParsedQuery(self._base_model.sql).stripped()
        db.session.add(table)
        cols = []
        for config_ in self._base_model.columns:
            column_name = config_.column_name
            col = TableColumn(
                column_name=column_name,
                verbose_name=config_.verbose_name,
                expression=config_.expression,
                filterable=True,
                groupby=True,
                is_dttm=config_.is_dttm,
                type=config_.type,
                description=config_.description,
            )
            cols.append(col)
        table.columns = cols
        mets = []
        for config_ in self._base_model.metrics:
            metric_name = config_.metric_name
            met = SqlMetric(
                metric_name=metric_name,
                verbose_name=config_.verbose_name,
                expression=config_.expression,
                metric_type=config_.metric_type,
                description=config_.description,
            )
            mets.append(met)
        table.metrics = mets
        db.session.commit()
    except (SQLAlchemyError, DAOCreateFailedError) as ex:
        logger.warning(ex, exc_info=True)
        db.session.rollback()
        raise DatasetDuplicateFailedError() from ex
    return table