Skip to content

Make object_store support optional for embedded DataFusion #25145

Description

@Xuanwo

Is your feature request related to a problem or challenge?

Applications embedding DataFusion with their own TableProvider and ExecutionPlan implementations still pull in object_store when DataFusion's default features are disabled. These applications may provide their own file access and decoding, or use a different object_store version in their storage layer. They need a way to exclude DataFusion's storage dependency while retaining query planning and execution.

Describe the solution you'd like

Add a default-enabled object_store feature to the existing packages. Users should be able to disable default features and select SQL and expression features without including any object_store package in the enabled dependency graph.

The compatibility contract should be:

  • Default builds retain existing storage behavior and APIs, including direct users of child crates such as datafusion-execution and datafusion-physical-plan.
  • Existing users with default-features = false who need storage APIs explicitly enable object_store. Features that require built-in storage, such as parquet and avro, enable it automatically.
  • Custom providers, in-memory tables, relational query execution, memory management, and local spilling remain available without the storage feature.
  • No additional DataFusion packages are required.

Acceptance should use an independent downstream consumer: cargo tree --target all --edges all must contain no object_store package when storage is disabled, and a query using a custom provider and execution plan must run successfully. Explicitly restoring storage and using default features should preserve built-in file operations. Feature unification can still re-enable storage when another dependency requests it.

Describe alternatives you've considered

Disabling the existing default features does not remove the dependency. Aligning object_store versions can avoid duplicate versions but does not let an application exclude an unused storage implementation.

Additional context

Implementation: #25144.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions