_construct_parameters in pyiceberg/catalog/glue.py builds the Glue Parameters map by starting from whatever Glue already holds and layering the current table properties on top:
new_parameters = glue_table.get("Parameters", {}) if glue_table else {}
new_parameters.update({TABLE_TYPE: ICEBERG.upper(), METADATA_LOCATION: metadata_location})
if prev_metadata_location:
new_parameters[PREVIOUS_METADATA_LOCATION] = prev_metadata_location
if metadata_properties:
for key, value in metadata_properties.items():
new_parameters[key] = str(value)
The operation is additive only. A key that exists in Glue but is no longer present in the table's metadata is never deleted, so removing a property from the table and committing leaves the old value in Glue permanently.
Glue Parameters and the table's property map therefore drift apart over time, and the drift is one-directional: Glue accumulates every key the table has ever had. Anything that reads table properties via Glue sees keys the table no longer declares.
Issue investigation generated via claude, reviewed by Sung, Kevin, Fokko.
_construct_parametersinpyiceberg/catalog/glue.pybuilds the GlueParametersmap by starting from whatever Glue already holds and layering the current table properties on top:The operation is additive only. A key that exists in Glue but is no longer present in the table's metadata is never deleted, so removing a property from the table and committing leaves the old value in Glue permanently.
Glue
Parametersand the table's property map therefore drift apart over time, and the drift is one-directional: Glue accumulates every key the table has ever had. Anything that reads table properties via Glue sees keys the table no longer declares.Issue investigation generated via claude, reviewed by Sung, Kevin, Fokko.