Get certified for free when you join Fabric Data Days 2026 and dive into Fabric, Power BI, SQL, AI, and other essential data skills.
Join now60 Days of Data Days! Live and on-demand sessions, challenges, study groups and more! And it's all FREE!. Join now. Learn more
For example, you have a data pipeline (extract, transform, load—ETL) that ingests JSON telemetry events, each containing nested arrays of user actions. Your pipeline uses a Python UDF to apply custom business rules—say, classifying events based on logic that doesn’t map cleanly to SQL expressions.
Before NEE, this pipeline hits two performance penalties at once:
With NEE enabled, both operations run in the native execution path. Internal benchmarks show 2–5x faster execution, depending on UDF complexity and data nesting depth.
In standard Spark execution, Python or Scala UDFs require the engine to:
Each round-trip adds CPU overhead, memory pressure, and breaks vectorized execution. Similarly, complex data types (arrays, maps, structs) can force the engine off its optimized columnar path into row-based processing—negating the benefits of native execution for the rest of your query.
As a result, teams either avoid UDFs (rewriting logic in SQL or Scala) or flatten nested schemas at ingestion time, which adds extra engineering effort.
NEE processes Python or Scala UDFs and complex types directly in the native columnar engine. Specifically:
Internal benchmarks on representative workloads show:
These benchmarks were run on production-scale datasets using enterprise-typical cluster configurations.
Figure: Relative execution time with and without the Native Execution Engine. Lower bars indicate faster performance. Gains are most pronounced for vectorized UDFs, with consistent improvements across complex UDF and TPC-DS workloads.
These are meaningful gains for enterprise-scale data engineering:
Actual performance improvements will vary based on workload characteristics, data shape, and cluster configuration.
Fabric’s Native Execution Engine also adds optimized support for Arrays, Maps, and Structs.
This allows pipelines to stay fully optimized without switching execution modes.
Operations involving nested data can now benefit from native optimizations while preserving the flexibility developers expect from Spark.
This is especially useful for advanced lakehouse optimization scenarios such as:
Instead of flattening data or restructuring pipelines for performance reasons, teams can work with complex schemas without restructuring pipelines.
Analytics workloads are evolving to include AI, real-time decision-making, semi-structured data, and the growing importance of Python and developer-centric workflows. As workloads evolve beyond traditional BI, performance engines can no longer focus only on accelerating simple SQL queries.
Platforms now need to support complex business logic, data science pipelines, deeply nested data formats, and hybrid workflows that combine ETL, machine learning, and interactive analytics in a single environment.
Fabric’s Native Execution Engine reflects this shift. It’s designed not just for classic SQL acceleration, but for the next generation of analytical workloads that demand flexibility, scale, and high-performance execution across diverse programming models. You no longer need to trade off flexibility for performance.
The Native Execution Engine in Microsoft Fabric removes long-standing Spark bottlenecks by bringing Python UDFs and complex data types directly into the optimized native execution path. This helps improve performance and reduce execution overhead.
To get started:
We’d love to hear how the Native Execution Engine accelerates your Spark workloads. Try it today and share your feedback in the Fabric Community forum.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.