- Add GoogleSheetsExtractPartitionsOperator: extracts unique partition
values from data and returns list[dict] for Airflow expand_kwargs
- Add create_sheet_if_missing to GoogleSheetsWriteOperator: creates
target sheet tab if absent, handles HTTP 400 race conditions
- Add partition_by / partition_value to GoogleSheetsWriteOperator:
filters rows inside the operator, works with all write modes
- Add column_mapping to GoogleSheetsWriteOperator: renames headers
before writing; merge_key/partition_by/schema use original names