### Apache Airflow version

Other Airflow 2 version (please specify below)
Airflow 2.4.2

### What happened

BaseSQLToGCSOperator creates row group for each rows during parquet generation, which cause compression not work and increase file size.
![image](https://github.com/apache/airflow/assets/51909776/bf256065-c130-4354-81c7-8ca2ed4e8d93)


### What you think should happen instead

_No response_

### How to reproduce

OracleToGCSOperator(
        task_id='oracle_to_gcs_parquet_test',
        gcp_conn_id=GCP_CONNECTION,
        oracle_conn_id=ORACLE_CONNECTION,
        sql='',
        bucket=GCS_BUCKET_NAME,
        filename='',
        export_format='parquet',
)

### Operating System

CentOS Linux 7

### Versions of Apache Airflow Providers

apache-airflow-providers-apache-hive  2.1.0
apache-airflow-providers-apache-sqoop 2.0.2
apache-airflow-providers-celery       3.0.0
apache-airflow-providers-common-sql   1.2.0
apache-airflow-providers-ftp          3.1.0
apache-airflow-providers-google       8.4.0
apache-airflow-providers-http         4.0.0
apache-airflow-providers-imap         3.0.0
apache-airflow-providers-mysql        3.0.0
apache-airflow-providers-oracle       2.1.0
apache-airflow-providers-salesforce   5.3.0
apache-airflow-providers-sqlite       3.2.1

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

"""Convert values from DBAPI to output-friendly formats."""
        return [
            self.convert_type(value, col_type_dict.get(name), stringify_dict=self.stringify_dict)
            for name, value in zip(schema, row)
        ]
    def _write_local_data_files(self, cursor):
        """
        Takes a cursor, and writes results to a local file.
        :return: A dictionary where keys are filenames to be used as object
            names in GCS, and values are file handles to local files that
            contain the data for the GCS objects.
        """
        org_schema = list(map(lambda schema_tuple: schema_tuple[0], cursor.description))
        schema = [column for column in org_schema if column not in self.exclude_columns]
        col_type_dict = self._get_col_type_dict()
        file_no = 0
        file_mime_type = self._get_file_mime_type()
        file_to_upload, tmp_file_handle = self._get_file_to_upload(file_mime_type, file_no)
        if self.export_format == "csv":
            csv_writer = self._configure_csv_file(tmp_file_handle, schema)
        if self.export_format == "parquet":
            parquet_schema = self._convert_parquet_schema(cursor)
            parquet_writer = self._configure_parquet_file(tmp_file_handle, parquet_schema)
        prev_partition_values = None