gabeiglio commented on code in PR #1443:
URL: https://github.com/apache/iceberg-python/pull/1443#discussion_r1901092863
##########
pyiceberg/io/pyarrow.py:
##########
@@ -1216,6 +1216,25 @@ def _field_id(self, field: pa.Field) -> int:
return -1
+def _get_column_projection_values(
+ file: DataFile,
+ projected_schema: Schema,
+ projected_field_ids: Set[int],
+ file_project_schema: Schema,
+ partition_spec: Optional[PartitionSpec] = None,
+) -> Dict[str, object]:
+ """Apply Column Projection rules to File Schema."""
+ projected_missing_fields = {}
+
+ for field_id in
projected_field_ids.difference(file_project_schema.field_ids):
+ if partition_spec is not None:
+ for partition_field in
partition_spec.fields_by_source_id(field_id):
+ if isinstance(partition_field.transform, IdentityTransform)
and partition_field.name in file.partition.__dict__:
+ projected_missing_fields[partition_field.name] =
file.partition.__dict__[partition_field.name]
Review Comment:
Thanks for the input! thats right, the partition field shouldn't be accessed
with the name. But, if I'm understanding correctly, the partition record
position in the manifest file is not the same as the position of the field in
the schema.
For example, lets say I have this schema
```
schema {
1 field1: string
2 partition_field: int
}
```
And a DataFile like this:
```
DataFile {
...
partition: Record(partittion_field: 1)
...
}
```
Running build_position_accessor with the `schema` defined earlier will
result in:
```
{
1: Accessor(position=0,inner=None),
2: Accessor(position=1,inner=None),
}
```
Then, doing `accessor[partition_field.id]` will result in
`Accessor(position=1,inner=None)` but the partition record in the manifest
would be in position 0.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]