Skip to content

Commit c82a61d

Browse files
allow string transforms in add_field()
1 parent 8adf246 commit c82a61d

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

pyiceberg/table/update/spec.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
Optional,
2525
Set,
2626
Tuple,
27+
Union,
2728
)
2829

2930
from pyiceberg.expressions import (
@@ -47,7 +48,7 @@
4748
UpdatesAndRequirements,
4849
UpdateTableMetadata,
4950
)
50-
from pyiceberg.transforms import IdentityTransform, TimeTransform, Transform, VoidTransform
51+
from pyiceberg.transforms import IdentityTransform, TimeTransform, Transform, VoidTransform, parse_transform
5152

5253
if TYPE_CHECKING:
5354
from pyiceberg.table import Transaction
@@ -85,12 +86,16 @@ def __init__(self, transaction: Transaction, case_sensitive: bool = True) -> Non
8586
def add_field(
8687
self,
8788
source_column_name: str,
88-
transform: Transform[Any, Any],
89+
transform: Union[str, Transform[Any, Any]], # Aceptamos strings o Transform
8990
partition_field_name: Optional[str] = None,
9091
) -> UpdateSpec:
92+
93+
if isinstance(transform, str):
94+
transform = parse_transform(transform)
95+
9196
ref = Reference(source_column_name)
9297
bound_ref = ref.bind(self._transaction.table_metadata.schema(), self._case_sensitive)
93-
# verify transform can actually bind it
98+
9499
output_type = bound_ref.field.field_type
95100
if not transform.can_transform(output_type):
96101
raise ValueError(f"{transform} cannot transform {output_type} values from {bound_ref.field.name}")
@@ -128,6 +133,7 @@ def add_field(
128133
self._adds.append(new_field)
129134
return self
130135

136+
131137
def add_identity(self, source_column_name: str) -> UpdateSpec:
132138
return self.add_field(source_column_name, IdentityTransform(), None)
133139

0 commit comments

Comments
 (0)