### Apache Airflow version

Other Airflow 2 version (please specify below)

### What happened

Airflow version: 2.5.3
Description: While using BigQueryCreateExternalTableOperator, when we to create external table on top of parquet files located in GCS, airflow shows below error:
google.api_core.exceptions.BadRequest: 400 POST ... failed. CsvOptions can only be specified if storage format is CSV.

No csvOptions are mentioned while passing the source_format as Parquet. There seems to be an issue with bigquery.py hook.

### What you think should happen instead

_No response_

### How to reproduce

While using BigQueryCreateExternalTableOperator, try to create external table on top of parquet files located in GCS. Sample usage:
`create_external_table = BigQueryCreateExternalTableOperator(
    task_id="create_external_table",
    destination_project_dataset_table="table_name",
    bucket=GCS_BUCKET_NAME,
    source_objects=[<list of URIs of parquet files>],
    source_format="PARQUET",
    autodetect=True,
    gcp_conn_id="gcp_conn_id",
    google_cloud_storage_conn_id="test_conn_id",
)`

### Operating System

-

### Versions of Apache Airflow Providers

_No response_

### Deployment

Official Apache Airflow Helm Chart

### Deployment details

_No response_

### Anything else

_No response_

### Are you willing to submit PR?

- [ ] 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)

:param dataset_id: The dataset ID of the requested table. (templated)
    :param table_id: The table ID of the requested table. (templated)
    :param table_project_id: (Optional) The project ID of the requested table.
        If None, it will be derived from the hook's project ID. (templated)
    :param job_project_id: (Optional) Google Cloud Project where the job is running.
        If None, it will be derived from the hook's project ID. (templated)
    :param project_id: (Deprecated) (Optional) The name of the project where the data
        will be returned from. If None, it will be derived from the hook's project ID. (templated)
    :param max_results: The maximum number of records (rows) to be fetched
        from the table. (templated)
    :param selected_fields: List of fields to return (comma-separated). If
        unspecified, all fields are returned.
    :param gcp_conn_id: (Optional) The connection ID used to connect to Google Cloud.
    :param location: The location used for the operation.
    :param impersonation_chain: Optional service account to impersonate using short-term
        credentials, or chained list of accounts required to get the access_token
        of the last account in the list, which will be impersonated in the request.
        If set as a string, the account must grant the originating account
        the Service Account Token Creator IAM role.
        If set as a sequence, the identities from the list must grant
        Service Account Token Creator IAM role to the directly preceding identity, with first
        account from the list granting this role to the originating account (templated).
    :param deferrable: Run operator in the deferrable mode
    :param poll_interval: (Deferrable mode only) polling period in seconds to check for the status of job.
        Defaults to 4 seconds.
    :param as_dict: if True returns the result as a list of dictionaries, otherwise as list of lists
        (default: False).
    :param use_legacy_sql: Whether to use legacy SQL (true) or standard SQL (false).
    """
    template_fields: Sequence[str] = (