Skip to content

bug: to_polars fails on duckdb with optional struct column (works with polars backend) #11291

Open
@vspinu

Description

@vspinu

What happened?

Duckdb backend fails to extract polars data frame with optional (null) values in structs:

# this works
ibis.set_backend("polars")
data = [
    {'col': {'1': "xyz", '2': None}},
]
tbl = ibis.memtable(pl.DataFrame(data))
tbl.to_polars()
 

# this fails:
ibis.set_backend("duckdb")
data = [
    {'col': {'1': "xyz", '2': None}},
]
tbl = ibis.memtable(pl.DataFrame(data))
tbl.to_polars()


  File ~...venv/lib/python3.11/site-packages/ibis/expr/types/core.py:611 in to_polars
    return self._find_backend(use_default=True).to_polars(

  File ~...venv/lib/python3.11/site-packages/ibis/backends/__init__.py:265 in to_polars
    table = self.to_pyarrow(expr.as_table(), params=params, limit=limit, **kwargs)

  File ~...venv/lib/python3.11/site-packages/ibis/backends/duckdb/__init__.py:1425 in to_pyarrow
    return expr.__pyarrow_result__(table, data_mapper=DuckDBPyArrowData)

  File ~...venv/lib/python3.11/site-packages/ibis/expr/types/relations.py:222 in __pyarrow_result__
    return data_mapper.convert_table(

  File ~...venv/lib/python3.11/site-packages/ibis/formats/pyarrow.py:332 in convert_table
    arrays = [

  File ~...venv/lib/python3.11/site-packages/ibis/formats/pyarrow.py:333 in <listcomp>
    cls.convert_column(table[name], dtype) for name, dtype in schema.items()

  File ~...venv/lib/python3.11/site-packages/ibis/backends/duckdb/converter.py:31 in convert_column
    return super().convert_column(column, dtype)

  File ~...venv/lib/python3.11/site-packages/ibis/formats/pyarrow.py:323 in convert_column
    return column.cast(desired_type)

  File pyarrow/table.pxi:566 in pyarrow.lib.ChunkedArray.cast

  File ~...venv/lib/python3.11/site-packages/pyarrow/compute.py:404 in cast
    return call_function("cast", [arr], options, memory_pool)

  File pyarrow/_compute.pyx:590 in pyarrow._compute.call_function

  File pyarrow/_compute.pyx:385 in pyarrow._compute.Function.call

  File pyarrow/error.pxi:154 in pyarrow.lib.pyarrow_internal_check_status

  File pyarrow/error.pxi:91 in pyarrow.lib.check_status

ArrowNotImplementedError: Unsupported cast from int32 to null using function cast_null

What version of ibis are you using?

10.4.0

What backend(s) are you using, if any?

duckdb, polars

Relevant log output

Code of Conduct

  • I agree to follow this project's Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    communityIssues or PRs requiring help from the communityecosystemExternal projects or activities

    Type

    No type

    Projects

    Status

    backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions