### Apache Airflow Provider(s)

dbt-cloud

### Versions of Apache Airflow Providers

```
apache-airflow-providers-dbt-cloud==2.2.0
```

### Apache Airflow version

2.2.5

### Operating System

Ubuntu 18.04

### Deployment

Composer

### Deployment details

_No response_

### What happened

Instructing `DbtCloudGetJobRunArtifactOperator` to save results in a path like `{{ var.value.base_path }}/dbt_run_warehouse/{{ run_id }}/run_results.json` fails because it contains a path not created yet.


```
Traceback (most recent call last):
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/providers/dbt/cloud/operators/dbt.py", line 216, in execute
    with open(self.output_file_name, "w") as file:
FileNotFoundError: [Errno 2] No such file or directory: '/home/airflow/gcs/data/dbt/dbt_run_warehouse/manual__2022-10-17T22:18:25.469526+00:00/run_results.json'
```


### What you think should happen instead

It should create this path and dump the content of the requested artefact

### How to reproduce

```python
with DAG('test') as dag:
  DbtCloudGetJobRunArtifactOperator(
    task_id='dbt_run_warehouse',
    run_id=12341234,
    path='run_results.json',
    output_file_name='{{ var.value.dbt_base_target_folder }}/dbt_run_warehouse/{{ run_id }}/run_results.json'
```

     

### Anything else

_No response_

### Are you willing to submit 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)

account_id=self.account_id,
                    expected_statuses=DbtCloudJobRunStatus.SUCCESS.value,
                    check_interval=self.check_interval,
                    timeout=self.timeout,
                ):
                    self.log.info("Job run %s has completed successfully.", str(self.run_id))
                else:
                    raise DbtCloudJobRunException(f"Job run {self.run_id} has failed or has been cancelled.")
                return self.run_id
            else:
                end_time = time.time() + self.timeout
                self.defer(
                    timeout=self.execution_timeout,
                    trigger=DbtCloudRunJobTrigger(
                        conn_id=self.dbt_cloud_conn_id,
                        run_id=self.run_id,
                        end_time=end_time,
                        account_id=self.account_id,
                        poll_interval=self.check_interval,
                    ),
                    method_name="execute_complete",
                )
        else:
            if self.deferrable is True:
                warnings.warn(
                    "Argument `wait_for_termination` is False and `deferrable` is True , hence "
                    "`deferrable` parameter doesn't have any effect",
                )
            return self.run_id
    def execute_complete(self, context: "Context", event: dict[str, Any]) -> int: