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

if self.null_marker is not None:
                    row = [value if value is not None else self.null_marker for value in row]
                csv_writer.writerow(row)
            elif self.export_format == "parquet":
                row = self.convert_types(schema, col_type_dict, row)
                if self.null_marker is not None:
                    row = [value if value is not None else self.null_marker for value in row]
                row_pydic = {col: [value] for col, value in zip(schema, row)}
                tbl = pa.Table.from_pydict(row_pydic, parquet_schema)
                parquet_writer.write_table(tbl)
            else:
                row = self.convert_types(schema, col_type_dict, row)
                row_dict = dict(zip(schema, row))
                json.dump(row_dict, tmp_file_handle, sort_keys=True, ensure_ascii=False)
                
                tmp_file_handle.write("\n")
            
            fppos = tmp_file_handle.tell()
            tmp_file_handle.seek(0, os.SEEK_END)
            file_size = tmp_file_handle.tell()
            tmp_file_handle.seek(fppos, os.SEEK_SET)
            if file_size >= self.approx_max_file_size_bytes:
                file_no += 1
                if self.export_format == "parquet":
                    parquet_writer.close()
                file_to_upload["partition_values"] = curr_partition_values
                yield file_to_upload
                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)