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

["101", "school", "2015-01-01"],
    ["102", "business", "2017-05-24"],
    ["103", "non-profit", "2018-10-01"],
]
OUTPUT_DATA = json.dumps(
    {
        "column_a": "convert_type_return_value",
        "column_b": "convert_type_return_value",
        "column_c": "convert_type_return_value",
    }
).encode("utf-8")
SCHEMA_FILE = "schema_file.json"
APP_JSON = "application/json"
OUTPUT_DF = pd.DataFrame([["convert_type_return_value"] * 3] * 3, columns=COLUMNS)
EXCLUDE_COLUMNS = set("column_c")
PARTITION_COLUMNS = ["column_b", "column_c"]
NEW_COLUMNS = [c for c in COLUMNS if c not in EXCLUDE_COLUMNS]
OUTPUT_DF_WITH_EXCLUDE_COLUMNS = pd.DataFrame(
    [["convert_type_return_value"] * len(NEW_COLUMNS)] * 3, columns=NEW_COLUMNS
)
class DummySQLToGCSOperator(BaseSQLToGCSOperator):
    def field_to_bigquery(self, field) -> dict[str, str]:
        return {
            "name": field[0],
            "type": "STRING",
            "mode": "NULLABLE",
        }
    def convert_type(self, value, schema_type, stringify_dict):
        return "convert_type_return_value"
    def query(self):