# Version: Airflow: apache-airflow-backport-providers-google==2020.11.13

## Problem 
The operator gcs to bigquery fails because it calls the method download with positional parameters in the wrong order. 
It calls in this way `gcs_hook.download(self.bucket, self.schema_object)`. See more in the [line](https://github.com/apache/airflow/blob/master/airflow/providers/google/cloud/transfers/gcs_to_bigquery.py#L267)

The signature for the download is `gcs_hook.download(self, object_name, bucket_name)`. See more in the [line ](https://github.com/apache/airflow/blob/master/airflow/providers/google/cloud/hooks/gcs.py#L259-L261)

## Solution

1.  Change the [gcs_to_bigquery](https://github.com/apache/airflow/blob/master/airflow/providers/google/cloud/transfers/gcs_to_bigquery.py#L267) operator so it  calls the method download with the keyword parameters rather than positional.
2. Change the [gcs_to_bigquery](https://github.com/apache/airflow/blob/master/airflow/providers/google/cloud/transfers/gcs_to_bigquery.py#L267) operator so it calls the method download with the right order of the parameters. 
3. Change the signature of download method in the [gcs_hook](https://github.com/apache/airflow/blob/master/airflow/providers/google/cloud/hooks/gcs.py#L353-L361)  to be `def download(self, bucket_name, object_name, filename)` rather than `def dowload(self, object_name, bucket_name, filename)` 

I would prefer the option 3 because the method upload start with bucket_name see [line]( https://github.com/apache/airflow/blob/master/airflow/providers/google/cloud/hooks/gcs.py#L353-L361) and it makes sense to follow the same convention. Also most of the method in the gcs hook start with bucket name. 

Also in Airflow 1.10.12 the method download starts with bucket_name and it would make sense not to change the order of the parameters (even if it change the name of the parameters). See [here](https://airflow.apache.org/docs/stable/_api/airflow/contrib/hooks/gcs_hook/index.html#airflow.contrib.hooks.gcs_hook.GoogleCloudStorageHook.download)

## Issues Related
This issue is related with https://github.com/apache/airflow/issues/12335. It was closed but it was not fixed. I left a comments but there was not reply.
airflow/providers/google/cloud/transfers/gcs_to_bigquery.py
"""
    Loads files from Google Cloud Storage into BigQuery.
    The schema to be used for the BigQuery table may be specified in one of
    two ways. You may either directly pass the schema fields in, or you may
    point the operator to a Google Cloud Storage object name. The object in
    Google Cloud Storage must be a JSON file with the schema fields in it.
    .. seealso::
        For more information on how to use this operator, take a look at the guide:
        :ref:`howto/operator:GCSToBigQueryOperator`
    :param bucket: The bucket to load from. (templated)
    :type bucket: str
    :param source_objects: List of Google Cloud Storage URIs to load from. (templated)
        If source_format is 'DATASTORE_BACKUP', the list must only contain a single URI.
    :type source_objects: list[str]
    :param destination_project_dataset_table: The dotted
        ``(<project>.|<project>:)<dataset>.<table>`` BigQuery table to load data into.
        If ``<project>`` is not included, project will be the project defined in
        the connection json. (templated)
    :type destination_project_dataset_table: str
    :param schema_fields: If set, the schema field list as defined here:
        https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.load
        Should not be set when source_format is 'DATASTORE_BACKUP'.
        Parameter must be defined if 'schema_object' is null and autodetect is False.
    :type schema_fields: list
    :param schema_object: If set, a GCS object path pointing to a .json file that
        contains the schema for the table. (templated)
        Parameter must be defined if 'schema_fields' is null and autodetect is False.
    :type schema_object: str
    :param source_format: File format to export.