omkenge commented on PR #1693:
URL: https://github.com/apache/iceberg-python/pull/1693#issuecomment-2673517716
**Issue:**
When no rows are updated (i.e., none of the source composite keys match the
target), the code calls pa.Table.from_arrays([], names=...). This passes 0
arrays for a schema that expects 6 arrays(origianl schema of table), causing
the error.
**ERROR**
```
rows_to_update = upsert_util.get_rows_to_update(df,
matched_iceberg_table, join_cols)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspaces/pyiceberg/pyiceberg/table/upsert_util.py", line 89, in
get_rows_to_update
rows_to_update_table = pa.Table.from_arrays([],
names=source_table.column_names)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "pyarrow/table.pxi", line 4851, in pyarrow.lib.Table.from_arrays
File "pyarrow/table.pxi", line 1593, in pyarrow.lib._sanitize_arrays
File "pyarrow/table.pxi", line 1557, in pyarrow.lib._schema_from_arrays
ValueError: Length of names (6) does not match length of arrays (0)
```
**Solution:**
Create an empty array for each column in the source schema:
```
empty_arrays = [pa.array([], type=field.type) for field in
source_table.schema]
rows_to_update_table = pa.Table.from_arrays(empty_arrays,
schema=source_table.schema)
```
--
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]