### Description

The Databricks jobs 2.1 API has the ability to repair failed or skipped tasks in a Databricks workflow without having to rerun successful tasks for a given workflow run. It would be nice to be able to leverage this functionality via airflow operators.

### Use case/motivation

The primary motivation is the ability to be more efficient and only have to rerun failed or skipped tasks rather than the entire workflow if only 1 out of 10 tasks fail.

**Repair run API:**
https://docs.databricks.com/dev-tools/api/latest/jobs.html#operation/JobsRunsRepairfail

@alexott for visability

### Related issues

_No response_

### Are you willing to submit a PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

"""
        Utility function to call the ``api/2.0/jobs/runs/submit`` endpoint.
        :param json: The data used in the body of the request to the ``submit`` endpoint.
        :return: the run_id as an int
        """
        response = self._do_api_call(SUBMIT_RUN_ENDPOINT, json)
        return response["run_id"]
    def list_jobs(
        self, limit: int = 25, offset: int = 0, expand_tasks: bool = False, job_name: str | None = None
    ) -> list[dict[str, Any]]:
        """
        Lists the jobs in the Databricks Job Service.
        :param limit: The limit/batch size used to retrieve jobs.
        :param offset: The offset of the first job to return, relative to the most recently created job.
        :param expand_tasks: Whether to include task and cluster details in the response.
        :param job_name: Optional name of a job to search.
        :return: A list of jobs.
        """
        has_more = True
        all_jobs = []
        while has_more:
            payload: dict[str, Any] = {
                "limit": limit,
                "expand_tasks": expand_tasks,