chsgray opened a new issue, #15351:
URL: https://github.com/apache/datafusion/issues/15351
### Describe the bug
Using the `delta-rs` Python binding, a `DeltaError` was raised when
attempting a `DeltaTable.merge` operation. Library-assigned map field names
appear to be mutually incompatible, which is beyond the user's control.
The error looks like this:
`DeltaError: Generic DeltaTable error: type_coercion
caused by
Error during planning: Failed to coerce then ([Map(Field { name: "entries",
data_type: Struct([Field { name: "key", data_type: Utf8, nullable: false,
dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value",
data_type: Float64, nullable: true, dict_id: 0, dict_is_ordered: false,
metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false,
metadata: {} }, false), Map(Field { name: "entries", data_type: Struct([Field {
name: "key", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered:
false, metadata: {} }, Field { name: "value", data_type: Float64, nullable:
true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false,
dict_id: 0, dict_is_ordered: false, metadata: {} }, false), Map(Field { name:
"key_value", data_type: Struct([Field { name: "key", data_type: Utf8, nullable:
false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name:
"value", data_type: Float64, nullable: true, dict_id: 0, dict_is_ordered:
false, metada
ta: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {}
}, false), Map(Field { name: "key_value", data_type: Struct([Field { name:
"key", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false,
metadata: {} }, Field { name: "value", data_type: Float64, nullable: true,
dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id:
0, dict_is_ordered: false, metadata: {} }, false), Map(Field { name:
"key_value", data_type: Struct([Field { name: "key", data_type: Utf8, nullable:
false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name:
"value", data_type: Float64, nullable: true, dict_id: 0, dict_is_ordered:
false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false,
metadata: {} }, false)]) and else (None) to common types in CASE WHEN
expression`
See linked `delta-rs` bug report below for full traceback.
### To Reproduce
Environment
- Python 3.11 on Ubuntu
- Datafusion version:
[45](https://github.com/delta-io/delta-rs/blob/python-v0.25.4/Cargo.toml)
- Delta-rs version: 0.25.4
- Pandas version: 2.2.3
- Pyarrow version: 18.1.0
Python code
```python
import pyarrow as pa
import pandas as pd
import deltalake
path = "~/tmp/test"
schema = pa.schema(
[
pa.field(
"foo",
pa.int64(),
nullable=False,
),
pa.field(
"bar",
pa.map_(pa.string(), pa.float64()),
nullable=True,
),
]
)
df = pd.DataFrame(data={"foo": 1, "bar": [{"baz": 123.4}]})
deltalake.write_deltalake(
path,
pa.Table.from_pandas(df, schema),
mode="append"
)
(
deltalake.DeltaTable(path)
.merge(
pa.Table.from_pandas(df, schema),
predicate="s.foo = t.foo",
target_alias="t",
source_alias="s",
)
.when_matched_update_all()
.when_not_matched_insert_all()
.execute()
)
```
### Expected behavior
I expected the `merge` operation to succeed.
### Additional context
`delta-rs` maintainers indicated this issue is upstream of their library,
which is why I'm raising this here.
The issue I raised there:
[link](https://github.com/delta-io/delta-rs/issues/3340)
--
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]