**Description**

We would like to be able to load data to **existing** BigQuery tables without having to specify schema_fields/schema_object in `GCSToBigQueryOperator` since table already exists.

**Use case / motivation**
<details>
  <summary>BigQuery load job usage details and problem explanation</summary>
  
We create BigQuery tables/datasets through CI process (terraform managed), with the help of Airflow we updating those tables with data.
To update tables with data we can use:
Airflow 2.0 operator: GCSToBigQueryOperator
Airflow 1.* operator (deprecated) GoogleCloudStorageToBigQueryOperator 
However those operator require to specify one of 3 things:
1. schema_fields - fields that define table schema
2. schema_object -  a GCS object path pointing to a .json file that contains the schema for the table
3. or autodetect=True
In other cases it will:
```
 raise ValueError('At least one of `schema_fields`, `schema_object`, '
                                 'or `autodetect**=True**` must be passed.')  
```
_Note: it does not actually says that `autodetect` must be `True` in exception - but according to code it must be specified as True, or schema should be used otherwise._

But we already have created table, and we can update it using 
`bq load` command. (which Airflow operators mentioned above are using internally)

When using `bq load` - you also have an option to specify **schema**. The schema can be a local JSON file, or it can be typed inline as part of the command. You can also use the `--autodetect` flag instead of supplying a schema definition.
https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv#bq

When you specify `--autodetect` as True - BigQuery will try to give random names to your columns, e.g.: 'string_field_0', 'int_field_1' - and if you are trying to load into **existing** table - `bq load` will fail with error:
'Cannot add fields (field: string_field_0)'}.'
Same way Airflow operators like 'GCSToBigQueryOperator' will fail.


However **there is also an option NOT to specify** `--autodetect` or specify `--autodetect=False` and in this case `bq load` will load from CloudStorage to **existing** BQ table without problems.
</details>


Proposal/TL;DR: 
Add an option **not** to specify `--autodetect` or specify `--autodetect=False` when  write_disposition='WRITE_APPEND' is used in GCSToBigQueryOperator. This will allow an operator to update **existing** BigQuery table without having to specify schema within the operator itself (it will just be updating **existing** table with data).


f"Could not determine MAX value in column {self.max_id_key} "
                        f"since the default value of 'string_field_n' was set by BQ"
                    )
                else:
                    raise AirflowException(e.message)
            if rows:
                for row in rows:
                    max_id = row[0] if row[0] else 0
                    self.log.info(
                        "Loaded BQ data with MAX value of column %s.%s: %s",
                        self.destination_project_dataset_table,
                        self.max_id_key,
                        max_id,
                    )
                    return str(max_id)
            else:
                raise RuntimeError(f"The {select_command} returned no rows!")
    def _create_empty_table(self):
        project_id, dataset_id, table_id = self.hook.split_tablename(
            table_input=self.destination_project_dataset_table,
            default_project_id=self.hook.project_id or "",
        )
        external_config_api_repr = {
            "autodetect": self.autodetect,
            "sourceFormat": self.source_format,
            "sourceUris": self.source_uris,
            "compression": self.compression.upper(),
            "ignoreUnknownValues": self.ignore_unknown_values,
        }