### 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)

wait_for_termination=False,
            **self.config,
        )
        assert operator.dbt_cloud_conn_id == conn_id
        assert operator.job_id == self.config["job_id"]
        assert operator.account_id == account_id
        assert operator.check_interval == self.config["check_interval"]
        assert operator.timeout == self.config["timeout"]
        assert not operator.wait_for_termination
        assert operator.steps_override == self.config["steps_override"]
        assert operator.schema_override == self.config["schema_override"]
        assert operator.additional_run_config == self.config["additional_run_config"]
        with patch.object(DbtCloudHook, "get_job_run") as mock_get_job_run:
            operator.execute(context=self.mock_context)
            mock_run_job.assert_called_once_with(
                account_id=account_id,
                job_id=JOB_ID,
                cause=f"Triggered via Apache Airflow by task {TASK_ID!r} in the {self.dag.dag_id} DAG.",
                steps_override=self.config["steps_override"],
                schema_override=self.config["schema_override"],
                additional_run_config=self.config["additional_run_config"],
            )
            mock_get_job_run.assert_not_called()
    @patch.object(DbtCloudHook, "trigger_job_run")
    @pytest.mark.parametrize(
        "conn_id, account_id",
        [(ACCOUNT_ID_CONN, None), (NO_ACCOUNT_ID_CONN, ACCOUNT_ID)],
        ids=["default_account", "explicit_account"],
    )
    def test_custom_trigger_reason(self, mock_run_job, conn_id, account_id):