# Spice AI - Full Content > Spice.ai is a data and AI platform that combines federated SQL query, hybrid search, and LLM inference in a portable, open-source runtime This file contains the complete content from the Spice AI website for AI/LLM consumption. --- # Local Content ## About Us URL: https://spice.ai/about-us Date: 2025-11-19T21:05:55 Description: Learn about Spice AI's mission, team, and vision for empowering developers to build intelligent apps with unified data and AI infrastructure. Over the last 15 years, Luke has brought together the best builders and engineers across the globe to create developer-focused experiences through tools and technologies used by millions worldwide. Before founding Spice AI, Luke was the founding manager and co-creator of Azure Incubations at Microsoft, where he led cross-functional engineering teams to create and develop technologies like Dapr.

\n', }, { photo: { ID: 968, id: 968, title: 'eb22faba936070632d444bd11f59977cd866e1f8', filename: 'eb22faba936070632d444bd11f59977cd866e1f8.png', filesize: 36027, url: '/website-assets/media/2025/11/eb22faba936070632d444bd11f59977cd866e1f8.png', link: '/about-us/attachment/eb22faba936070632d444bd11f59977cd866e1f8/', alt: '', author: '5', description: '', caption: '', name: 'eb22faba936070632d444bd11f59977cd866e1f8', status: 'inherit', uploaded_to: 963, date: '2025-11-19 20:52:23', modified: '2025-11-30 23:10:57', menu_order: 0, mime_type: 'image/jpeg', type: 'image', subtype: 'jpeg', icon: '/website-assets/media/default.png', width: 606, height: 672, sizes: { thumbnail: '/website-assets/media/2025/11/eb22faba936070632d444bd11f59977cd866e1f8-150x150.png', 'thumbnail-width': 150, 'thumbnail-height': 150, medium: '/website-assets/media/2025/11/eb22faba936070632d444bd11f59977cd866e1f8-271x300.png', 'medium-width': 271, 'medium-height': 300, medium_large: '/website-assets/media/2025/11/eb22faba936070632d444bd11f59977cd866e1f8.png', 'medium_large-width': 606, 'medium_large-height': 672, large: '/website-assets/media/2025/11/eb22faba936070632d444bd11f59977cd866e1f8.png', 'large-width': 606, 'large-height': 672, '1536x1536': '/website-assets/media/2025/11/eb22faba936070632d444bd11f59977cd866e1f8.png', '1536x1536-width': 606, '1536x1536-height': 672, '2048x2048': '/website-assets/media/2025/11/eb22faba936070632d444bd11f59977cd866e1f8.png', '2048x2048-width': 606, '2048x2048-height': 672, }, }, name: 'Phillip LeBlanc', position__title: 'Founder and CTO', linkedin: 'https://www.linkedin.com/in/leblancphillip/', x__twitter_profile_url: 'https://x.com/leblancphill', paragraph: '

Phillip has spent a decade building some of the largest distributed systems and big data platforms used by millions worldwide. Before co-founding Spice AI, Phillip was both an engineering manager and IC working on distributed systems at GitHub and Microsoft. Phillip has contributed to services developers use every day, including GitHub Actions, Azure Active Directory, and Visual Studio App Center.

\n', }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> --- ## 2025 Spice AI Year in Review URL: https://spice.ai/blog/2025-spice-ai-year-in-review Date: 2026-01-02T20:15:30 Description: From day one, Spice was designed to simplify building modern, intelligent applications. In 2025 that vision turned into reality. In January 2025, Spice announced 1.0 stable, marking the transition from an open-source project to an enterprise-grade, production-ready platform. Spice has shipped 35 stable releases and 11 major releases since then.

' } /> From day one, Spice was designed to simplify building modern, intelligent applications. In 2025 that vision turned into reality. Spice now serves as the data and AI substrate for global, production workloads at enterprises like Twilio and Barracuda - where mission-critical applications query, search, and reason over big data in real time.

' } /> These data and AI workloads impose fundamentally different demands on the data layer than previous generations of applications. Instead of the complexity of multiple query engines, search platforms, caches, and inference layers, Spice brings this functionality into a single, high-performance data and AI stack. Development teams can query operational databases, data lakes, analytical warehouses, and more with a single SQL interface, while taking advantage of built-in acceleration, hybrid search, and AI.

' } /> All of this is delivered by a fully open-source engine built in Rust that can be deployed anywhere - as a sidecar, at the edge, in the cloud, or in enterprise clusters. Developers have complete optionality based on their access patterns and business requirements. 

' } /> Below are some of the major features that defined 2025 across the core pillars of the Spice platform: federation and acceleration, search, and embedded LLM inference.

' } /> Major 2025 Federation & Acceleration Features' } /> SQL federation and acceleration is at the core of Spice and the applications it enables; enterprise AI applications depend on contextual data drawn from many different systems, and that data must be fast and available to search and reason over in real time.

' } /> In 2025, Spice simplified querying across disparate data sources while improving performance, scale, and reliability. The connector ecosystem also significantly expanded, enabling teams to ingest and combine data across any source.

' } />
  • Spice Cayenne data accelerator: Introduced in v1.9, Spice Cayenne is the new premier data accelerators built on the Vortex columnar format that enables low-latency, highly concurrent queries over large datasets, overcoming the scalability and memory limits of single-file accelerators like DuckDB.
  • Iceberg and Amazon S3 writes: Spice added write support for Iceberg tables (v1.8) and Amazon S3 Tables (1.10), delivering direct ingestion, transformation, and materialization of data into object storage. This simplifies writing operational data to object-stores, eliminating the need for complex and costly batch or streaming pipelines.
  • Multi-node distributed query (preview): v1.9 brought multi-node distributed query execution based on Apache Ballista, designed for querying partitioned data lake formats across multiple execution nodes for significantly improved query performance on large datasets.
  • Managed acceleration snapshots: Acceleration Snapshots enable faster restarts, shared accelerations across multiple Spice instances, reduced load on federated systems, and continued query serving even when source systems are temporarily unavailable for enterprise-grade resiliency.
  • Caching acceleration mode: A new caching mode introduced in v1.10 provides stale-while-revalidate (SWR) behavior for accelerations with background refreshes, and file-persistence with Spice Cayenne, SQLite, or DuckDB.
  • Expanded connector ecosystem: Delta Lake, S3, Databricks, Unity Catalog, AWS Glue, PostgreSQL, MySQL, Kafka, DynamoDB, Kafka, MongoDB, Iceberg and more were introduced or reached stable.
  • ' } /> Federation & Acceleration Feature Highlight: Spice Cayenne' } />
    Figure 1: The Spice Cayenne architecture, built on Vortex and SQLite
    ' } /> Spice leans into the industry shift to object storage as the source of truth for applications. These workloads are often multi-terabyte datasets using open data lake formats like Parquet, Iceberg, or Delta that must serve data and search queries to applications with sub-second performance.

    ' } /> Existing data accelerators like DuckDB, are fast and simple for datasets up to 1TB, however for multi-terabyte workloads, a new class of accelerator is required.

    ' } /> So we built Spice Cayenne, the next-generation data accelerator for high volume and latency-sensitive applications. 
    Spice Cayenne combines Vortex, the next-generation columnar file format from the Linux Foundation, with a simple, embedded metadata layer. This separation of concerns ensures that both the storage and metadata layers are fully optimized for what each does best. Cayenne delivers better performance and lower memory consumption than the existing DuckDB, Arrow, SQLite, and PostgreSQL data accelerators.

    ' } /> Spice Cayenne TPCH Benchmark
    Figure 2: Cayenne accelerated TPC-H queries 1.4x faster than DuckDB (file mode) and used nearly 3x less memory.
    ' } /> Spice Founder Luke Kim demonstrated and walked through the details of the Cayenne architecture in a December, 2025 Community Call:

    ' } /> Major 2025 Search Features'} /> AI applications are only as effective as the data they can retrieve and reason over. Beyond extracting data, they need to search across both structured and unstructured sources to surface the most relevant context at query time. In 2025, search evolved into a core primitive of the Spice platform, designed to operate natively across federated datasets.

    ' } />
  • Native Amazon S3 vectors integration: v1.5 added native support for Amazon S3 Vectors, making cost‑effective vector search on object storage a first‑class feature. Subsequent releases introduced multi-index scatter-gather, multi-column primary keys, and partitioned indexes to support scalable production workloads.
  • Reciprocal Rank Fusion (RRF): Introduced in v1.7, RRF combines vector and full-text search results with configurable weighting and recency bias by a simple SQL table-function, producing higher-quality hybrid search rankings than either approach alone.
  • Search on views (full-text and vector): Search on views enables advanced search scenarios across different search modalities over pre-aggregated or transformed data, extending the power of Spice\'s search functionality beyond base datasets.
  • Search results caching: Runtime caching for search results improves performance for subsequent searches and chat completion requests that use the document_similarity LLM tool. 
  • Table‑level search enhancements: v1.8.2 added additional_columns and where support for table relations in search, enabling multi‑table search workflows.
  • ' } /> Search Feature Highlight: Amazon S3 Vectors' } />
    Figure 3: Spice and S3 Vectors Architecture
    ' } /> In July, Spice introduced native support for Amazon S3 Vectors as a day 1 launch partner at the AWS Summit in NYC. Vector similarity search, structured filters, joins, and aggregations can now be executed in SQL within Spice without duplicating data. 

    ' } /> Developers can make vector searches using SQL or HTTP and combine similarity search with relational predicates and joins. Spice pushes filters down to S3 Vectors to minimize data scanned, delivering scalable sub-second query performance with the flexibility of SQL.

    ' } /> The Spice team presented a live demo of Spice and Amazon S3 Vectors at 2025 AWS re:Invent:

    ' } /> Major AI Features Released in 2025' } /> Spice deepened its AI capabilities by making LLM inference via SQL native within the query engine. LLMs can be invoked directly in SQL alongside federated queries, joins, and transformations, helping teams move from raw data to insights all within SQL.

    ' } />
  • AI SQL function: The AI SQL function was introduced in v1.8, supporting LLM calls directly from SQL for generation, translation and classification. Model inference can now run in the same execution path as joins, filters, search, and aggregations.
  • MCP server support: Introduced in v1.1, Spice works as both an MCP server and client. Spice can run stdio-based MCP tools internally or connect to external MCP servers over HTTP SSE and streaming.
  • Amazon Nova & Nova 2 embeddings: Support for models like Nova (v1.5.2) and Nova 2 multimodal embeddings (v1.9.1), which support high-dimensional vector representations with configurable truncation modes. 
  • Expanded model provider ecosystem: Spice added support for new providers including Anthropic, xAI, HuggingFace, Amazon Bedrock, Model2Vec static models, and more. 
  • Expanded tools ecosystem: Added native tool integrations including the OpenAI Responses API (for streaming tool calls and responses) and a Web Search tool powered by Perplexity. These tools can be invoked within the same execution context as SQL queries and model inference, enabling retrieval-augmented and agent-style workflows without external orchestration.
  • ' } /> AI Feature Highlight: AI SQL Function' } />
    Figure 4: AI SQL function example in Spice Cloud
    ' } /> The ai() SQL function enables developers to invoke LLMs directly within SQL for bulk generation, classification, translation, or analysis. Inference runs alongside joins, filters, aggregations, and search results without additional application-layer plumbing. Developers can transform federated data into structured insights extracting data, call external completion APIs, or orchestrate separate pipelines.

    ' } /> Check out a live demo of the AI SQL function here:

    '} /> Looking ahead'} /> 2025 was a major year for Spice as it grew from single-node data acceleration to a multi-node data, search, and AI platform. In 2026, Spice 2.0 will focus on bringing multi-node distributed query execution to GA, alongside continued improvements to search, acceleration, and AI primitives. These investments will help deliver even more predictable performance and operational simplicity.

    ' } /> The mission remains the same: to provide a durable, open data substrate that helps teams build and scale the next generation of intelligent, data and AI-driven applications.

    ' } /> Interested in seeing it for yourself? Get started with the open source runtime or cloud platform today.

    ' } />

    '} /> --- ## A Developer's Guide to Understanding Spice.ai URL: https://spice.ai/blog/a-developers-guide-to-understanding-spice-ai Date: 2026-02-05T22:12:21 Description: Learn what Spice.ai is, when to use it, and how it solves enterprise data challenges. A developer-focused guide to federation, acceleration, search, and AI. TL;DR '} /> This hands-on guide is designed to help developers quickly build an understanding of Spice: what it is (an AI-native query engine that federates queries, accelerates data, and integrates search and AI), when to use it (data-intensive applications and AI agents), and how it can be leveraged to solve enterprise-scale data challenges.  

    ' } /> *Note: This guide was last updated on February 5, 2026. Please see the docs for the latest updates.  

    ' } /> Who this guide is for ' } /> This guide is for developers who want to understand why, how, and when to use Spice.ai.  

    ' } /> If you are new to Spice, you might also be wondering how Spice is different than other query engines or data and AI platforms. Most developers exploring Spice are generally doing one of the following: 

    ' } />
  • Operationalizing data lakes for real-time queries and search 
  • ' } />
  • Building applications that need fast access to disparate data 
  • ' } />
  • Building AI applications and agents that need fast, secure context 
  • ' } /> Let's start with the problem Spice is solving to anchor the discussion.  

    " } /> The problem Spice solves ' } /> Modern applications face a distributed data challenge. 

    ' } /> Enterprise data is spread across operational databases, data lakes, warehouses, third-party APIs, and more. Each source has its own interface, latency characteristics, and access patterns. 

    ' } /> AI workloads amplify the problem. RAG applications generally require: 

    ' } />
  • A vector database (e.g. Pinecone, Weaviate) for embeddings 
  • ' } />
  • A text search engine (e.g. Elasticsearch) for keyword matching 
  • ' } />
  • A cache layer (e.g. Redis) for performance & latency 
  • ' } />
  • Model hosting and serving (OpenAI, Anthropic) for LLM inference 
  • ' } />
  • Orchestration code and services to coordinate everything 
  • ' } /> This can be a lot of complexity, even for a simple application. 

    ' } /> What is Spice? ' } /> Spice is an open-source SQL querysearch, and LLM-inference engine written in Rust, purpose-built for data-driven applications and AI agents. At its core, Spice is a high-performance compute engine that federates, searches, and processes data across your existing infrastructure - querying & accelerating data where it lives and integrating search and AI capabilities through SQL. 

    ' } />
    Figure 1. Spice.ai architecture
    ' } /> Unlike databases that require migrations & maintenance, Spice takes a declarative configuration approach: datasets, views, models, tools are defined in declarative YAML, and Spice handles the operations of fetching, caching, and serving that data.  

    ' } /> This makes Spice ideal when: 

    '} />
  • Your application needs fast, unified access to disparate data sources 
  • ' } />
  • You want simplicity and to avoid building and maintaining ETL pipelines 
  • ' } />
  • You want an operational data lake house for applications and agents 
  • ' } />
  • You need sub-second query performance without ETL 
  • ' } /> What Spice is not: 

    '} />
  • Not a replacement for PostgreSQL or MySQL (use those for transactional workloads) 
  • ' } />
  • Not a data warehouse (use Snowflake/Databricks for centralized analytics) 
  • ' } /> Mental model: Spice as a data and AI substrate ' } /> Think of Spice as the operational data & AI layer between your applications and your data infrastructure. 

    ' } />
    Figure 2. Spice as the data substrate for data-intensive AI apps
    ' } /> How this guide works 

    '} /> We'll start with a hands-on quickstart to get Spice running, then progressively build your mental model through the core concepts: 

    " } />
  • Federation 
  • '} />
  • Acceleration 
  • ' } />
  • Views 
  • '} />
  • Caching 
  • '} />
  • Snapshots 
  • '} />
  • Models 
  • '} />
  • Search 
  • '} />
  • Writes 
  • '} /> By the end, you'll understand how these primitives are used together to solve enterprise-scale data challenges.

    " } /> Quickstart ' } /> To install and get Spice started, run: 

    '} /> ```bash curl https://install.spiceai.org | /bin/bash ``` Or using Homebrew: 

    '} /> ```bash brew install spiceai/spiceai/spice ``` Next, in any folder, create a spicepod.yaml file with the following content: 

    ' } /> ```yaml version: v1 kind: Spicepod name: my_spicepod datasets: - from: s3://spiceai-demo-datasets/taxi_trips/2024/ name: taxi_trips ``` In the same folder, run:

    '} /> ```bash spice run ``` And, finally, in another terminal, run:

    '} /> ```bash > spice sql Welcome to the Spice.ai SQL REPL! Type 'help' for help. show tables; -- list available tables sql> show tables; +--------------+---------------+--------------+-------------+ | table_catalog | table_schema | table_name | table_type | +--------------+---------------+--------------+-------------+ | spice | runtime | task_history | BASE TABLE | | spice | public | taxi_trips | BASE TABLE | +--------------+---------------+--------------+-------------+ Time: 0.010767 seconds. 2 rows. sql> select count(*) from taxi_trips ; +----------+ | count(*) | +----------+ | 2964624 | +----------+ ``` Understanding what just happened  ' } /> In that quickstart, you: 

    '} />
  • Configured a dataset (taxi_trips) pointing to a remote S3 bucket 
  • ' } />
  • Started the Spice runtime, which connected to that source 
  • ' } />
  • Queried the data using standard SQL - without moving or copying it. 
  • ' } /> Spice.ai Cloud Platform ' } /> You can run the same Spicepod configuration in Spice.ai Cloud, the fully managed version of Spice that extends the open-source runtime with enterprise capabilities: built-in observability, elastic scaling, and team collaboration. 

    ' } /> Core Concepts ' } /> 1. Federation ' } /> In the quickstart, you queried taxi_trips stored in a remote S3 bucket using standard SQL without copying or moving that data. That's federation in action - querying data where it lives, not where you've moved it to. 

    " } /> This is foundational to Spice\'s architecture. Federation in Spice enables you to query data across multiple heterogeneous sources using a single SQL interface, without moving data or building ETL pipelines. 

    ' } /> Traditional approaches force you to build ETL pipelines that extract data from these sources, transform it, and load it into a centralized database or warehouse. Every new data source means building and maintaining another pipeline. 

    ' } /> Spice connects directly to your existing data sources and provides a unified SQL interface across all of them. You configure datasets declaratively in YAML, and Spice handles the connection, query translation, and result aggregation.  

    ' } /> Spice supports query federation across: 

    '} />
  • Databases: PostgreSQL, MySQL, Microsoft SQL Server, Oracle, MongoDB, ClickHouse, DynamoDB, ScyllaDB 
  • ' } />
  • Data Warehouses: Snowflake, Databricks, BigQuery 
  • ' } />
  • Data Lakes: S3, Azure Blob Storage, Delta Lake, Apache Iceberg 
  • ' } />
  • Other Sources: GitHub, GraphQL, FTP/SFTP, IMAP, Kafka, HTTP/API, and 30+ more connectors 
  • ' } />
    Figure 3. Spice Federation (and acceleration) architecture
    ' } /> How it works ' } /> When you configure multiple datasets from different sources, Spice\'s query planner (built on Apache DataFusion) optimizes and routes queries appropriately: 

    ' } /> ```yaml datasets: # From PostgreSQL - from: postgres:customers name: customers params: pg_host: db.example.com pg_user: ${secrets:PG_USER} # From S3 Parquet files - from: s3://bucket/orders/ name: orders params: file_format: parquet # From Snowflake - from: snowflake:analytics.sales name: sales ``` ```sql -- Query across all three sources in one statement SELECT c.name, o.order_total, s.region FROM customers c JOIN orders o ON c.id = o.customer_id JOIN sales s ON o.id = s.order_id WHERE s.region = 'EMEA'; ``` Without additional configuration, each query fetches data directly from the underlying sources. Spice optimizes this as much as possible using filter pushdown and column projection.  

    ' } /> 📚 DocsSpice Federation and Data Connectors 

    ' } /> 2. Acceleration ' } /> Federation solves the data movement problem, but alone often isn't enough for production applications. Querying remote S3 buckets for every request introduces latency - even with query pushdown and optimization, round-trips to distributed data sources can take seconds (or tens of seconds) for large datasets. 

    " } />
    Figure 4. Acceleration example in a Spice sidecar architecture
    ' } /> Spice data acceleration materializes working sets of data locally, reducing query latency from seconds to milliseconds. When enabled, Spice syncs data from connected sources and stores it in local stores, like DuckDB or Vortex - giving you the speed of local data with the flexibility of federated access. 

    ' } /> You can think of acceleration as an intelligent caching layer that understands your data access patterns. Hot data gets materialized locally for instant access and cold data remains federated. Unlike traditional caches that just store query results or static database materializations, Spice accelerates entire datasets with configurable refresh strategies, with the flexible compute of an embedded database.  

    ' } /> Acceleration Engines ' } />
    Engine Mode Best For 
    Arrow In-memory only Ultra-fast analytical queries, ephemeral workloads 
    DuckDB Memory or file General-purpose OLAP, medium datasets, persistent storage 
    SQLite Memory or file Row-oriented lookups, OLTP patterns, lightweight deployments 
    Cayenne File only High-volume multi-file workloads, terabyte-scale data 
    ' } /> To enable acceleration, add the acceleration block to your dataset configuration: 

    ' } /> ```yaml datasets: - from: s3://data-lake/events/ name: events acceleration: enabled: true engine: cayenne # Choose your engine mode: file # 'memory' or 'file' ``` With this configuration, Spice fetches the events dataset from S3 and stores it in a local Spice Cayenne Vortex files. Queries to events are then served from the local disk instead of making remote calls to S3.  

    ' } />
    Figure 5. Spice Cayenne architecture
    ' } /> While DuckDB and SQLite are general purpose engines, Spice Cayenne is purpose-built for modern data lake workloads. It\'s built on Vortex - a next-generation columnar format under the Linux Foundation - designed for the scale and access patterns of object storage. 

    ' } /> Learn more: Introducing the Spice Cayenne Data Accelerator  

    ' } /> 📚 DocsData Accelerators 

    ' } /> Refresh Modes ' } /> Spice offers multiple strategies for keeping accelerated data synchronized with sources: 

    ' } />
    Mode Description Use Case 
    full Complete dataset replacement on each refresh Small, slowly-changing datasets 
    append (batch) Adds new records based on a time column Append-only logs, time-series data 
    append (stream) Continuous streaming without time column Real-time event streams 
    changes CDC-based incremental updates via Debezium or DynamoDB Frequently updated transactional data 
    caching Request-based row-level caching API responses, HTTP endpoints 
    ' } /> ```yaml # Full refresh every 8 hours acceleration: refresh_mode: full refresh_check_interval: 8h # Append mode: check for new records from the last day every 10 minutes acceleration: refresh_mode: append time_column: created_at refresh_check_interval: 10m refresh_data_window: 1d # Continuous ingestion using Kafka acceleration: refresh_mode: append # CDC with Debezium or DynamoDB Streams acceleration: refresh_mode: changes ``` 📚 DocsRefresh Modes 

    ' } /> Retention Policies ' } /> While refresh modes control how acceleration is populated, retention policies prevent unbounded growth. As data continuously flows into an accelerated dataset-especially in append or streaming modes-storage can grow indefinitely. Retention policies automatically evict stale data using time-based or custom SQL strategies. 
     
    Retention is particularly useful for time-series workloads like logs, metrics, and event streams where only recent data is relevant for queries. For example, an application monitoring dashboard might only need the last 7 days of logs for troubleshooting, while a real-time analytics pipeline processing IoT sensor data might retain just 24 hours of readings. By defining retention policies, you ensure accelerated datasets stay bounded and performant without manual intervention. 
     
    Spice supports two retention strategies: time-based, which removes records older than a specified period, and custom SQL-based, which executes arbitrary DELETE statements for more complex eviction logic. Once defined, Spice runs retention checks automatically at the configured interval: 

    ' } /> ```yaml acceleration: # Common retention parameters retention_check_enabled: true retention_check_interval: 1h # Time-based retention policy retention_period: 7d # Custom SQL-based Retention retention_sql: "DELETE FROM logs WHERE status = 'archived'" ``` 📚 DocsRetention 

    ' } /> Constraints and Indexes ' } /> Accelerated datasets support primary key constraints and indexes for optimized query performance and data integrity: 

    ' } /> ```yaml datasets: - from: postgres:orders name: orders acceleration: enabled: true engine: duckdb primary_key: order_id # Creates non-null unique index indexes: customer_id: enabled # Single column index '(created_at, status)': unique # Multi-column unique index ``` 📚 DocsConstraints & Indexes 

    ' } /> 3. Views '} /> Views are virtual tables defined by SQL queries - useful for pre-aggregations, transformations, and simplified access patterns: 

    ' } /> ```yaml views: - name: daily_revenue sql: | SELECT DATE_TRUNC('day', created_at) as day, SUM(amount) as revenue, COUNT(*) as transactions FROM orders GROUP BY 1 - name: top_customers sql: | SELECT customer_id, SUM(total) as lifetime_value FROM orders GROUP BY customer_id ORDER BY lifetime_value DESC LIMIT 100 ``` 📚 DocsViews 

    ' } /> 4. Caching ' } /> Spice provides in-memory caching for SQL query results, search results, and embeddings - all enabled by default. Caching eliminates redundant computation for repeated queries and improves performance for non-accelerated datasets. 

    ' } /> ```yaml runtime: caching: sql_results: enabled: true cache_max_size: 128MiB eviction_policy: lru item_ttl: 1s encoding: none search_results: enabled: true cache_max_size: 128MiB eviction_policy: lru item_ttl: 1s encoding: none embeddings_results: enabled: true cache_max_size: 128MiB eviction_policy: lru item_ttl: 1s encoding: none ```
    Option  Description  Default  
    cache_max_size  Entry expiration duration  128 MiB  
    item_ttl  Maximum cache storage  1 second  
    eviction_policy  `lru` (least-recently-used) or `tiny_lfu`  lru  
    encoding  Compression: `zstd` or `none`  none  
    ' } /> Spice also supports HTTP cache-control headers (no-cache, max-stale, only-if-cached) for fine-grained control over caching behavior per request. 

    ' } /> 📚 DocsResults Caching 

    ' } /> 5. Snapshots ' } /> Snapshots allow file-based acceleration engines (DuckDB, SQLite, or Cayenne) to bootstrap from pre-stored snapshots in object storage. This dramatically reduces cold-start latency in distributed deployments. 

    ' } /> ```yaml snapshots: enabled: true location: s3://large_table_snapshots datasets: - from: postgres:large_table name: large_table acceleration: engine: duckdb mode: file snapshots: enabled ``` Snapshot triggers vary by refresh mode: 

    '} />
  • refresh_complete: Creates snapshots after each refresh (full and batch-append modes) 
  • ' } />
  • time_interval: Creates snapshots on a fixed schedule (all refresh modes) 
  • ' } />
  • stream_batches: Creates snapshots after every N batches (streaming modes: Kafka, Debezium, DynamoDB Streams) 
  • ' } /> 📚 DocsSnapshots 

    ' } /> 6. Models '} /> AI is a first-class capability in the Spice runtime - not a bolt-on integration. Instead of wiring external APIs, you call LLMs directly from SQL queries using the `ai()` function. Embeddings generate automatically during data ingestion, eliminating separate pipeline infrastructure. Text-to-SQL is schema-aware with direct data access, preventing the hallucinations common in external tools that don't understand your table structure.  

    " } /> This SQL-first approach means you can query your federated and accelerated data, pipe results to an LLM for analysis, and get synthesized answers in a single SQL statement.  

    ' } /> You can connect to hosted providers (OpenAI, Anthropic, Bedrock) or serve models locally with GPU acceleration. Spice provides an OpenAI-compatible AI Gateway, so existing applications using OpenAI SDKs can swap endpoints without code changes. 

    ' } /> Chat Models ' } /> Connect to hosted models or serve locally: 

    '} /> ```yaml models: - name: gpt4 from: openai:gpt-4o params: openai_api_key: ${secrets:OPENAI_API_KEY} tools: auto # Enable tool use - name: claude from: anthropic:claude-3-5-sonnet params: anthropic_api_key: ${secrets:ANTHROPIC_KEY} - name: local_llama from: huggingface:huggingface.co/meta-llama/Llama-3.1-8B ``` Use via the OpenAI-compatible API or the spice chat CLI: 

    ' } /> ```bash $ spice chat Using model: gpt4 chat> How many orders were placed last month? Based on the orders table, there were 15,234 orders placed last month. ``` NSQL (Text-to-SQL) ' } /> The /v1/nsql endpoint converts natural language to SQL and executes it: 

    ' } /> ```bash curl -XPOST "http://localhost:8090/v1/nsql" \ -H "Content-Type: application/json" \ -d '{"query": "What was the highest tip any passenger gave?"}' ``` Spice uses tools like table_schema, random_sample, and sample_distinct_columns to help models write accurate, contextual SQL. 

    ' } /> Embeddings ' } /> Transform text into vectors for similarity search. These embeddings power the vector search capabilities covered in the \'search\' section coming up next: 

    ' } /> ```yaml embeddings: - name: openai_embed from: openai:text-embedding-3-small params: openai_api_key: ${secrets:OPENAI_API_KEY} - name: bedrock_titan from: bedrock:amazon.titan-embed-text-v2:0 params: aws_region: us-east-1 - name: local_minilm from: huggingface:sentence-transformers/all-MiniLM-L6-v2 ``` Configure columns for automatic embedding generation: 

    '} /> ```yaml datasets: - from: postgres:documents name: documents acceleration: enabled: true columns: - name: content embeddings: - from: openai_embed chunking: enabled: true target_chunk_size: 512 ``` 📚 DocsModels & Embeddings 

    ' } /> 7. Search ' } /> In the previous section, we configured embeddings to generate automatically during data ingestion. Those embeddings enable vector search - one of three search methods Spice provides as native SQL functions. 

    ' } /> Spice takes the same integrated approach with search as it does with AI. Search indexes are built on top of accelerated datasets - the same data you're querying and piping to LLMs. Full-text search uses Tantivy with BM25 scoring for keyword matching. Vector search uses the embeddings you've already configured to generate during ingestion. Hybrid search combines both methods with Reciprocal Rank Fusion (RRF) to merge rankings - all via SQL functions like`text_search()`, `vector_search()`, and `rrf()`. Search in Spice powers retrieval-augmented generation (RAG), recommendation systems, and content discovery: 

    " } />
    Method Best For How It Works 
    Full-Text Search  Keyword matching, exact phrases  BM25 scoring via Tantivy  
    Vector Search  Semantic similarity, meaning-based retrieval  Embedding distance calculation  
    Hybrid Search  Queries with both keywords and semantic similarityHybrid execution and ranking through Reciprocal Rank Fusion (RRF)  
    ' } /> Full-Text Search ' } /> Full-text search performs keyword-driven retrieval optimized for text data. Powered by Tantivy with BM25 scoring, it excels at finding exact phrases, specific terms, and keyword combinations. Enable it by indexing the columns you want to search: 

    ' } /> ```yaml datasets: - from: postgres:articles name: articles acceleration: enabled: true columns: - name: title full_text_search: enabled - name: body full_text_search: enabled ``` ```sql SELECT * FROM text_search(articles, 'machine learning', 10); ``` Vector Search ' } /> Vector search uses embeddings to find documents based on semantic similarity rather than exact keyword matches. This is particularly useful when users search with different wording than the source content-a query for "how to fix login issues" can match documents about "authentication troubleshooting." 
     
    Spice supports both local embedding models (like sentence-transformers from Hugging Face) and remote providers (OpenAI, Anthropic, etc.). Embeddings are configured as top-level components and referenced in dataset columns:

    ' } /> ```yaml datasets: - from: s3://docs/ name: documents vectors: enabled: true columns: - name: body embeddings: - from: openai_embed ``` ```sql SELECT * FROM vector_search (documents, 'How do I reset my password?', 10) WHERE category = 'support' ORDER BY score; ``` Vector search is also available via the `/v1/search` HTTP API for direct integration with applications. 

    ' } /> Hybrid Search with RRF ' } /> Neither vector nor full-text search alone produces optimal results for every query. A search for "Python error 403" benefits from both semantic understanding ("error" relates to "exception," "failure") and exact keyword matching ("403," "Python"). Hybrid search combines results from multiple search methods using Reciprocal Rank Fusion (RRF), merging rankings to improve relevance across diverse content types: 

    ' } /> ```sql SELECT * FROM rrf( vector_search(docs, 'query', 10), text_search(docs, 'query', 10) ) LIMIT 10; ``` 📚 DocsSearch & Vector Search 

    ' } /> 8. Writing Data ' } /> Spice supports writing to Apache Iceberg tables and Amazon S3 Tables via standard INSERT INTO statements. 

    ' } /> Apache Iceberg Writes ' } /> ```yaml catalogs: - from: iceberg:https://glue.us-east 1.amazonaws.com/iceberg/v1/catalogs/123456/namespaces name: ice access: read_write datasets: - from: iceberg:https://catalog.example.com/v1/namespaces/sales/tables/transactions name: transactions access: read_write ``` ```sql -- Insert from another table INSERT INTO transactions SELECT * FROM staging_transactions; -- Insert with values INSERT INTO transactions (id, amount, timestamp) VALUES (1001, 299.99, '2025-01-15'); -- Insert into catalog table INSERT INTO ice.sales.orders SELECT * FROM federated_orders; ``` Amazon S3 Tables ' } /> Spice offers full read/write capability for Amazon S3 Tables, enabling direct integration with AWS\' managed table format for S3: 

    ' } /> ```yaml datasets: - from: glue:my_namespace.my_table name: my_table params: glue_region: us-east-1 glue_catalog_id: 123456789012:s3tablescatalog/my-bucket access: read_write ``` Note: Write support requires access: read_write configuration.

    ' } /> 📚 DocsWrite-Capable Connectors 

    ' } /> Deployment ' } /> Spice is designed for deployment flexibility and optionality - from edge devices to multi-node distributed clusters. It ships as a single file ~140MB binary with no external dependencies beyond your configured data sources.  

    ' } /> This portability means you can deploy the same Spicepod configuration on a Raspberry Pi at the edge, as a sidecar in your Kubernetes cluster, or as a fully-managed cloud service - without code changes: 

    ' } />
    Deployment Model Description Best For 
    Standalone Single instance via Docker or binary Development, edge devices, simple workloads 
    Sidecar Co-located with your application pod Low-latency access, microservices architectures 
    Microservice Multiple replicas deployed behind a load balancer Loosely couple architectures, heavy or varying traffic 
    Cluster Distributed multi-node deployment Large-scale data, horizontal scaling, fault tolerance 
    Sharded Horizontal data partitioning across multiple instances Large scale data, distributed query execution 
    Tiered Hybrid approach combining sidecar for performance and shared microservice for batch processing Varying requirements across different application components 
    Cloud Fully-managed cloud platform  Auto-scaling, built-in observability, zero operational overhead.  
    ' } /> Putting it all together ' } /> Spice makes data fast, federated, and AI-ready - through configuration, not code. The flexibility of this architecture means you can start simple and evolve incrementally.  

    ' } />
    Concept Purpose 
    Federation Query 30+ sources with unified SQL 
    Acceleration Materialize data locally for sub-second queries 
    Views Virtual tables from SQL transformations 
    Snapshots Fast cold-start from object storage 
    Models Chat, NSQL, and embeddings via OpenAI-compatible API 
    Search Full-text and vector search integrated in SQL 
    Writes INSERT INTO for Iceberg and Amazon S3 tables 
    ' } /> What can you build with Spice? ' } />
    Use Case How Spice Helps 
    Operational Data Lakehouse  Serve real-time operational workloads and AI agents directly from Apache Iceberg, Delta Lake, or Parquet with sub-second query latency. Spice federates across object storage and databases, accelerates datasets locally, and integrates hybrid search and LLM inference - eliminating separate systems for operational access. 
    Data lake Accelerator Accelerate data lake queries from seconds to milliseconds by materializing frequently-accessed datasets in local engines. Maintain the scale and cost efficiency of object storage while delivering operational-grade query performance with configurable refresh policies. 
    Data Mesh Unified SQL access across distributed data sources with automatic performance optimization 
    Enterprise Search Combine semantic and full-text search across structured and unstructured data 
    RAG Pipelines Merge federated data with vector search and LLMs for context-aware AI applications 
    Real-Time Analytics Stream data from Kafka or DynamoDB with sub-second latency into accelerated tables 
    Agentic AI Build autonomous agents with tool-augmented LLMs and fast access to operational data 
    ' } /> Whether you're replacing complex ETL pipelines, building AI-powered applications, or deploying intelligent agents at the edge-Spice provides the primitives to deliver fast, context-aware access to data wherever it lives. 

    " } /> 📚 DocsUse Cases 

    ' } /> Next steps  ' } /> Now that you have a mental model for Spice, check out the cookbook recipes for 80+ examples, the GitHub repo, the full docs, and join us on Slack to connect directly with the team and other Spice users.

    ' } /> And, remember these principles: 

    ' } />
  • Spice is a runtime, not a database: It federates across your existing data infrastructure 
  • ' } />
  • Configuration over code: Declarative YAML replaces custom integration code 
  • ' } />
  • Acceleration is optional but powerful: Start with federation, add acceleration for latency-sensitive use cases  
  • ' } />
  • Composable primitives: Federation + Acceleration + Search + LLM Models work together 
  • ' } />
  • SQL-first: Everything accessible through standard SQL queries 
  • ' } />

    '} /> --- ## A New Class of Applications That Learn and Adapt URL: https://spice.ai/blog/a-new-class-of-applications-that-learn-and-adapt Date: 2021-12-30T18:08:39 Description: Explore the history of decision engines and how modern machine learning enables applications that learn, adapt, and make better decisions over time with Spice.ai. A new class of applications that learn and adapt is becoming possible through machine learning (ML). These applications learn from data and make decisions to achieve the application\'s goals. In the post Making apps that learn and adapt, Luke described how developers integrate this ability to learn and adapt as a core part of the application\'s logic. You can think of the component that does this as a "decision engine." This post will explore a brief history of decision engines and use-cases for this application class.

    ' } /> History of decision engines' } /> The idea to make intelligent decision-making applications is not new. Developers first created these applications around the 1970s1, and they are some of the earliest examples of using artificial intelligence to solve real-world problems.

    ' } /> The first applications used a class of decision engines called "expert systems". A distinguishing trait of expert systems is that they encode human expertise in rules for decision-making. Domain experts created combinations of rules that powered decision-making capabilities.

    ' } /> Some uses of expert systems include:

    '} />
  • Fault diagnosis
  • "Smart" operator and troubleshooting manual
  • Recovery from extreme conditions
  • Emergency shutdown
  • ' } /> However, the resources required to build expert systems make employing them infeasible for many applications2. They often need a significant time and resource investment to capture and encode expertise into complex rule sets. These systems also do not automatically learn from experience, relying on experts to write more rules to improve decision-making.

    ' } /> With the advent of modern deep-learning techniques and the ability to access significantly more data, it is now possible for the computer, not only the developer, to learn and encode the rules to power a decision engine and improve them over time. The vision for Spice.ai is to make it easy for developers to build this new class of applications. So what are some use-cases for these applications?

    ' } /> Use cases of decision-making applications' } /> Reduce energy costs by optimizing air conditioning' } /> Today: The air conditioning system for an office building runs on a fixed schedule and is set to a fixed temperature in business hours, only adjusting using in-room sensor data, if at all. This behavior potentially over cools at business close as the outside temperature lowers and the building starts vacating.

    ' } /> With Spice.ai: Using Spice.ai, the application combines time-series data from multiple data sources, including the time of day and day of the week, building/room occupancy, and outside temperature, energy consumption, and pricing. The A/C controller application learns how to adjust the air conditioning system as the room naturally cools towards the end of the day. As the occupancy decreases, the decision engine is rewarded for maintaining the desired temperature and minimizing energy consumption/cost.

    ' } /> Food delivery order dispatching' } /> Today: Customers order food delivery with a mobile app. When the order is ready to be picked up from the restaurant, the order is dispatched to a delivery driver by a simple heuristic that chooses the nearest available driver. As the app gets more popular with customers and the number of restaurants, drivers, and customers increases, the heuristic needs to be constantly tuned or supplemented with human operators to handle the demand.

    ' } /> With Spice.ai: The application learns which driver to dispatch to minimize delivery time and maximize customer star ratings. It considers several factors from data, including patterns in both the restaurant and driver's order histories. As the number of users, drivers, and customers increases over time, the app adapts to keep up with the changing patterns and demands of the business.

    " } /> Routing stock or crypto trades to the best exchange' } /> Today: When trading stocks through a broker like Fidelity or TD Ameritrade, your broker will likely route your order to an exchange like the NYSE. And in the emerging world of crypto, you can place your trade or swap directly on a decentralized exchange (DEX) like Uniswap or Pancake Swap. In both cases, the routing of orders is likely to be either a form of traditional expert system based upon rules or even manually routed.

    ' } /> With Spice.ai: A smart order routing application learns from data such as pending transactions, time of day, day of the week, transaction size, and the recent history of transactions. It finds patterns to determine the most optimal route or exchange to execute the transaction and get you the best trade.

    ' } /> Summary'} /> A new class of applications that can learn and adapt are made possible by integrating AI-powered decision engines. Spice.ai is a decision engine that makes it easy for developers to build these applications.

    ' } /> If you\'d like to partner with us in creating this new generation of intelligent decision-making applications, we invite you to join us on Slack, or reach out on Twitter.

    ' } /> Phillip

    '} /> Footnotes'} /> Kendal, S. L., & Creen, M. (2007). An introduction to knowledge engineering. London: Springer. ISBN 978-1-84628-475-5 

    ' } /> Russell, Stuart; Norvig, Peter (1995). Artificial Intelligence: A Modern Approach. Simon & Schuster. pp. 22-23. ISBN 978-0-13-103805-9. 

    ' } /> --- ## Adding Spice - The Next Generation of Spice.ai OSS URL: https://spice.ai/blog/adding-spice-the-next-generation-of-spice-ai-oss Date: 2024-03-28T18:57:06 Description: Learn how Spice.ai OSS was rebuilt in Rust to deliver fast, local SQL queries across databases, warehouses, and data lakes. TL;DR: We\'ve rebuilt Spice.ai OSS from the ground up in Rust, as a unified SQL query interface and portable runtime to locally materialize, accelerate, and query datasets sourced from any database, data warehouse or data lake. Learn more at github.com/spiceai/spiceai.

    ' } /> In September, 2021, we introduced Spice.ai OSS as a runtime for building AI-driven applications using time-series data.

    ' } /> We quickly ran into a big problems in making these applications work... data, the fuel for intelligent software, was painfully difficult to access, operationalize, and use, not only in machine learning, but also in web frontends, backend applications, dashboards, data pipelines, and notebooks. And we had to make hard tradeoffs between cost and query performance.

    ' } /> We felt this pain every day building 100TB+ scale data and AI systems for the Spice.ai Cloud Platform. So we took our learnings and infused them back into Spice.ai OSS with the capabilities we wished we had.

    ' } /> We rebuilt Spice.ai OSS from the ground up in Rust, as a unified SQL query interface and portable runtime to locally materialize, accelerate, and query data tables sourced from any database, data warehouse or data lake.

    ' } /> Spice OSS Stack
    Figure 1: Spice OSS Architecture
    ' } /> Spice is a fast, lightweight (< 150Mb), single-binary, designed to be deployed alongside your application, dashboard, and within your data or machine learning pipelines. Spice federates SQL query across databases (MySQL, PostgreSQL, etc.), data warehouses (Snowflake, BigQuery, etc.) and data lakes (S3, MinIO, Databricks, etc.) so you can easily use and combine data wherever it lives. Datasets, declaratively defined, can be materialized and accelerated using your engine of choice, including DuckDB, SQLite, PostgreSQL, and in-memory Apache Arrow records, for ultra-fast, low-latency query. Accelerated engines run in your infrastructure giving you flexibility and control over price and performance.

    ' } /> Before Spice'} />
    Figure 2:Before Spice, applications submit many queries to external data sources.
    ' } /> With Spice '} />
    Figure 3: With Spice, applications can submit a single request to external data sources.
    ' } /> Use-Cases'} /> The next-generation of Spice.ai OSS enables:

    '} /> Better applications. Accelerate and co-locate data with frontend and backend applications, for high concurrent queries, serving more users with faster page loads and data updates. Try the CQRS sample app.

    ' } /> Snappy dashboards, analytics, and BI. Faster, more responsive dashboards without massive compute costs. Spice supports Arrow Flight SQL (JDBC/ODBC/ADBC) for connectivity with Tableau, Looker, PowerBI, and more. Watch the Apache Superset with Spice demo.

    ' } /> Faster data pipelines, machine learning training and inference. Co-locate datasets with pipelines where the data is needed to minimize data-movement and improve query performance. Predict hard drive failure with the SMART data demo.

    ' } /> Easily query many data sources. Federated SQL query across databases, data warehouses, and data lakes using Data Connectors.

    ' } /> Community Built' } /> Spice is open-source, Apache 2.0 licensed, and is built using industry-leading technologies including Apache DataFusion, Arrow, and Arrow Flight SQL. We\'re launching with several built-in Data Connectors and Accelerators and Spice is extensible so more will be added in each release. If you\'re interested in contributing, we\'d love to welcome you to the community!

    ' } /> Getting Started' } /> You can download and run Spice in less than 30 seconds by following the quickstart at spiceai.org/docs/getting-started.

    ' } /> Conclusion'} /> Spice, rebuilt in Rust, introduces a unified SQL query interface, making it simpler and faster to build data-driven applications. The lightweight Spice runtime is easy to deploy and makes it possible to materialize and query data from any source quickly and cost-effectively. Applications can serve more users, dashboards and analytics can be snappier, and data and ML pipelines finish faster, without the heavy lifting of managing data.

    ' } /> For developers this translates to less time wrangling data and more time creating innovative applications and business value.

    ' } /> Check out and star the project on GitHub!

    ' } /> Thank you,

    '} /> Phillip

    '} />

    '} />

    '} /> --- ## AI needs AI-ready data URL: https://spice.ai/blog/ai-needs-ai-ready-data Date: 2021-12-05T04:30:17 Description: An introduction to AI-ready data and how Spice.ai handles normalization, encoding, and real-time data preparation for ML applications. A significant challenge when developing an app powered by AI is providing the machine learning (ML) engine with data in a format that it can use to learn. To do that, you need to normalize the numerical data, one-hot encode categorical data, and decide what to do with incomplete data - among other things.

    ' } /> This data handling is often challenging! For example, to learn from Bitcoin price data, the prices are better if normalized to a range between -1 and 1. Being close to 0 is also a problem because of the lack of precision in floating-point representations (usually under 1e-5).

    ' } /> As a developer, if you are new to AI and machine learning, a great talk that explains the basics is Machine Learning Zero to Hero. Spice.ai makes the process of getting the data into an AI-ready format easy by doing it for you!

    ' } /> What is AI-ready data?' } /> You write code with if statements and functions, but your machine only understands 1s and 0s. When you write code, you leverage tools, like a compiler, to translate that human-readable code into a machine-readable format.

    ' } /> Similarly, data for AI needs to be translated or "compiled" to be understood by the ML engine. You may have heard of tensors before; they are simply another word for a multi-dimensional array and they are the language of ML engines. All inputs to and all outputs from the engine are in tensors. You could use the following techniques when converting (or "compiling") source data to a tensor.

    ' } />
  • Normalization/standardization of the numerical input data. Many of the inputs and outputs in machine learning are interpreted as probability distributions. Much of the math that powers machine learning, such as softmax, tanh, sigmoid, etc., is meant to work in the [-1, 1] range.
  • ' } /> Normalizing raw data Figure 1. Normalizing Bitcoin price data.

    ' } />
  • Conversion of categorical data into numerical data. For categorical data (i.e., colors such as "red," "blue," or "green"), you can achieve this through a technique called "One Hot Encoding." In one hot encoding, each possible value in the category appears as a column. The values in the column are assigned a binary value of 1 or 0 depending on whether the value exists or not.
  • ' } /> Figure 2. A visualization of one-hot encoding 

    ' } /> Figure 2. A visualization of one-hot encoding.

    '} />
  • Several advanced techniques exist for "compiling" this source data - this process is known in the AI world as "feature engineering." This article goes into more detail on feature engineering techniques if you are interested in learning more.
  • ' } /> There are excellent tools like PandasNumpyscipy, and others that make the process of data transformation easier. However, most of these tools are Python libraries and frameworks - which means having to learn Python if you don\'t know it already. Plus, when building intelligent apps (instead of just doing pure data analysis), this all needs to work on real-time data in production.

    ' } /> Building intelligent apps' } /> The tools mentioned above are not designed for building real-time apps. They are often designed for analytics/data science.

    ' } /> In your app, you will need to do this data compilation in real-time - and you can't rely on a local script to help process your data. It becomes trickier if the team responsible for the initial training of the machine learning model is not the team responsible for deploying it out into production.

    " } /> How data is loaded and processed in a static dataset is likely very different from how the data is loaded and processed in real-time as your app is live. The result often is two separate codebases that are maintained by different teams that are both responsible for doing the same thing! Ensuring that those codebases stay consistent and evolve together is another challenge to tackle.

    ' } /> Spice.ai helps developers build apps with real-time ML' } /> Spice.ai handles the "compilation" of data for you.

    '} /> You specify the data that your ML should learn from in a Spicepod. The Spice.ai runtime handles the logistics of gathering the data and compiling it into an AI-ready format.

    ' } /> It does this by using many techniques described earlier, such as normalization and one-hot encoding. And because we're continuing to evolve Spice.ai, our data compilation will only get better over time.

    " } /> In addition, the design of the Spice.ai runtime naturally ensures that the data used for both the training and real-time cases are consistent. Spice.ai uses the same data-components and runtime logic to produce the data. And not only that, you can take this a step further and share your Spicepod with someone else, and they would be able to use the same AI-ready data for their applications.

    ' } /> Summary'} /> Spice.ai handles the process of compiling your data into an AI-ready format in a way that is consistent both during the training and real-time stages of the ML engine. A Spicepod defines which data to get and where to get it. Sharing this Spicepod allows someone else to use the same AI-ready data format in their application.

    ' } /> Learn more and contribute' } /> Building intelligent apps that leverage AI is still way too hard, even for advanced developers. Our mission is to make this as easy as creating a modern web page. If the vision resonates with you, join us!

    ' } /> Our Spice.ai Roadmap is public, and now that we have launched, the project and work are open for collaboration.

    ' } /> If you are interested in partnering, we\'d love to talk. Try out Spice.aiemail us "hey," join our community Slack, or reach out on Twitter.

    ' } /> We are just getting started! 🚀

    '} /> Phillip

    '} /> --- ## Spice.ai Now Supports Amazon S3 Vectors For Vector Search at Petabyte Scale! URL: https://spice.ai/blog/amazon-s3-vectors Date: 2025-07-16T18:59:00 Description: Spice AI has partnered with AWS to integrate Amazon S3 Vectors into the Spice.ai Open Source data and AI compute engine. Today, we\'re announcing native support for Amazon S3 Vectors in the Spice.ai Open Source data and AI compute engine.

    ' } /> As an AWS Startup Partner and AWS Marketplace Seller, Spice AI partners with AWS across technology integration, joint go-to-market, and co-selling to deliver solutions for enterprise customers that address real-world data challenges, accelerating the delivery of AI-native applications on AWS.

    ' } /> The Spice.ai S3 Vectors integration arrives alongside AWS\'s announcement of the public preview of Amazon S3 Vectors, a new S3 bucket type designed for vector embeddings, complete with a query endpoint and metadata service. Developers can now configure Spice.ai to use S3 Vectors as a vector database backend, for simple, efficient storage, indexing, and querying of embeddings directly from S3.

    ' } />
    Figure 1. Spice.ai S3 Vectors integration.
    ' } /> What is Vector Similarity Search?' } /> Vector similarity search retrieves data by comparing similarities in multi-dimensional representations, instead of relying on exact keyword or value matches. This method powers semantic search, recommendation systems, and retrieval-augmented generation (RAG) in AI applications.

    ' } /> The process works as follows:

    '} />
  • Convert data to vectors: Turn items like text, images, or audio into vectors - arrays of numbers that capture the data\'s core meaning or features. Machine learning models handle this conversion, known as embedding. Examples include Amazon Titan Embeddings or Cohere Embeddings via AWS Bedrock, or MiniLM L6 available on HuggingFace.
  • Store the vectors: Store the embeddings in a specialized vector database or index designed for fast similarity queries.
  • Query with a vector: Convert the user\'s query (e.g., a phrase or image) into a vector. The system then identifies the closest matches using distance measures such as cosine similarity, Euclidean distance, or dot product.
  • ' } /> This approach provides precise, context-aware data retrieval from vast unstructured datasets. It supports AI applications that prioritize understanding over simple matching.

    ' } /> With the S3 Vectors integration, this process and the lifecycle of vectors is completely managed by the Spice.ai runtime, which also provides an intuitive SQL interface for querying.

    ' } /> Amazon S3 Vectors' } /> Amazon S3 Vectors, launched in public preview on July 15, 2025, provides the first cloud object store with native vector storage and querying, extending AWS object storage for semantic search and retrieval. It features vector indexes within buckets for embedding organization, PUT APIs for uploads, and query APIs for similarity searches using metrics like cosine distance.

    ' } /> Reducing costs for uploading, storing, and querying vectors by up to 90% versus alternatives, it supports AI agents, inference, and semantic search on S3 content with sub-second query performance at petabyte scale. It upholds S3's elasticity, durability, and compute-storage separation - vectors stay in durable storage, queries run on transient resources, bypassing monolithic databases and idle-period costs. Suited for tasks like matching scenes in video archives, clustering business documents, or pattern detection in medical images, it uses a new bucket type with dedicated APIs, no provisioning required, and scales to 10,000 indexes per bucket.

    " } /> Spice.ai\'s Integration with Amazon S3 Vectors' } /> Spice.ai's integration with Amazon S3 Vectors simplifies and accelerates application development for developers.

    " } /> With native support for S3 Vectors, Spice developers can configure datasets via YAML to use S3 Vectors as the vector storage engine, annotating columns with hosted embedding models including Amazon Titan Embeddings or Cohere Embeddings via AWS Bedrock, or self-hosted models like MiniLM L6 from Hugging Face.

    ' } />
    Figure 2. Simple YAML configuration of S3 Vectors in Spice.ai.
    ' } />

    '} /> The Spice.ai runtime manages the full vector lifecycle: it ingests source data from disparate enterprise sources like files, databases, and data lakes, embeds it using specified models, and pushes it into S3 Vector buckets. Applications query via SQL (e.g., SELECT * FROM vector_search(table, 'search query') WHERE condition ORDER BY score) with push-down optimization for efficiency, or HTTP APIs, while the runtime handles indexing and provides an intuitive SQL interface.

    " } />
    Figure 3. Using the vector_search SQL function in Spice Cloud for semantic search.
    ' } /> The Spice S3 Vectors integration simplifies and accelerates AI application development by leveraging S3's vector capabilities with minimal application code, without operational overhead, and it can be used together with existing Spice.ai Keyword and Full-Text (BM25) search capabilities.

    " } /> Demo of Amazon S3 Vectors in Spice.ai Open Source' } /> Availability'} /> S3 Vectors support is available today in the v1.5.0 release of Spice.ai Open Source and Spice Cloud!

    ' } /> To learn more about S3 Vectors in Spice, visit spiceai.org/docs/components/vectors/s3_vectors.

    ' } /> About Spice AI'} /> Spice AI helps enterprises build fast, accurate, and scalable AI applications and agents with its portable, open-source data and AI compute engine. It connects data from disparate sources, simplifies application development, and supports workloads across cloud, edge, and on-premises systems. Based in Seattle, Spice AI focuses on making AI application development simple and easy.

    ' } /> Get started with Spice.ai Open Source in just 30 seconds at: https://spiceai.org/docs/getting-started

    ' } />

    '} />

    '} /> --- ## Announcing Spice.ai Open Source 1.0-stable: A Portable Compute Engine for Data-Grounded AI - Now Ready for Production URL: https://spice.ai/blog/announcing-spice-ai-open-source-1-0-stable Date: 2025-01-22T19:24:40 Description: Learn how Spice.ai OSS grounds AI in real data with federated query, fast retrieval, and portable deployment anywhere. 🎉 Today marks the 1.0-stable release of Spice.ai Open Source-purpose-built to help enterprises ground AI in data. By unifying federated data query, retrieval, and AI inference into a single engine, Spice mitigates AI hallucinations, accelerates data access for mission-critical workloads, and makes it simple and easy for developers to build fast and accurate data-intensive applications across cloud, edge, or on-prem.

    ' } />
    Figure 1: Spice.ai OSS Stable
    ' } /> Enterprise AI systems are only as good as the context they\'re provided. When data is inaccessible, incomplete, or outdated, even the most advanced models can generate outputs that are inaccurate, misleading, or worse, potentially harmful. In one example, a chatbot was tricked into selling a 2024 Chevy Tahoe for $1 due to a lack of contextual safeguards. For enterprises, errors like these are unacceptable-it\'s the difference between success and failure.

    ' } /> Retrieval-Augmented Generation (RAG) is part of the answer - but traditional RAG is only as good as the data it has access to. If data is locked away in disparate, often legacy data systems, or cannot be stitched together for accurate retrieval, you get, as Benioff puts it, "Clippy 2.0".

    ' } />
    Figure 2: Marc Benioff on the limitations of Copilot
    ' } /> And often, after initial Python-scripted pilots, you're left with a new set of problems: How do you deploy AI that meets enterprise requirements for performance, security, and compliance while being cost efficient? Directly querying large datasets for retrieval is slow and expensive. Building and maintaining complex ETL pipelines requires expensive data teams that most organizations don't have. And because enterprise data is highly sensitive, you need secure access and auditable observability-something many RAG setups don't even consider.

    " } /> Developers need a platform at the intersection of data and AI-one specifically designed to ground AI in data. A solution that unifies data query, search, retrieval, and model inference-ensuring performance, security, and accuracy so you can build AI that you and your customers can trust.

    ' } /> Spice.ai OSS: A portable data, AI, and retrieval engine' } /> In March of 2024, we introduced Spice.ai Open Source, a SQL query engine to materialize and accelerate data from any database, data warehouse, or data lake so that data can be accessed wherever it lives across the enterprise - consistently fast. But that was only the start.

    ' } /> Building on this foundation, Spice.ai OSS unifies data, retrieval, and AI, to provide current, relevant context to mitigate AI "hallucinations" and significantly reduce incorrect outputs-just one of the many mission-critical use cases Spice.ai addresses.

    ' } /> Spice is a portable, single-node, compute engine built in Rust. It embeds the fastest single-node SQL query engine, DataFusion, to serve secure, virtualized data views to data-intensive apps, AI, and agents. Sub-second data query is accelerated locally using Apache Arrow, DuckDB, or SQLite.

    ' } /> Now at version 1.0-stable, Spice is ready for production. It's already deployed in enterprise use at Twilio, Barracuda Networks, and NRC Health, and can be deployed anywhere-cloud-hosted, BYOC, edge, on-prem.

    " } /> Spice AI compute engine
    Figure 3: The Spice.ai OSS architecture
    ' } /> ‍Data-grounded AI'} /> Data-grounded AI anchors models in accurate, current, and domain-specific data, rather than relying solely on pre-trained knowledge. By unifying enterprise data-across databases, data lakes, and APIs-and applying advanced ingestion and retrieval techniques, these systems dynamically incorporate real-world context at inference time without leaking sensitive information. This approach helps developers minimize hallucinations, reduce operational risk, and build trust in AI by delivering reliable, relevant outputs.

    ' } /> Ground AI in data
    Figure 4: AI responses with and without contextual data
    ' } /> How does Spice.ai OSS solve data-grounding?' } /> With Spice, models always have access to materializations of low-latency, real-time data for near-instant retrieval, minimizing data movement while enabling AI feedback so apps and agents can learn and adapt over time. For example, you can join customer records from PostgreSQL with sales data in Snowflake and logs stored in S3-all with a single SQL query or LLM function call.

    ' } />
    Figure 5: A secure compute engine for AI inference
    ' } /> Spice includes an advanced suite of LLM tools including vector and hybrid search, text-to-SQL, SQL query and retrieval, data sampling, and context formatting-all purpose-built for accurate outputs.

    ' } /> The latest research is continually incorporated so that teams can focus on business objectives rather than trying to keep up with the incredibly fast-moving and often overwhelming space of AI.

    ' } /> Spice.ai OSS: The engine that makes AI work' } /> Spice.ai OSS is a lightweight, portable runtime (single ~140 MB binary) with the capabilities of a high-speed cloud data warehouse built into a self-hostable AI inference engine, all in a single, run-anywhere package.

    ' } /> It's designed to be distributed and integrated at the application level, rather than being a bulky, centralized system to manage, and is often deployed as a sidecar. Whether running one Spice instance per service or one for each customer, Spice is flexible enough to fit your application architecture.

    " } /> Apps and agents integrate with Spice.ai OSS via three industry-standard APIs, so that it can be adopted incrementally with minimal changes to applications.

    ' } />
  • SQL Query APIs: HTTP, Arrow Flight, Arrow Flight SQL, ODBC, JDBC, and ADBC.
  • OpenAI-Compatible APIs: HTTP APIs compatible with the OpenAI SDK, AI SDK with local model serving (CUDA/Metal accelerated), and gateway to hosted models.
  • Iceberg Catalog REST APIs: A unified Iceberg Catalog REST API.
  • ' } /> Architecture diagram of Spice.ai 1.0
    Figure 6: The building blocks of the Spice.ai stack
    ' } /> Key features of Spice.ai OSS include:

    '} />
  • Federated SQL Query Across Data Sources: Perform SQL queries across disparate data sources with over 25 open-source data connectors, including catalogs (Unity Catalog, Iceberg Catalog, etc), databases (PostgreSQL, MySQL, etc.), data warehouses (Snowflake, Databricks, etc.), and data lakes (e.g., S3, ABFS, MinIO, etc.).
  • ' } />
  • Data Materialization and Acceleration: Locally materialize and accelerate data using Arrow, DuckDB, SQLite, and PostgreSQL, enabling low-latency and high-speed transactional and analytical queries. Data can be ingested via Change-Data-Capture (CDC) using Debezium, Catalog integrations, on an interval, or by trigger.
  • ' } />
  • AI Inference, Gateway, and LLM toolset: Load and serve models like Llama3 locally, or use Spice as a gateway to hosted AI platforms including OpenAI, Anthropic, xAI, and NVidia NIM. Automatically use a purpose-built LLM toolset for data-grounded AI.
  • ' } />
  • Enterprise Search and Retrieval: Advanced search capabilities for LLM applications, including vector-based similarity search and hybrid search across structured and unstructured data. Real-time retrieval grounds AI applications in dynamic, contextually relevant information, enabling state-of-the-art RAG.
  • ' } />
  • LLM Memory: Enable long-term memory for LLMs by efficiently storing, retrieving, and updating context across interactions. Support real-time contextual continuity and grounding for applications that require persistent and evolving understanding.
  • ' } />
  • LLM Evaluations: Test and boost model reliability and accuracy with integrated LLM-powered evaluation tools to assess and refine AI outputs against business objectives and user expectations.
  • ' } />
  • Monitoring and Observability: Ensure operational excellence with telemetry, distributed tracing, query/task history, and metrics, that provide end-to-end visibility into data flows and model performance in production.
  • ' } />
  • Deploy Anywhere; Edge-to-Cloud Flexibility: Deploy Spice as a standalone instance, Kubernetes sidecar, microservice, or scalable cluster, with the flexibility to run distributed across edge, on-premises, or any cloud environment. Spice AI offers managed, cloud-hosted deployments of Spice.ai OSS through the Spice Cloud Platform (SCP).
  • ' } /> Real-world use-cases' } /> Spice delivers data readiness for teams like Twilio and Barracuda, and accelerates time-to-market of data-grounded AI, such as with developers on GitHub and at NRC Health.

    ' } /> Here are some examples of how Spice.ai OSS solves real problems for these teams.

    ' } /> CDN for Databases - Twilio'} />
    Figure 7: Twilio use case diagram
    ' } /> A core requirement for many applications is consistently fast data access, with or without AI. Twilio uses Spice.ai OSS as a data acceleration framework or Database CDN, staging data in object-storage that\'s accelerated with Spice for sub-second query to improve the reliability of critical services in its messaging pipelines. Before Spice, a database outage could result in a service outage.

    ' } /> With Spice, Twilio has achieved:

    '} />
  • Significantly Improved Query Performance: Used Spice to co-locate control-plane data in the messaging runtime, accelerated with DuckDB, to send messages with a P99 query time of < 5ms.
  • Low-Latency Multi-Tenancy Controls: Spice is integrated into the message-sending runtime to manage multi-tenancy data controls. Before, data changes required manual triggers and took hours to propagate. Now, they update automatically and reach the messaging front door within five minutes via a resilient data-availability framework.
  • Mission-Critical Reliability: Reduced reliance on queries to databases by using Spice to accelerate data in-memory locally, with automatic failover to query data directly from S3, ensuring uninterrupted service even during database downtime.
  • ' } /> Datalake Accelerator - Barracuda'} /> Diagram illustrating Barracuda\'s use of Spice
    Figure 8: Barracuda use case diagram
    ' } /> Barracuda uses Spice.ai OSS to modernize data access for their email archiving and audit log systems, solving two big problems: slow query performance and costly queries. Before Spice, customers experienced frustrating delays of up to two minutes when searching email archives, due to the data volume being queried.

    ' } /> With Spice, Barracuda has achieved:

    '} />
  • Significant Cost Reduction: Replaced expensive Databricks Spark queries, significantly cutting expenses while improving performance.
  • 100x Query Performance Improvement: Accelerated email archive queries from a P99 time of 2 minutes to 100-200 milliseconds.
  • Efficient Audit Logs: Offloaded audit logs to Parquet files in S3, queried directly by Spice.
  • Mission-Critical Reliability: Reduced load on Cassandra, improving overall infrastructure stability.
  • ' } /> Data-Grounded AI apps and agents - NRC Health' } />
    Figure 9: NRC Health use case diagram
    ' } /> NRC Health uses Spice.ai OSS to simplify and accelerate the development of data-grounded AI features, unifying data from multiple platforms including MySQL, SharePoint, and Salesforce, into secure, AI-ready data. Before Spice, scaling AI expertise across the organization to build complex RAG-based scenarios was a challenge.

    ' } /> With Spice OSS, NRC Health has achieved:

    '} />
  • Developer Productivity: Partnered with Spice in three company-wide AI hackathons to build complete end-to-end data-grounded AI features in hours instead of weeks or months.
  • Accelerated Time-to-Market: Centralized data integration and AI model serving an enterprise-ready service, accelerating time to market.
  • ' } /> '} /> Data-Grounded AI Software Development - Spice.ai GitHub Copilot Extension' } /> When using tools like GitHub Copilot, developers often face the hassle of switching between multiple environments to get the data they need.

    ' } /> The Spice.ai for GitHub Copilot Extension built on Spice.ai OSS, gives developers the ability to connect data from external sources to Copilot, grounding Copilot in relevant data not generally available in GitHub, like test data stored in a development database.

    ' } /> Developers can simply type @spiceai to interact with connected data, with relevant answers now surfaced directly in Copilot Chat, significantly improving productivity.

    ' } /> Why choose Spice.ai OSS?' } /> Adopting Spice.ai OSS addresses real challenges in modern AI development: it grounds models in accurate, domain-specific, real-time data. With Spice, engineering teams can focus on what matters-delivering innovative, accurate, AI-powered applications and agents that work. Additionally, Spice.ai OSS is open-source under Apache 2.0, ensuring transparency and extensibility so your organization remains free to innovate without vendor lock-in.

    ' } /> Get started in 30 seconds' } /> You can install Spice.ai OSS in less than a minute, on macOS, Linux, and Windows.

    ' } /> macOS, Linux, and WSL:'} /> ```yaml curl https://install.spiceai.org | /bin/bash ``` Or using brew:

    '} /> ```bash brew install spiceai/spiceai/spice ``` Windows:'} /> ```shell curl -L "https://install.spiceai.org/Install.ps1" -o Install.ps1 && PowerShell -ExecutionPolicy Bypass -File ./Install.ps1 ``` Once installed, follow the Getting Started with Spice.ai guide to ground OpenAI chat with data from S3 in less than 2 minutes.

    ' } /> Looking ahead'} /> The 1.0-stable release of Spice.ai OSS marks a major step toward accurate AI for developers. By combining data, AI, and retrieval into a unified runtime, Spice anchors AI in relevant, real-time data-helping you build apps and agents that work.

    ' } /> A cloud-hosted, fully managed Spice.ai OSS service is available in the Spice Cloud Platform. It's SOC 2 Type II compliant and makes it easy to operate Spice deployments.

    " } /> Beyond apps and agents, the vision for Spice is to be the best digital labor platform for building autonomous AI employees and teams. These are exciting times! Stay tuned for some upcoming announcements later in 2025!

    ' } /> The Spice AI Team

    '} /> Learn more'} />
  • Cookbook: 47+ samples and examples using Spice.ai OSS
  • Documentation: Learn about features, use cases, and advanced configurations
  • X: Follow @spice_ai on X for news and updates
  • Slack: Connect with the team and the community
  • GitHub: Star the repo, contribute, and raise issues
  • ' } /> --- ## Spice Cloud v1.7.0: DataFusion v49, Full-Text Search Updates & More URL: https://spice.ai/blog/announcing-spice-cloud-v1-7-0 Date: 2025-09-24T17:41:00 Description: Spice Cloud v1.7.0 includes DataFusion v49, EmbeddingGemma support, and real-time indexing for full-text search Spice Cloud & Spice.ai Enterprise 1.7.0 are now live, bringing performance upgrades with DataFusion v49, real-time full-text search indexing, EmbeddingGemma support, and improvements across search, embeddings, and API integrations. Spice Cloud customers will automatically upgrade to v1.7.0 on deployment, while Spice.ai Enterprise customers can consume the Enterprise v1.7.0 image from the Spice AWS Marketplace listing.

    ' } /> What\'s New in v1.7.0'} /> DataFusion v49 Upgrade'} /> Spice now runs on DataFusion v49, delivering lower latency and improved query optimization.

    ' } />
    Source: DataFusion v49 Release Blog
    ' } />

    '} /> DataFusion v49 highlights include:

    '} />
  • Dynamic filters and pushdown to skip unnecessary reads in ORDER BY & LIMIT queries
  • Compressed spill files to reduce disk usage during large sorts and aggregations
  • Support for ordered-set aggregates with WITHIN GROUP
  • New REGEXP_INSTR function to identify regex match positions
  • ' } /> EmbeddingGemma Support'} /> Spice now supports EmbeddingGemma, Google\'s latest embedding model for text and documents. It delivers high-quality embeddings for semantic search, retrieval, and recommendation tasks. Configure it directly in your Spicepod via HuggingFace.

    ' } /> Embedding Request Caching'} /> Repeated embedding requests can now be cached in the Spice runtime. This reduces both latency and costs, with configurable cache size and TTL options. Check out the caching documentation for more details.

    ' } /> Real-Time Indexing for Full Text Search' } /> Full-text indexing now supports real-time changes from CDC streams such as Debezium. New events are searchable as they arrive, ensuring continuously fresh results.

    ' } /> OpenAI Responses API Tool Calls with Streaming' } /> The OpenAI Responses API in Spice now supports tool calls with streaming. Results from tools like web_search and code_interpreter are streamed as they\'re generated, enabling more responsive agent and application experiences.

    ' } /> Bug & Stability Fixes'} /> v1.7.0 includes numerous fixes and improvements:

    '} />
  • CDC streams readiness and full-text indexing reliability
  • Vector search pipeline and vector_search UDTF fixes
  • Kafka schema inference, consumer group persistence, and cooperative mode
  • Error reporting improvements (e.g., ThrottlingException handling)
  • Iceberg connector support for LIMIT pushdown
  • S3 Vector ingestion reliability and tracing fixes
  • ' } /> v1.7 Release Community Call'} /> We\'ll walk through highlights of v1.7 live on our Release Community Call. Join us to see the new functionality in action and bring your questions! Register here.

    ' } />
    Thursday, October 2nd Release community Call
    ' } /> '} />

    '} /> --- ## Apache Iceberg at Spice AI: How we Query, Accelerate, and Write to Open Table Formats URL: https://spice.ai/blog/apache-iceberg-at-spice-ai Date: 2026-02-25T00:00:00 Description: A technical deep-dive into how Spice AI integrates Apache Iceberg for federated queries, sub-second acceleration, and ACID-compliant writes to open table formats. [Apache Iceberg](https://iceberg.apache.org/) has become the default open table format for production data lakes, bringing ACID transactions, schema evolution, and time travel to data stored in object storage. But Iceberg alone doesn't solve the performance problem: querying data in object storage like S3 carries inherent latency that's too high for many application workloads. At [Spice AI](/platform/sql-federation-acceleration), we integrate Iceberg as a first-class data source - customers can connect to Iceberg catalogs and query tables with full SQL semantics, then selectively accelerate hot datasets for sub-millisecond reads. This post explains how that integration works, from connecting your first catalog to the query engine internals. **What this post covers:** - What Apache Iceberg is and why it matters for data lakes - The latency gap that Iceberg leaves open for application workloads - How Spice connects to Iceberg catalogs, accelerates tables, and writes data back - How the query engine works under the hood (Apache DataFusion, catalog providers, query optimization) - Production lessons from running Iceberg at scale This article is the second part of our Engineering at Spice AI series, where we share technical deep-dives into the [open-source technologies](https://spiceai.org/) and practices that power the Spice.ai compute engine. 1. [Apache DataFusion at Spice AI](/blog/how-we-use-apache-datafusion-at-spice-ai): The query engine 2. **Apache Iceberg at Spice AI: Open table format and SQL-based ingestion** 3. Rust at Spice AI: The systems programming foundation 4. Apache Arrow at Spice AI: The core data format 5. DuckDB at Spice AI: Embedded analytics acceleration 6. Vortex at Spice AI: Columnar compression for [Cayenne](/blog/introducing-spice-cayenne-data-accelerator), Spice's premier data accelerator Want to skip ahead? The [Iceberg catalog connector docs](https://spiceai.org/docs/components/catalogs/iceberg) walk through connecting a local REST catalog in under 5 minutes. The rest of this post explains how the integration works under the hood. ## What is Apache Iceberg? [Apache Iceberg](https://iceberg.apache.org/) is an open table format - a specification for how to organize metadata and data files so that data stored in object storage (S3, GCS, HDFS) can support database-level properties like ACID transactions, schema evolution, and time travel. It's not a storage system or a query engine, but a layer that sits between the two. Unlike the older Hive approach, which treats directories as tables and relies on naming conventions for partitioning, Iceberg maintains explicit metadata files that track: - **Current and historical table schemas** - so readers can handle schema changes without rewriting data - **Which data files belong to the table** - including which rows have been deleted - **Partition specifications and their evolution** - old and new partitioning schemes coexist - **Immutable snapshots** - for time travel queries and concurrent-write safety - **File-level and column-level statistics** - for pruning data files before reading them These capabilities are organized into three layers: - **The metadata layer:** JSON and Avro files tracking table schema, partitions, and data files - **The data layer:** Parquet files containing the actual data in object storage - **A catalog API:** The standard interface for table discovery and atomic updates ```mermaid graph TD A["Iceberg Catalog\n(REST, Glue, Hive, Hadoop)"] --> B["Table Metadata\n(Schema, Partitions, Snapshots)"] B --> C["Data Files\n(Parquet in object storage, e.g. S3)"] ``` This metadata-driven design is what gives Iceberg its core strengths. We'll return to specific features - ACID transactions, hidden partitioning, schema evolution, time travel, and file-level pruning - later in this post, in the context of how Spice uses them. ## The latency gap: Why Iceberg alone isn't enough for applications Iceberg solves the thorny data lake consistency and reliability challenges, but there's still an inherent performance gap for latency-sensitive workloads. Object storage like S3 carries 50-200ms per-request latency by design, and resolving an Iceberg query requires multiple metadata round-trips (manifest list, manifests, then data files) before touching a single row. Parquet itself is optimized for bulk analytical scans, not the high-concurrency, low-cardinality reads that application and increasingly AI agent workloads demand. Consider a concrete example: a 10TB Iceberg table of user events, partitioned by date, stored in S3. Your data team runs ad-hoc queries over years of data - Iceberg's partition pruning makes this efficient. But your application serves a dashboard that queries the last 7 days of data, thousands of times per second. The common workaround is to copy hot data into a faster system (ClickHouse, Redis, etc.) and introduce an ETL pipeline to keep it in sync with the lake. This works, but it introduces drift between systems, duplicates storage costs, and adds another operational surface to maintain. This is the gap Spice is designed to fill. ## How Spice.ai bridges the gap [Spice.ai](/platform/sql-federation-acceleration) is a data compute engine that lets you query data across sources using standard SQL. It connects to databases, data lakes, and warehouses - including Iceberg catalogs - and presents them through a single query interface. The key capability for Iceberg workloads is **acceleration**: Spice can materialize a hot working set into a faster local engine (DuckDB, SQLite, or [Spice Cayenne](/blog/introducing-spice-cayenne-data-accelerator)), then keep it automatically synchronized with the source. Iceberg stays the authoritative source of truth; Spice handles the caching and refresh logic so you don't have to build a separate pipeline. Spice is built on [Apache DataFusion](https://datafusion.apache.org/) for query planning and execution, and on [Apache Arrow](https://arrow.apache.org/) as the in-memory columnar format. We'll cover the DataFusion internals later in this post; for now, the important thing is that Spice treats Iceberg as a first-class catalog - connect once, query across data sources, then choose which datasets to accelerate. ```mermaid graph LR A["Read Manifests"] --> B["Check Statistics"] B --> C{"File matches predicate?"} C -->|"event_date max < 2024-01-01"| D["Skip file"] C -->|"user_id out of range"| D C -->|"Predicate matches"| E["Scan file"] ``` Spice supports several [deployment topologies](/feature/edge-to-cloud-deployments). The [sidecar pattern](https://spiceai.org/docs/deployment/architectures/sidecar) works well for workloads that need low-latency and high-concurrency. In Kubernetes, Spice runs as a second container in the same pod as your application. Communication goes over localhost instead of the network, which removes round-trip overhead. Each pod has its own copy of the accelerated data, so reads never leave the machine and each instance fails independently. The trade-off is resource duplication: every pod stores its own copy, which costs extra memory and compute. This works best when scale is moderate and sub-millisecond reads justify the extra resources - for example, a dashboard serving thousands of concurrent users. ```mermaid graph TD A["Application Layer\nSQL queries via Spice"] --> B["Spice Query Engine\n(Apache DataFusion + acceleration layer)"] B -->|"Cold queries\n(full history, ad-hoc)"| C["Iceberg on S3\n(full dataset)\n10TB historical\nPartition pruning\nQuery in 500ms-5s"] B -->|"Hot queries\n(recent data, dashboards)"| D["DuckDB Acceleration\n(last 7 days, cached)\n50GB on local NVMe\nSub-10ms queries\nAuto-refresh"] ``` ## Connecting Iceberg to Spice Configuration in Spice uses the [spicepod](/platform/spicepod) - a YAML file that declares which data sources to connect and how to access them. To connect an Iceberg catalog, add a `catalogs` entry pointing to the catalog's REST endpoint (or Glue, or Hadoop): ```yaml catalogs: - from: iceberg:http://localhost:8181/v1/namespaces name: ice params: iceberg_s3_endpoint: http://localhost:9000 iceberg_s3_access_key_id: admin iceberg_s3_secret_access_key: password ``` On startup, Spice connects to the catalog, discovers all namespaces (databases) and tables, and registers them for SQL access: ```bash spice run # 2025-01-27T19:08:37Z INFO Registered catalog 'ice' with 1 schema and 8 tables ``` Every table is now queryable - no additional configuration needed: ```sql sql> SHOW TABLES; +--------+-------+------+ | table_catalog | table_schema | table_name | +--------+-------+------+ | ice | tpch_sf1 | lineitem | | ice | tpch_sf1 | nation | | ice | tpch_sf1 | orders | | ice | tpch_sf1 | customer | +--------+-------+------+ sql> SELECT COUNT(*) FROM ice.tpch_sf1.lineitem; +------+ | count(*) | +------+ | 6001215 | +------+ Time: 0.186233833 seconds ``` Tables registered this way go directly to the Iceberg source. This is the simplest setup, but it means query latency depends on the source (S3, network, file format, etc.). For low-latency use cases, the next step is acceleration. ## Accelerating Iceberg tables Tables registered through a catalog are queryable but not accelerated. To accelerate a table, register it as a **dataset** in the spicepod. This gives you control over the acceleration engine, refresh schedule, and which subset of data to cache: ```yaml datasets: - from: ice.analytics.events name: events acceleration: enabled: true engine: cayenne refresh_sql: | SELECT * FROM events WHERE event_date > NOW() - INTERVAL '7 days' refresh_check_interval: 10m ``` The `from:` field references the catalog table (`ice.analytics.events`), so the Iceberg catalog still serves as the source of truth. The dataset definition adds the acceleration layer on top. What happens behind the scenes: 1. On startup, Spice executes the `refresh_sql` against the Iceberg table 2. Results are loaded into a local [acceleration engine](https://spiceai.org/docs/features/data-acceleration) (Spice supports DuckDB, SQLite, Arrow, and Spice Cayenne for queries with low memory and DuckDB-like scale) 3. Queries against `events` hit the acceleration engine (local NVMe storage) 4. Every 10 minutes, Spice re-executes the refresh SQL to pull new data You don't have to choose between Iceberg and fast queries. Iceberg stays your source of truth. Acceleration adds a transparent cache for predictable, low-latency reads. ## Writing back to Iceberg Spice supports [INSERT operations](/blog/write-to-apache-iceberg-tables-with-sql) with full ACID guarantees via Iceberg's transaction protocol (check out the [Iceberg cookbook](https://github.com/spiceai/cookbook/blob/trunk/catalogs/iceberg/README.md) for a full example). To enable writes, set `access: read_write` on the catalog: ```yaml catalogs: - from: iceberg:http://localhost:8181/v1/namespaces access: read_write #required to enable INSERT operations name: ice params: iceberg_s3_endpoint: http://localhost:9000 iceberg_s3_access_key_id: admin iceberg_s3_secret_access_key: password iceberg_s3_region: us-east-1 ``` ```sql - Insert new rows INSERT INTO ice.tpch_sf1.region (r_regionkey, r_name, r_comment) VALUES (5, 'ANTARCTICA', 'A cold and remote region'); - Verify SELECT * FROM ice.tpch_sf1.region WHERE r_regionkey = 5; SELECT * FROM ice.tpch_sf1.nation WHERE n_nationkey = 25; ``` How this works under the hood: 1. Spice writes new Parquet files to S3 2. Creates a new manifest file listing the new files 3. Creates a new snapshot referencing the updated manifest 4. Atomically updates the metadata pointer in the catalog If another writer commits between steps 1-3, Spice's commit fails and retries. This is Iceberg's optimistic concurrency in action - every write creates a new snapshot, and the catalog uses atomic compare-and-swap operations to ensure only one writer wins. The loser retries from the latest snapshot. ## Under the hood: How Spice queries Iceberg Now that we've covered the user-facing configuration, let's look at how the query engine processes an Iceberg query. This section introduces the internal components - if you're primarily interested in using Spice with Iceberg, the sections above have you covered. ### Apache DataFusion: Spice's query engine Spice is built on [Apache DataFusion](https://datafusion.apache.org/), an extensible SQL query engine written in Rust. DataFusion handles SQL parsing, query planning, and execution. (We covered DataFusion in depth in the [first post in this series](/blog/how-we-use-apache-datafusion-at-spice-ai).) DataFusion organizes data sources into a three-level hierarchy: **Catalog** -> **Schema** -> **Table**. This maps directly to Iceberg's own structure: - **Catalog** = Iceberg catalog (REST endpoint, Glue database, or Hadoop warehouse) - **Schema** = Iceberg namespace - **Table** = Iceberg table Iceberg namespaces can technically be nested (`catalog.a.b.c.table`), but most catalog implementations use a single level. When you add an Iceberg catalog to the spicepod, Spice creates three types of DataFusion components to handle it: - **Catalog connectors** to connect to REST, Glue, or Hadoop catalogs - **CatalogProvider / SchemaProvider** to discover namespaces and list tables - **TableProvider** to read and write individual Iceberg tables ### How a query flows through the system When you run `SELECT * FROM ice.db.events`, here's how Spice resolves it: ```mermaid graph TD A["User Query\nSELECT * FROM iceberg.db.table"] --> B["Name Resolution / Table Lookup\niceberg.db.table → IcebergTableProvider"] B --> C["IcebergTableProvider\n(iceberg-datafusion crate)\nReads metadata, plans which Parquet\nfiles to read for the scan"] C --> D["Parquet Files\n(S3, GCS, HDFS, Local FS)"] ``` DataFusion parses the three-part table name (`ice.db.table`), resolves `ice` to the Iceberg CatalogProvider, `db` to the SchemaProvider for that namespace, and `table` to an `IcebergTableProvider`. The TableProvider then uses Iceberg's metadata to plan the most efficient read from S3. ### Schema discovery: Loading tables from a namespace Each Iceberg namespace becomes a DataFusion SchemaProvider. On initialization, the provider: 1. Lists all tables in the namespace from the catalog 2. Filters them against glob patterns if an inclusion list is configured 3. Loads each table concurrently **Performance note:** Loading table metadata is the slow path - each table requires fetching metadata from S3 (metadata.json, manifest lists). For catalogs with hundreds of tables, this can take 10-30 seconds on startup. Use glob filtering to scope the inclusion list to only the tables a given deployment needs. This keeps startup time predictable regardless of catalog size. ### Query optimization through Iceberg metadata Spice uses the community `iceberg-datafusion` crate to connect Iceberg tables to DataFusion. When a query hits an Iceberg table, the TableProvider uses Iceberg's metadata to minimize the data read from S3: - **Manifest pruning** - filter expressions skip manifest files that can't contain matching rows - **Predicate pushdown** - query predicates push down to the Parquet reader, so only matching row groups are scanned - **Column projection** - only requested columns are read from Parquet files This means a query like `SELECT customer_id FROM events WHERE event_date = '2025-01-15'` might read 50MB instead of 10TB - partition pruning eliminates irrelevant files, and column projection skips every column except `customer_id`. ## Key Iceberg features Spice leverages The query optimization described above depends on several foundational Iceberg features. Here's a closer look at each. ### ACID transactions via optimistic concurrency Every write creates a new metadata file pointing to a new snapshot. The catalog uses atomic compare-and-swap operations to commit changes. If two writers conflict, one fails and retries: ```mermaid sequenceDiagram participant A as Writer A participant Cat as Catalog participant B as Writer B A->>Cat: Read snapshot S1 B->>Cat: Read snapshot S1 A->>Cat: Add files, commit snapshot S2 Cat-->>A: Commit successful B->>Cat: Add files, try to commit snapshot S3 Cat-->>B: Rejected (S2 already committed) B->>Cat: Retry from S2 ``` This comes with a tradeoff - too many concurrent changes by multiple writers will result in a lot of wasted work as rejected writes retry. But the benefit is that writers can work independently, with the catalog serving as the coordination point. ### Hidden partitioning Iceberg maintains a separate partition spec that maps logical columns to physical partition values via transforms. Unlike Hive-style partitioning, users never query partition columns directly - partitioning is always defined as a transform on existing columns. For example, consider a table: ```sql events ( event_id BIGINT, user_id BIGINT, event_time DATE ) ``` With the partition spec: ```sql PARTITION SPEC day(event_time) ``` Iceberg physically stores a derived partition value such as `event_time_day = 2024-01-15`, but this field is not part of the table schema. When a user writes `WHERE event_time = '2024-01-15'`, Iceberg rewrites the predicate automatically using the partition transform and prunes data files accordingly. Changing the partitioning strategy only requires updating the spec. Old data remains partitioned under the old spec; new data uses the new one. Iceberg's metadata tracks which data files belong to which spec, and during scan planning it evaluates predicates across all active specs. ### Schema evolution without rewrites Iceberg tracks schema evolution in metadata; each data file records which schema version it was written with. Readers handle differences automatically: - New columns in old files -> return NULL - Renamed columns -> metadata tracks the mapping - Type promotions (int -> long) -> handled transparently ### Time travel Every commit creates an immutable snapshot. You can query as of any snapshot ID or timestamp. The tradeoff is that many small changes create many snapshots, increasing query planning time. ### File-level pruning via metadata statistics Each manifest file stores min/max values for every column in every data file. Before scanning any Parquet, Iceberg can eliminate files that cannot contain matching data: ```sql WHERE event_date > '2024-01-01' AND user_id = 12345 ``` ```mermaid graph LR A["Read Manifests"] --> B["Check Statistics"] B --> C{"File matches predicate?"} C -->|"event_date max < 2024-01-01"| D["Skip file"] C -->|"user_id out of range"| D C -->|"Predicate matches"| E["Scan file"] ``` Parquet files from modern writers also include these statistics in the Parquet footer - but Iceberg's metadata-level statistics enable pruning without opening the files at all. Write predicates that Iceberg can optimize: ```sql - Good: Iceberg can prune partitions SELECT * FROM events WHERE event_date > '2024-01-01' - Less optimal: Function prevents pushdown SELECT * FROM events WHERE YEAR(event_date) = 2024 ``` ## Error handling: Making failures actionable Iceberg operations can fail in many ways - network issues, permission errors, corrupted metadata, or missing files. Generic error messages make these hard to debug. Spice maps Iceberg errors to specific messages that tell you what went wrong and what to do about it. For example, if you have a typo in a namespace name: Generic Iceberg error: ```bash Unexpected => Failed to execute http request, NoSuchNamespaceException ``` Spice error: ```bash The namespace 'analytics_prod' does not exist in the Iceberg catalog, verify the namespace name and try again. ``` Or if the catalog URL is wrong: Generic Iceberg error: ```bash Unexpected => Failed to execute http request, source: error sending request for url (http://localhoster:8181/v1/config) ``` Spice error: ```bash Failed to connect to the Iceberg catalog or object store at (http://localhoster:8181/v1/config). Verify the Iceberg catalog is accessible and try again. ``` The same approach applies across TLS certificate errors, unsupported features, and invalid table metadata - each error includes context about the cause and a suggested next step. ## Production lessons After running Iceberg in production, here are some lessons learned: ### 1. Catalog discovery is a startup bottleneck Listing all namespaces and tables requires many metadata requests. Each table load fetches metadata from S3, and for catalogs with hundreds of tables, startup can take 10-30 seconds. We address this with: - **Concurrency control** - a semaphore caps concurrent table loads at 10 to avoid overwhelming the catalog or object store - **Include patterns** - glob filters scope discovery to only the tables a deployment needs - **Lazy loading (planned)** - fetch table metadata on first query instead of at startup, trading startup time for first-query latency ### 2. S3 request signing can expire on large tables AWS SigV4 signatures have a fixed validity window. When loading a large Iceberg table, Spice may queue hundreds of S3 requests for metadata files, manifests, and Parquet files. If requests wait too long in the queue, AWS rejects them with `RequestTimeTooSkewed`. This looks like a permissions error, but it's actually a timing issue - the signature expired before the request was sent. Concurrency limiting (point 1) helps here by keeping the request queue from growing too large. ### 3. Environment credentials can leak into explicit configs The `iceberg-rust` library uses OpenDAL for S3 access. By default, OpenDAL loads credentials from multiple sources - explicit properties, environment variables, and `~/.aws/config`. Even when you provide credentials explicitly in the spicepod, OpenDAL can pick up `AWS_SESSION_TOKEN` from the environment and mix it with your explicit access key. This causes authentication failures that are hard to trace because the credentials you configured are correct - it's the extra session token that's wrong. Spice now sets `s3.disable-config-load=true` to prevent this. If you hit unexpected auth errors with Iceberg, check whether AWS credentials are set in your environment. ### 4. Not every table in a catalog is an Iceberg table When connecting to AWS Glue, the catalog may contain Hive, Parquet, or CSV tables alongside Iceberg tables. Loading a non-Iceberg table as Iceberg fails. Spice handles this by skipping non-Iceberg tables with a warning instead of failing the entire catalog. If you see "Failed to load table" warnings on startup, this is likely why - it's not an error, it's Spice filtering out tables it can't read as Iceberg. ## Our contributions to iceberg-rust Spice depends on `iceberg-rust` for catalog access, metadata handling, and Parquet scanning. We maintain a fork for changes that haven't been upstreamed yet, and contribute fixes back to the upstream project as they stabilize. Merged upstream to `apache/iceberg-rust`: - [Handle converting Utf8View & BinaryView to Iceberg schema (#831)](https://github.com/apache/iceberg-rust/pull/831) - Added support for Arrow's newer string/binary view types - [Make schema and partition_spec optional for TableMetadataV1 (#1087)](https://github.com/apache/iceberg-rust/pull/1087) - Compatibility fix for older Iceberg V1 tables - [Handle pagination via next-page-token in REST Catalog (#1097)](https://github.com/apache/iceberg-rust/pull/1097) - Fixed REST catalog listing for catalogs with many namespaces/tables - [Fix predicates not matching the Arrow type of columns read from parquet files (#1308)](https://github.com/apache/iceberg-rust/pull/1308) - Fixed predicate pushdown producing incorrect results when Arrow types didn't match - [Add support for custom credential loader for S3 FileIO (#1528)](https://github.com/apache/iceberg-rust/pull/1528) - Enabled pluggable AWS credential providers for S3 access - [Improve IcebergCommitExec to correctly populate properties/schema (#1721)](https://github.com/apache/iceberg-rust/pull/1721) - Fixed write path metadata - [Fix: ensure CoalescePartitionsExec is enabled for IcebergCommitExec (#1723)](https://github.com/apache/iceberg-rust/pull/1723) - Fixed partitioned writes ## Current limitations and future work **What works today:** - Read all Iceberg tables (v1 and v2 format) - INSERT new data with snapshot isolation - Partition evolution - old and new partitioning schemes coexist transparently **Current limitations:** - No UPDATE or DELETE. Row-level mutations are not yet supported. - No incremental refresh. Acceleration re-fetches the entire dataset on each refresh. Incremental refresh (only fetch new data) is in development. - No automatic catalog refresh. Schema changes in the Iceberg catalog require restarting Spice. Periodic auto-refresh is planned. **What's next:** - DELETE FROM via equality delete files (merge-on-read) - Incremental acceleration refresh - only pull new partitions since the last refresh - Metadata-only queries - answer COUNT, MIN, MAX from Iceberg statistics without reading data files - Lazy table loading - defer metadata fetches until first query to reduce startup time - Better predicate pushdown to S3 Select for highly selective queries ## Apache Iceberg + Spice AI: Summary Apache Iceberg provides ACID transactions, schema evolution, and open file formats for data lakes. Spice adds federated SQL access with local acceleration on top. Together, they give you: - **Iceberg's reliability** - ACID guarantees and schema evolution over open Parquet files - **Spice's flexibility** - query Iceberg alongside Postgres, Snowflake, and other sources in one SQL interface - **Sub-millisecond reads** - accelerate frequently queried datasets locally while Iceberg remains the source of truth Run Iceberg locally in under 5 minutes using the [Spice .ai Iceberg Catalog Connector](https://github.com/spiceai/cookbook/blob/trunk/catalogs/iceberg/README.md). --- ## Basis Set Ventures Deploys Spice.ai to Power Natural Language Queries and Mitigate Hallucinations URL: https://spice.ai/blog/basis-set-ventures-deploys-spice-ai Date: 2025-09-17T17:51:00 Description: Basis Set Ventures uses Spice.ai Enterprise to power natural language searches directly against real-time datasets. TL;DR'} /> Basis Set Ventures needed to search continuously refreshed data on 10,000+ people and companies without the burden of managing embeddings or pipelines. Using Spice\'s data and AI platform, Basis Set investors can now run natural language searches directly against fresh datasets - ultimately delivering accurate, data-grounded insights that help them spot opportunities earlier and act faster.

    ' } />
    Figure 1. Pascal AI Search: "Show me people in our network that used to be at Duolingo."
    ' } /> Situation'} /> Founded in 2017 by Dr. Lan Xuezhao, Basis Set Ventures is a San Francisco-based venture capital firm that targets investments in early-stage technology companies across the United States. Basis Set describes itself as an "AI-native venture fund" because of its strong internal use of AI to identify promising entrepreneurs and enterprises.

    ' } /> AI-driven technology has made it easier than ever for someone with an innovative idea to start a new company; this is great for entrepreneurs, but it makes it harder for venture capitalists to identify early prospects in which to invest.

    ' } /> Basis Set saw this challenge as a data problem and created Pascal, their AI investment application for internal use. Pascal scours the internet looking for innovation, monitoring what\'s happening on GitHub, Reddit, LinkedIn, X, and a number of other sources. It then uses its proprietary algorithms to track more opaque variables like community sentiment about code contributions or areas of traction.

    ' } /> Challenge: Custom Searches Across Continuously Refreshed Data' } /> Monitoring more than 10,000 individuals and companies, and with harvested updates pouring in from social media and other areas of the internet throughout the day, Basis Set needed to keep its data set continuously updated so its team of investors could monitor areas of interests in real time.

    ' } /> "One key challenge we had is that, due to the nature of our business, we need to keep our database extremely fresh," says Rachel Wong, CTO & Partner at Basis Set. "That means pulling in updates to data every single day, both on people and company metrics."

    ' } /> The company first tried building and managing their own vector-based search system, converting words and images into numerical vectors, that could then be matched for similarity.  

    ' } /> Basis Set also sought to make it as easy as possible for the company's investment partners to query its evolving data set, which meant converting natural language to SQL queries.

    " } /> "With our first version of Pascal, our users were giving us multiple inputs on the kinds of people they were looking for," says Muhammad Ammad, Staff Engineer at Basis Set Ventures. "We would manually go in and search for those people and form a pipeline and give those people to the investors. To do this we had to continuously change our code because they were giving us new information every day, and we had to sync with them with a lot of back and forth, with different dimensions and criteria. We wanted to reduce our communication and make things self-serve to give them the independence to search the database however they needed to."

    ' } /> The specificity of the searches - which can involve individual work histories, social media contributions, GitHub postings, momentum, community sentiment and a variety of other factors - would be a significant operational lift using traditional search tooling.

    ' } /> Solution: Basis Set Adopts Spice.ai Enterprise, Purpose-Built to Help Enterprises Ground AI in Data' } /> To solve these challenges, Basis Set adopted Spice.ai Enterprise, an open source and cloud-deployable runtime that unifies query federationaccelerationhybrid search, and LLM inference in one system.

    ' } /> Spice automatically runs multiple forms of queries against the Basis Set data - including schema and semantic interrogation, data sampling, and evaluation - and then converts the natural language searches to precise SQL queries, delivering the most accurate answer to return to the user.

    ' } /> The Basis Set data remains on the company's dedicated cloud-based infrastructure and communicates with the Spice Compute Engine managed in Spice Cloud. With the Spice Platform, Basis Set can continually add to its data stores without managing embeddings manually or requiring other pre-search preparations.

    " } />
    Figure 2: . Basis Set Pascal AI app and Spice Cloud Architecture.
    ' } /> Benefits'} /> Enabling Natural Language Queries Without Managing Embeddings' } /> Basis Set needed to use natural language queries to make it easier for its investors to search precisely for the characteristics they sought. But, as noted earlier, they found managing the embedding process of converting human language to numerical representations too time consuming and expensive to keep up with perpetually changing data stores. "Our data is continuously being updated, which means it is always changing," Ammad says. "With embedding, if even one character is changed, that whole embedding is out of date, and we have to make a new embedding, which is also pretty expensive because we have more than 100,000 people in our database."

    ' } /> With just a few lines of configuration code, Basis Set was able to do away with managing embeddings and instead use the Spice Cloud Platform to convert natural language queries to SQL, enabling always-fresh searches across Basis Set\'s data. Ammad shared, "With Spice AI, we no longer have to keep updating embeddings to enable natural language queries. Spice takes care of all of that, which is awesome."

    ' } /> Eliminating embedding management has saved significant time for the company.

    ' } /> Behind the scenes, Spice goes beyond transforming natural language into SQL queries; it also tests multiple queries to find the one that generates the most precise results.

    ' } /> Eliminated Hallucinations'} /> AI is famously prone to hallucinations, in which it authoritatively delivers false information. Spice mitigates hallucinations by grounding its AI with the actual data of Basis Set, and using SQL queries, search, and LLM tools as inputs to AI prompts."We saw a lot of hallucinations when we were using the manual embedding approach," says Wong. "One problem with our embedded data was that it didn\'t understand the true sentiment. If we asked it to find people who worked at Dropbox in 2017, it could hallucinate and return people who actually worked at Box. False returns like that are counter-productive and lessen confidence in our tool.

    ' } /> Hallucinations were eliminated after deploying Spice.ai. "We like the way Spice AI has approached this problem set," Wong says. "Spice AI grounds AI in our actual data, using SQL queries across all our data, which brings accuracy to probabilistic AI systems, which are very prone to hallucinations."

    ' } /> Ease of Use & Deployment' } /> "One of the great things about Spice is that it was truly plug and play," Wong says. "We jumped on a call with the Spice team, set up the configuration files with a couple lines of setup code, and were able to integrate it into our system pretty much immediately. Our whole business team was impressed. We told them we were bringing in a new search engine for our Pascal application, and two days later everyone was using it."

    ' } /> The ability of Spice AI to support natural language searches has proven to be popular throughout the company, including with its investment team. "Spice takes a huge lift off our investment team," Wong continues. "Previously, our investors had to configure very granular filters and settings for the algorithms on our platform. Now they can do search using regular English sentiment, which is a lot more natural for our users. They\'re investors, they\'re more business minded, so it makes sense for them to be able to just type in some heuristics of groups of people or companies that they want to be tracking, for example pre-seed companies working on MCP, who were founded in 2017-just whatever combinations they want to search for. It\'s a lot more natural for their workflow than having to go in and think about every tiny setting."

    ' } /> Observability'} /> Basis Set values the observability Spice provides into how its AI-powered SQL queries are processing"Spice AI gives us observability, with which we can actually see what is happening under the hood, and if something is not as we expect it to be, we can see where we need to change the prompt and so on," says Ammad.

    ' } /> Spice\'s observability capabilities stand in contrast to the opaqueness of other AI platform solutions.

    ' } /> Conclusion'} /> With Spice, Basis Set transformed the way its investors interact with data. The platform removes the burden of managing embeddings, reduces hallucinations, and makes natural language search both accurate and real-time. This leads to faster insights, greater confidence, and a competitive edge in spotting the next generation of high-growth startups.

    ' } /> Getting Started with Spice'} /> Interested in giving Spice a try? Check out the following resources:

    ' } />
  • Sign up for Spice Cloud for free, or get started with Spice Open Source
  • Book a demo
  • Explore the Spice cookbooks and docs
  • ' } />

    '} />

    '} />

    '} /> --- ## Spice AI Announces Contribution of TableProviders for PostgreSQL, MySQL, DuckDB, and SQLite to the Apache DataFusion Project URL: https://spice.ai/blog/contribution-of-tableproviders-to-datafusion Date: 2024-07-04T19:11:00 Description: Spice AI has contributed new TableProviders for PostgreSQL, MySQL, DuckDB, and SQLite to the Apache DataFusion project. Spice AI has contributed new TableProviders for PostgreSQL, MySQL, DuckDB, and SQLite to the Apache DataFusion project. This addition reflects our commitment to building together in the data and AI ecosystem and supporting the open-source community.

    ' } /> What is Apache DataFusion?'} /> Apache DataFusion is a high-performance query engine built on Apache Arrow. It allows you to execute SQL queries quickly and efficiently on data stored in various formats. By using the in-memory columnar format of Apache Arrow, DataFusion speeds up data processing and works natively with other Arrow-based tools.

    ' } /> About the Spice OSS Project'} /> Spice OSS is an open-source project from Spice AI that provides developers with a unified SQL query interface to locally materialize, accelerate, and query datasets from any database, data warehouse, or data lake. Spice OSS incorporates Apache DataFusion as its SQL query engine.

    ' } /> Our goal with Spice OSS is to make data and AI-driven development more accessible. By contributing to projects like DataFusion and Arrow, we can help making accessing and using data better for everyone building in the space.

    ' } /> New TableProviders for DataFusion' } /> We've initially added TableProviders for PostgreSQL, MySQL, DuckDB, and SQLite to DataFusion. This expands the range of data sources you can query using DataFusion. And we plan to add more in the future.

    " } />
  • PostgreSQL: A robust and extensible open-source relational database.
  • MySQL: A reliable and user-friendly open-source relational database.
  • DuckDB: An in-process SQL OLAP database for analytical queries.
  • SQLite: A lightweight, disk-based database commonly used in embedded systems.
  • ' } /> These new TableProviders make DataFusion even more versatile, allowing you to work with your existing databases and data lakes more easily.

    ' } /> Our Commitment to Data and AI'} /> At Spice AI, we believe in the power of open-source and the potential of data and AI. By contributing to Apache DataFusion, we're helping to advance data processing technology and make powerful tools available to developers everywhere.

    " } /> To learn more about Spice AI and our open-source projects, check out our GitHub repository. You can also explore Apache DataFusion at datafusion.apache.org.

    ' } /> Stay tuned for more updates from Spice AI as we continue to contribute to the data and AI ecosystem.

    ' } />

    '} />

    '} /> --- ## Announcing Our Partnership with Databricks! URL: https://spice.ai/blog/databricks-partnership Date: 2025-06-10T19:04:00 Description: Spice partners with Databricks to accelerate operational AI apps with fast SQL queries, Mosaic AI embeddings, and Unity Catalog governance. Today we announced our partnership with Databricks, the leading data and AI platform! We\'re also excited to roll out new integrations that support the Databricks platform, enabling customers to build faster and more reliable apps and agents that extend across cloud, on-premises, and edge.

    ' } /> New capabilities now available to Databricks customers include:

    ' } />
  • Databricks SQL Warehouse and Spark Connect integrations for high-performance SQL queries accelerated with DuckDB and SQLite.
  • Databricks Mosaic AI model serving and embeddings integrations to bring MosaicAI alongside applications.
  • Unity Catalog support for governance and security.
  • Apache Iceberg & Delta Lake support for query and management of open format tables via Unity Catalog.
  • Enterprise-grade security Service Principal M2M & U2M OAuth authentication for enterprise-grade role-based security.
  • ' } />

    '} /> With Spice AI's integrations with Databricks, you can now:

    "} />
  • Query Data For Operational Use-Cases: Execute fast, low-latency SQL queries across Databricks, on-premises, and edge sources with Spice.ai\'s unified engine, enabling real-time applications like inventory tracking or fraud detection.
  • Embed AI With Applications: Integrate Databricks Mosaic AI model serving and embeddings with the Spice engine to deploy AI features, such as low-latency recommendation systems, search, or predictive maintenance.
  • Streamline Data Governance: Manage Apache Iceberg and Delta Lake tables using Unity Catalog, enforcing secure access ensuring compliance and restricted data access.
  • Optimize Workload Performance: Use Spice.ai to cache hot data, replicate high-demand datasets, and load-balance hosted AI endpoints, maintaining speed and resilience for applications like real-time dashboards.
  • ' } />
    The Spice.ai Compute Engine
    ' } /> Get Started Today' } /> Spice AI's integration with Databricks is available now. Explore the following options to suit your needs:

    " } />
  • Spice.ai Open Source: A single-node, open-source SQL query and AI-inference engine for developers.
  • Spice.ai Enterprise: A scalable, multi-node solution for cloud or self-hosted Kubernetes, built for enterprise performance and scale.
  • Spice Cloud Platform: A fully managed, cloud-hosted platform for building and scaling operational AI applications.
  • ' } />

    '} /> To try Spice.ai for yourself, visit: /login

    ' } />

    '} /> --- ## Getting started with Amazon S3 Vectors and Spice URL: https://spice.ai/blog/getting-started-with-amazon-s3-vectors-and-spice Date: 2025-07-31T21:35:21 Description: Learn how Spice AI integrates Amazon S3 Vectors for scalable, cost-effective vector search - combining semantic, full-text, and SQL queries in one runtime. TLDR'} /> The latest Spice.ai release (v1.5.0) brings major improvements to search, including native support for Amazon S3 Vectors. Announced in public preview at AWS Summit New York 2025, Amazon S3 Vectors is a new S3 bucket type purpose-built for vector embeddings, with dedicated APIs for similarity search.

    ' } /> Spice AI was a day 1 launch partner for S3 Vectors, integrating it as a scalable vector index backend. In this post, we explore how S3 Vectors integrates into Spice.ai's data, search, and AI-inference engine, how Spice manages indexing and lifecycle of embeddings for production vector search, and how this unlocks a powerful hybrid search experience. We'll also put this in context with industry trends and compare Spice's approach to other vector database solutions like Qdrant, Weaviate, Pinecone, and Turbopuffer.

    " } /> Amazon S3 Vectors Overview' } />
    Figure 1: Amazon S3 Vectors workflow
    ' } /> Amazon S3 Vectors extends S3 object storage with native support for storing and querying vectors at scale. As AWS describes, it is "designed to provide the same elasticity, scale, and durability as Amazon S3," providing storage of billions of vectors and sub-second similarity queries. Crucially, S3 Vectors dramatically lowers the cost of vector search infrastructure - reducing upload, storage, and query costs by up to 90% compared to traditional solutions. It achieves this by separating storage from compute: vectors reside durably in S3, and queries execute on transient, on-demand resources, avoiding the need for always-on, memory-intensive vector database servers. In practice, S3 Vectors exposes two core operations:

    ' } />
  • Upsert vectors - assign a vector (an array of floats) to a given key (identifier) and optionally store metadata alongside it.
  • Vector similarity query - given a new query vector, efficiently find the stored vectors that are closest (e.g. minimal distance) to it, returning their keys (and scores).
  • ' } /> This transforms S3 into a massively scalable vector index service. You can store embeddings at petabyte scale and perform similarity search with metrics like cosine or Euclidean distance via a simple API. It's ideal for AI use cases like semantic search, recommendations, or Retrieval-Augmented Generation (RAG) where large volumes of embeddings need to be queried semantically. By leveraging S3's pay-for-use storage and ephemeral compute, S3 Vectors can handle infrequent or large-scale queries much more cost-effectively than memory-bound databases, yet still deliver sub-second results.

    " } /> Vector Search with Embeddings' } /> Vector similarity search retrieves data by comparing items in a high-dimensional embedding space rather than by exact keywords. In a typical pipeline:

    ' } />
  • Data to vectors: We first convert each data item (text, image, etc.) into a numeric vector representation (embedding) using an ML model. For example, a customer review text might be turned into a 768-dimensional embedding that encodes its semantic content. Models like Amazon Titan Embeddings, OpenAI, or Hugging Face sentence transformers handle this step.
  • ' } />
  • Index storage: These vectors are stored in a specialized index or database optimized for similarity search. This could be a dedicated vector database or, in our case, Amazon S3 Vectors acting as the index. Each vector is stored with an identifier (e.g. the primary key of the source record) and possibly metadata.
  • ' } />
  • Query by vector: A search query (e.g. a phrase or image) is also converted into an embedding vector. The vector index is then queried to find the closest stored vectors by distance metric (cosine, Euclidean, dot product, etc.). The result is a set of IDs of the most similar items, often with a similarity score.
  • ' } /> This process enables semantic search - results are returned based on meaning and similarity rather than exact text matches. It powers features like finding relevant documents by topic even if exact terms differ, recommendation systems (finding similar user behavior or content), and providing knowledge context to LLMs in RAG. With the Spice.ai Open Source integration, this whole lifecycle (embedding data, indexing vectors, querying) is managed by the Spice runtime and exposed via a familiar SQL or HTTP interface.

    ' } /> Amazon S3 Vectors in Spice.ai' } />
    Figure 2: S3 Vectors and Spice architecture
    ' } /> Spice.ai is an open-source data, search and AI compute engine that supports vector search end-to-end. By integrating S3 Vectors as an index, Spice can embed data, store embeddings in S3, and perform similarity queries - all orchestrated through simple configuration and SQL queries. Let's walk through how you enable and use this in Spice.

    " } /> Configuring a Dataset with Embeddings' } /> To use vector search, annotate your dataset schema to specify which column(s) to embed and with which model. Spice supports various embedding models (both local or hosted) via the embeddings section in the configuration. For example, suppose we have a customer reviews table and we want to enable semantic search over the review text (body column):

    ' } /> ```yaml datasets: - from: oracle:"CUSTOMER_REVIEWS" name: reviews columns: - name: body embeddings: from: bedrock_titan # use an embedding model defined below embeddings: - from: bedrock:amazon.titan-embed-text-v2:0 name: bedrock_titan params: aws_region: us-east-2 dimensions: '256' ``` In this spicepod.yaml, we defined an embedding model bedrock_titan (in this case AWS\'s Titan text embedding model) and attached it to the body column. When the Spice runtime ingests the dataset, it will automatically generate a vector embedding for each row\'s body text using that model. By default, Spice can either store these vectors in its acceleration layer or compute them on the fly. However, with S3 Vectors, we can offload them to an S3 Vectors index for scalable storage.

    ' } /> To use S3 Vectors, we simply enable the vector engine in the dataset config:

    ' } /> ```yaml datasets: - from: oracle:"CUSTOMER_REVIEWS" name: reviews vectors: enabled: true engine: s3_vectors params: s3_vectors_bucket: my-s3-vector-bucket #... (rest of dataset definition as above) ``` This tells Spice to create or use an S3 Vectors index (in the specified S3 bucket) for storing the body embeddings. Spice manages the entire index lifecycle: it creates the vector index, handles inserting each vector with its primary key into S3, and knows how to query it. The embedding model and data source are as before - the only change is where the vectors are stored and queried. The benefit is that now our vectors reside in S3's highly scalable storage, and we can leverage S3 Vectors' efficient similarity search API.

    " } /> Performing a Vector Search Query' } /> Once configured, performing a semantic search is straightforward. Spice exposes both an HTTP endpoint and a SQL table-valued function for vector search. For example, using the HTTP API:

    ' } /> ```bash curl -X POST http://localhost:8090/v1/search \ -H "Content-Type: application/json" \ -d '{ "datasets": ["reviews"], "text": "issues with same day shipping", "additional_columns": ["rating", "customer_id"], "where": "created_at >= now() - INTERVAL '7 days'", "limit": 2 }' ``` This JSON query says: search the reviews dataset for items similar to the text "issues with same day shipping", and return the top 2 results, including their rating and customer id, filtered to reviews from the last 7 days. The Spice engine will embed the query text (using the same model as the index), perform a similarity lookup in the S3 Vectors index, filter by the WHERE clause, and return the results. A sample response might look like:

    ' } /> ```json { "results": [ { "matches": { "body": "Everything on the site made it seem like I'd get it the same day. Still waiting the next morning was a letdown." }, "data": { "rating": 3, "customer_id": 6482 }, "primary_key": { "review_id": 123 }, "score": 0.82, "dataset": "reviews" }, { "matches": { "body": "It was marked as arriving 'today' when I paid, but the delivery was pushed back without any explanation. Timing was kind of important for me." }, "data": { "rating": 2, "customer_id": 3310 }, "primary_key": { "review_id": 24 }, "score": 0.76, "dataset": "reviews" } ], "duration_ms": 86 } ``` Each result includes the matching column snippet (body), the additional requested fields, the primary key, and a relevance score. In this case, the two reviews shown are indeed complaints about "same day" delivery issues, which the vector search found based on semantic similarity to the query (see how the second result made no mention of "same day" delivery, but rather described a similar issue as the first ).

    ' } /> Developers can also use SQL for the same operation. Spice provides a table function vector_search(dataset, query) that can be used in the FROM clause of a SQL query. For example, the above search could be expressed as:

    ' } /> ```sql SELECT review_id, rating, customer_id, body, score FROM vector_search(reviews, 'issues with same day shipping') WHERE created_at >= to_unixtime(now() - INTERVAL '7 days') ORDER BY score DESC LIMIT 2; ``` This would yield a result set (with columns like review_idscore, etc.) similar to the JSON above, which you can join or filter just like any other SQL table. This ability to treat vector search results as a subquery/table and combine them with standard SQL filtering is a powerful feature of Spice.ai's integration - few other solutions let you natively mix vector similarity and relational queries so seamlessly.

    " } /> See a 2-min demo of it in action:

    '} /> Managing Embeddings Storage in Spice.ai' } /> An important design question for any vector search system is where and how to store the embedding vectors. Before introducing S3 Vectors, Spice offered two approaches for managing vectors:

    ' } />
  • Accelerator storage: Embed the data in advance and store the vectors alongside other cached data in a Data Accelerator (Spice\'s high-performance materialization layer). This keeps vectors readily accessible in memory or fast storage.
  • Just-in-time computation: Compute the necessary vectors on the fly during a query, rather than storing them persistently. For example, at query time, embed only the subset of rows that satisfy recent filters (e.g. all reviews in the last 7 days) and compare those to the query vector.
  • ' } /> Both approaches have trade-offs. Pre-storing in an accelerator provides fast query responses but may not be feasible for very large datasets (which might not fit entirely, or fit affordably in fast storage) and accelerators, like DuckDB or SQLite aren't optimized for similarity search algorithms on billion-scale vectors. Just-in-time embedding avoids extra storage but becomes prohibitively slow when computing embeddings over large data scans (and for each query), and provides no efficient algorithm for efficiently finding similar neighbours.

    " } /> Amazon S3 Vectors offers a compelling third option: the scalability of S3 with the efficient retrieval of vector index data structures. By configuring the dataset with engine: s3_vectors as shown earlier, Spice will offload the vector storage and similarity computations to S3 Vectors. This means you can handle very large embedding sets (millions or billions of items) without worrying about Spice's memory or local disk limits, and still get fast similarity operations via S3's API. In practice, when Spice ingests data, it will embed each row's body and PUT it into the S3 Vector index (with the review_id as the key, and possibly some metadata). At query time, Spice calls S3 Vectors' query API to retrieve the nearest neighbors for the embedded query. All of this is abstracted away; you simply query Spice and it orchestrates these steps.

    " } /> The Spice runtime manages index creation, updates, and deletion. For instance, if new data comes in or old data is removed, Spice will synchronize those changes to the S3 vector index. Developers don't need to directly interact with S3 - it's configured once in YAML. This tight integration accelerates application development: your app can treat Spice like any other database, while behind the scenes Spice leverages S3's elasticity for the heavy lifting.

    " } /> Vector Index Usage in Query Execution' } /> How does a vector index actually get used in Spice's SQL query planner? To illustrate, consider the simplified SQL we used:

    " } /> ```sql SELECT * FROM vector_search(reviews, 'issues with same day shipping') ORDER BY score DESC LIMIT 5; ``` Logically, without a vector index, Spice would have to do the following at query time:

    ' } />
  • Embed the query text \'issues with same day shipping\' into a vector v.
  • Retrieve or compute all candidate vectors for the searchable column (here every body embedding in the dataset). This could mean scanning every row or at least every row matching other filter predicate.
  • Calculate distances between the query vector v and each candidate vector, compute a similarity score (e.g. score = 1 - distance).
  • Sort all candidates by the score and take the top 5.
  • ' } /> For large datasets, steps 2-4 would be extremely expensive (a brute-force scan through potentially millions of vectors for each search, then a full sort operation). A vector index avoiding unnecessary recomputation of embeddings, reduces the number of distance calculations required, and provides in-order candidate neighbors.

    ' } /> With S3 Vectors, step 2 and 3 are pushed down to the S3 service. The vector index can directly return the top K closest matches to v. Conceptually, S3 Vectors gives back an ordered list of primary keys with their similarity scores. For example, it might return something like: {(review_id=123, score=0.82), (review_id=24, score=0.76), ...} up to K results.

    ' } /> Spice then uses these results, logically as a temporary table (let's call it vector_query_results), joined with the main reviews table to get the full records. In SQL pseudocode, Spice does something akin to:

    " } /> ```sql -- The vector index returns the closest matches for a given query. CREATE TEMP TABLE vector_query_results ( review_id BIGINT, score FLOAT ); ``` Imagine this temp table is populated by an efficient vector retrieval operatin in S3 Vectors for the query.

    ' } /> ```sql -- Now we join to retrieve full details SELECT r.review_id, r.rating, r.customer_id, r.body, v.score FROM vector_query_results v JOIN reviews r ON r.review_id = v.review_id ORDER BY v.score DESC LIMIT 5; ``` This way, only the top few results (say 50 or 100 candidates) are processed in the database, rather than the entire dataset. The heavy work of narrowing down candidates occurs inside the vector index. Spice essentially treats vector_search(dataset, query) as a table-valued function that produces (id, score) pairs which are then joinable.

    ' } /> Handling Filters Efficiently' } /> One consideration when using an external vector index is how to handle additional filter conditions (the WHERE clause). In our example, we had a filter created_at >= now() - 7 days. If we simply retrieve the top K results from the vector search and then apply the time filter, we might run into an issue: those top K might not include any recent items, even if there are relevant recent items slightly further down the similarity ranking. This is because S3 Vectors (like most ANN indexes) will return the top K most similar vectors globally, unaware of our date constraint.

    ' } /> If only a small fraction of the data meets the filter, a naive approach could drop most of the top results, leaving fewer than the desired number of final results. For example, imagine the vector index returns 100 nearest reviews overall, but only 5% of all reviews are from the last week - we'd expect only ~5 of those 100 to be recent, possibly fewer than the LIMIT. The query could end up with too few results not because they don't exist, but because the index wasn't filter-aware and we truncated the candidate list.

    " } /> To solve this, S3 Vectors supports metadata filtering at query time. We can store certain fields as metadata with each vector and have the similarity search constrained to vectors where the metadata meets criteria. Spice.ai leverages this by allowing you to mark some dataset columns as "vector filterable". In our YAML, we could do:

    ' } /> ```yaml columns: - name: created_at metadata: vectors: filterable ``` By doing this, Spice's query planner will include the created_at value with each vector it upserts to S3, and it will push down the time filter into the S3 Vectors query. Under the hood, the S3 vector query will then return only nearest neighbors that also satisfy created_at >= now()-7d. This greatly improves both efficiency and result relevance. The query execution would conceptually become:

    " } /> ```sql -- Vector query with filter returns a temp table including the metadata CREATE TEMP TABLE vector_query_results ( review_id BIGINT, score FLOAT, created_at TIMESTAMP ); -- vector_query_results is already filtered to last 7 days SELECT r.review_id, r.rating, r.customer_id, r.body, v.score FROM vector_query_results v JOIN reviews r ON r.review_id = v.review_id -- (no need for additional created_at filter here, it's pre-filtered) ORDER BY v.score DESC LIMIT 5; ``` Now the index itself is ensuring all similar reviews are from the last week, and so if there are at least five results from the last week, it will return a full result (i.e. respecting LIMIT 5).

    ' } /> Including Data to Avoid Joins' } /> Another optimization Spice supports is storing additional, non-filterable columns in the vector index to entirely avoid the expensive table join back to the main table for certain queries. For example, we might mark ratingcustomer_id, or even the text body as non-filterable vector metadata. This means these fields are stored with the vector in S3, but not used for filtering (just for retrieval). In the Spice config, it would look like:

    ' } /> ```yaml columns: - name: rating metadata: vectors: non-filterable - name: customer_id metadata: vectors: non-filterable - name: body metadata: vectors: non-filterable ``` With this setup, when Spice queries S3 Vectors, the vector index will return not only each match's review_id and score, but also the stored ratingcustomer_id, and body values. Thus, the temporary vector_query_results table already has all the information needed to satisfy the query. We don't even need to join against the reviews table unless we want some column that wasn't stored. The query can be answered entirely from the index data:

    " } /> ```sql SELECT review_id, rating, customer_id, body, score FROM vector_query_results ORDER BY score DESC LIMIT 5; ``` This is particularly useful for read-heavy query workloads where hitting the main database adds latency. By storing the most commonly needed fields along with the vector, Spice's vector search behaves like an index-only query (similar to covering indexes in relational databases). You trade a bit of extra storage in S3 (duplicating some fields, but still managed by Spice) for faster queries that bypass the heavier join.

    " } /> This extends to WHERE conditions on non-filterable columns, or filter predicate unsupported by S3 vectors. Spice's execution engine can apply these filters, still avoiding any expensive JOIN on the underlying table.

    " } /> ```sql SELECT review_id, rating, customer_id, body, score FROM vector_query_results where rating > 3 -- Filter performed in Spice on, with non-filterable data from vector index ORDER BY score DESC LIMIT 5; ``` t's worth noting that you should choose carefully which fields to mark as metadata - too many or very large fields could increase index storage and query payload sizes. Spice gives you the flexibility to include just what you need for filtering and projection to optimize each use case.

    " } /> Beyond Basic Vector Search in Spice' } /> Many real-world search applications go beyond a single-vector similarity lookup. Spice.ai's strength is that it's a full database engine. You can compose more complex search workflows, including hybrid search (combining keyword/text search with vector search), multi-vector queries, re-ranking strategies, and more. Spice provides both an out-of-the-box hybrid search API and the ability to write custom SQL to implement advanced retrieval logic.

    " } />
  • Multiple vector fields or multi-modal search: You might have vectors for different aspects of data (e.g. an e-commerce product could have embeddings for both its description and the product\'s image. Or a document has both a title and body that should be searchable individually and together) that you may want to search across and combine results. Spice lets you do vector search on multiple columns easily, and you can weight the importance of each. For instance, you might boost matches in the title higher than matches in the body.
  • ' } />
  • Vector and full-text search: Similar to vector search, columns can have text indexes defined that enable full-text BM25 search. Text search can then be performed in SQL with a similar text_search UDTF. The /v1/search HTTP API will perform a hybrid search across both full-text and vector indexes, merging results using Reciprocal Rank Fusion (RRF). This means you get a balanced result set that accounts for direct keyword matches as well as semantic similarity. The example below demonstrates how RRF can be implemented in SQL by combining ranks.
  • ' } />
  • Hybrid vector + keyword search: Sometimes you want to ensure certain keywords are present while also using semantic similarity. Spice supports hybrid search natively - its default /v1/search HTTP API actually performs both full-text BM25 search and vector search, then merges results using Reciprocal Rank Fusion (RRF). This means you get a balanced result set that accounts for direct keyword matches as well as semantic similarity. In Spice\'s SQL, you can also call text_search(dataset, query) for traditional full-text search, and combine it with vector_search results. The example below demonstrates how RRF can be implemented in SQL by combining ranks.
  • ' } />
  • Two-phase retrieval (re-ranking): A common pattern is to use a fast first-pass retrieval (e.g. a keyword search) to get a larger candidate set, then apply a more expensive or precise ranking (e.g. vector search) on this subset to improve the score of the required final candidate set. With Spice, you can orchestrate this in SQL or in application code. For example, you could query a BM25 index for 100 candidates, then perform a vector search amongst this candidate set(i.e. restricted to those IDs) for a second phase. Since Spice supports standard SQL constructs, you can express these multi-step plans with common table expressions (CTEs) and joins.
  • ' } /> To illustrate hybrid search, here's a SQL snippet that uses the Reciprocal Rank Fusion (RRF) technique to merge vector and text search results for the same query (RRF is used, when needed, in the v1/search HTTP API):

    " } /> ```sql WITH vector_results AS ( SELECT review_id, RANK() OVER (ORDER BY score DESC) AS vector_rank FROM vector_search(reviews, 'issues with same day shipping') ), text_results AS ( SELECT review_id, RANK() OVER (ORDER BY score DESC) AS text_rank FROM text_search(reviews, 'issues with same day shipping') ) SELECT COALESCE(v.review_id, t.review_id) AS review_id, -- RRF scoring: 1/(60+rank) from each source (1.0 / (60 + COALESCE(v.vector_rank, 1000)) + 1.0 / (60 + COALESCE(t.text_rank, 1000))) AS fused_score FROM vector_results v FULL OUTER JOIN text_results t ON v.review_id = t.review_id ORDER BY fused_score DESC LIMIT 50; ``` This takes the vector similarity results and text (BM25) results, assigns each a rank based not on the score, but rather the relative order of candidates, and combines these ranks for an overall order. Spice's primary key SQL semantics easily enables this document ID join.

    " } /> For a multi-column vector search example, suppose our reviews dataset has both a title and body with embeddings, and we want to prioritize title matches higher. We could create a combined_score where the title is weighted twice as high as the body:

    ' } /> ```sql WITH body_results AS ( SELECT review_id, score AS body_score FROM vector_search(reviews, 'issues with same day shipping', col => 'body') ), title_results AS ( SELECT review_id, score AS title_score FROM vector_search(reviews, 'issues with same day shipping', col => 'title') ) SELECT COALESCE(body.review_id, title.review_id) AS review_id, COALESCE(body_score, 0) + 2.0 * COALESCE(title_score, 0) AS combined_score FROM body_results FULL OUTER JOIN title_results ON body_results.review_id = title_results.review_id ORDER BY combined_score DESC LIMIT 5; ``` These examples scratch the surface of what you can do by leveraging Spice's SQL-based composition. The key point is that Spice isn't just a vector database - it's a hybrid engine that lets you combine vector search with other query logic (text search, filters, joins, aggregations, etc.) all in one place. This can significantly simplify building complex search and AI-driven applications.

    " } /> (Note: Like most vector search systems, S3 Vectors uses an approximate nearest neighbor (ANN) algorithm under the hood for performance. This yields fast results that are probabilistically the closest, which is usually an acceptable trade-off in practice. Additionally, in our examples we focused on one embedding per row; production systems may use techniques like chunking text into multiple embeddings or adding external context, but the principles above remain the same.)

    ' } /> Industry Context and Comparisons' } /> The rise of vector databases over the past few years (Pinecone, Qdrant, Weaviate, etc.) has been driven by the need to serve AI applications with semantic search at scale. Each solution takes a slightly different approach in architecture and trade-offs. Spice.ai's integration with Amazon S3 Vectors represents a newer trend in this space: decoupling storage from compute for vector search, analogous to how data warehouses separated compute and storage in the past. Let's compare this approach with some existing solutions:

    " } />
  • Traditional Vector Databases (Qdrant, Weaviate, Pinecone): These systems typically run as dedicated services or clusters that handle both the storage of vectors (on disk or in-memory) and the computation of similarity search. For example, Qdrant (an open-source engine in Rust) allows either in-memory storage or on-disk storage (using RocksDB) for vectors and payloads. It\'s optimized for high performance and offers features like filtering, quantization, and distributed clustering, but you generally need to provision servers/instances that will host all your data and indexes. Weaviate, another popular open-source vector DB, uses a Log-Structured Merge (LSM) tree based storage engine that persists data to disk and keeps indexes in memory. Weaviate supports hybrid search (it can combine keyword and vector queries) and offers a GraphQL API, with a managed cloud option priced mainly by data volume. Pinecone, a fully managed SaaS, also requires you to select a service tier or pod which has certain memory/CPU allocated for your index - essentially your data lives in Pinecone\'s infrastructure, not in your AWS account. These solutions excel at low-latency search for high query throughput scenarios (since data is readily available in RAM or local SSD), but the cost can be high for large datasets. You pay for a lot of infrastructure to be running, even during idle times. In fact, prior to S3 Vectors, vector search engines often stored data in memory at ~$2/GB and needed multiple replicas on SSD, which is "the most expensive way to store data", as Simon Eskildsen (Turbopuffer\'s founder) noted. Some databases mitigate cost by compressing or offloading to disk, but still, maintaining say 100 million embeddings might require a sizable cluster of VMs or a costly cloud plan.
  • ' } />
  • Spice.ai with Amazon S3 Vectors: This approach flips the script by storing vectors in cheap, durable object storage (S3) and loading/indexing them on demand. As discussed, S3 Vectors keeps the entire vector dataset in S3 at ~$0.02/GB storage , and only spins up transient compute (managed by AWS) to serve queries, meaning you aren\'t paying for idle GPU or RAM time. AWS states this design can cut total costs by up to 90% while still giving sub-second performance on billions of vectors. It\'s essentially a serverless vector search model - you don\'t manage servers or even dedicated indices; you just use the API. Spice.ai\'s integration means developers get this cost-efficiency without having to rebuild their application: they can use standard SQL and Spice will push down operations to S3 Vectors as appropriate. This decoupled storage/compute model is ideal for use cases where the data is huge but query volumes are moderate or bursty (e.g., an enterprise semantic search that is used a few times an hour, or a nightly ML batch job). It avoids the "monolithic database" scenario of having a large cluster running 24/7. However, one should note that if you need extremely high QPS (thousands of queries per second at ultra-low latency), a purely object-storage-based solution might not outperform a tuned in-memory vector DB - AWS positions S3 Vectors as complementary to higher-QPS solutions like OpenSearch for real-time needs.
  • ' } />
  • Turbopuffer: Turbopuffer is a startup that, much like Spice with S3 Vectors, is built from first principles on object storage. It provides "serverless vector and full-text search... fast, 10× cheaper, and extremely scalable," by leveraging S3 or similar object stores with smart caching. The philosophy is the same: use the durability and low cost of object storage for the bulk of data, and layer a cache (memory/SSD) in front for performance-critical portions. According to Turbopuffer\'s founder, moving from memory/SSD-centric architectures to an object storage core can yield 100× cost savings for cold data and 6-20× for warm data, without sacrificing too much performance. Turbopuffer\'s engine indexes data incrementally on S3 and uses caching to achieve similar latency to conventional search engines on hot data. The key difference is that Turbopuffer is a standalone search service (with its own API), whereas Spice uses AWS\'s S3 Vectors service as the backend. Both approaches validate the industry trend toward disaggregated storage for search. Essentially, they are bringing the cloud data warehouse economics to vector search: store everything cheaply, compute on demand.
  • ' } /> In summary, Spice.ai's integration with S3 Vectors and similar efforts indicate a shift in vector search towards cost-efficient, scalable architectures that separate the concerns of storing massive vector sets and serving queries. Developers now have options: if you need blazing fast, real time vector search with constant high traffic, dedicated compute infrastructure might be justified. But for many applications - enterprise search, AI assistants with a lot of knowledge but lower QPS, periodic analytics over embeddings - offloading to something like S3 Vectors can save enormously on cost while still delivering sub-second performance at huge scale. And with Spice.ai, you get the best of both worlds: the ease of a unified SQL engine that can do keyword + vector hybrid search on structured data, combined with the power of a cloud-native vector store. It simplifies your stack (no separate vector DB service to manage) and accelerates development since you can join and filter vector search results with your data immediately in one query.

    " } /> References:

    '} /> Weaviate storage architecture discussion

    ' } /> Spice.ai announcement"Spice.ai Now Supports Amazon S3 Vectors For Vector Search at Petabyte Scale!"

    ' } /> Spice.ai Amazon S3 Vectors documentation

    ' } /> Spice.ai Amazon S3 Vectors Cookbook Recipe Sample

    ' } /> Amazon S3 Vectors official page

    ' } /> Pinecone Database Architecture (managed vector database)

    ' } /> Qdrant documentation (storage modes and features)

    ' } /> Turbopuffer blog by Simon Eskildsen (cost of search on object storage)

    ' } />

    '} /> --- ## How we use Apache DataFusion at Spice AI URL: https://spice.ai/blog/how-we-use-apache-datafusion-at-spice-ai Date: 2026-01-15T19:31:56 Description: A technical overview of how Spice extends Apache DataFusion with custom table providers, optimizer rules, and UDFs to power federated SQL, search, and AI inference. Introducing \'Engineering at Spice AI\'' } /> 'Engineering at Spice AI' is a technical blog series that breaks down the systems and abstractions behind Spice's data and AI platform.

    " } /> We\'ll explain why we chose specific open-source technologies, how we\'ve extended them, and what we\'ve learned building a SQL-first platform for federated query and acceleration, search, and embedded LLM inference.

    ' } /> The goal of this series is to share concrete engineering patterns that teams building data and AI infrastructure can apply in their own systems, while also unfolding how Spice is designed so users understand and can trust the foundations they're relying on. Familiarity with SQL engines, Arrow, or Rust will help.

    " } /> This article kicks off the series by diving into Apache DataFusion, the query engine at the core of Spice.

    ' } /> Future posts will cover:

    '} />
  • Rust at Spice AI - Our systems programming foundation
  • Apache Arrow at Spice AI- Arrow as our core in-memory data format
  • DuckDB at Spice AI - Embedded analytics acceleration
  • Apache Iceberg at Spice AI - Open table format and SQL-based ingestion
  • Vortex at Spice AI - Columnar compression for Cayenne, our premier data accelerator
  • ' } /> Spice.ai Compute Engine
    Figure 1: The Spice architecture, built on open-source
    ' } /> What is Apache DataFusion?' } /> Apache DataFusion is a fast, extensible query engine written in Rust. It provides SQL and DataFrame APIs, a query planner, a cost-based optimizer, and a multi-threaded execution engine, all built on Apache Arrow.

    ' } /> DataFusion provides the complete query execution pipeline:

    '} /> SQL → Parsed SQL (*AST) → Logical Plan → Optimizer → Physical Plan → Execution → Arrow Results

    ' } /> *Abstract Syntax Tree

    ' } /> DataFusion provides extension points across planning and execution, which we use to add custom table providers (20+ sources), optimizer rules (federation and acceleration pushdowns), and UDFs (AI inference, vector search, and text search).

    ' } /> Each stage is extensible:

    '} />
    StageExtension PointSpice Extensions
    ParserCustom SQL syntax-
    Logical PlanningTableProvider, ScalarUDF, TableFunction20+ data connectors
    OptimizationOptimizerRule, AnalyzerRuleFederation analyzer
    Physical PlanningExtensionPlannerDuckDB aggregate pushdowns
    ExecutionExecutionPlanSchema casting, managed streams, fallback execution
    ' } /> Why DataFusion at Spice' } /> The core technical challenge we were looking to solve was executing one logical query across many fundamentally different systems: operational databases, data warehouses, object stores, streams, APIs, and more - while still making that query fast, composable, and extensible enough to evolve with rapidly changing data and AI workloads.

    ' } /> After evaluating several engines, DataFusion was the one that met those requirements without forcing architectural compromises:

    ' } />
  • Native Rust and Arrow: DataFusion is written in Rust and uses Arrow as its native memory format, matching our architecture without foreign function interface (FFI) overhead, runtime boundary crossings, or data format conversions.
  • Extensibility: Every component can be replaced or extended. We can add custom data sources, optimizer rules, and execution plans without forking the core engine.
  • Active community: DataFusion has an active community with regular releases. We contribute upstream when our extensions benefit the broader ecosystem.
  • Performance: DataFusion\'s execution engine uses:
    • Vectorized processing with Arrow arrays
    • Push-based execution for streaming
    • Partition-aware parallelism that scales with CPU cores
    • Predicate and projection pushdown to minimize data movement
  • ' } /> How we use DataFusion' } /> We treat DataFusion as a programmable query compiler and runtime.

    ' } /> At a high level, DataFusion gives us:

    '} />
  • A full SQL -> logical -> physical execution pipeline
  • A cost-based optimizer we can extend and rewrite
  • Stable extension points at every stage of planning and execution
  • Arrow-native, vectorized execution that works equally well for analytics and streaming results
  • ' } /> The unique qualities around our DataFusion implementation includes:

    ' } />
  • Deciding where a query should execute (source vs. local accelerator)
  • Deciding when cached data is valid, stale, or needs fallback
  • Injecting AI inference and search functions directly into SQL
  • Coordinating execution across local, remote, and hybrid plans
  • ' } /> DataFusion is one of the few engines where these decisions can be expressed inside the planner and execution engine itself, rather than bolted on externally.

    ' } /> What DataFusion delivers for Spice' } /> DataFusion enables several components that define Spice today:

    ' } />
  • SQL federation: We can push computation down to source systems or pull it into local accelerators
  • Pluggable acceleration: Spice accelerates datasets by materializing them in local compute engines, providing applications with high-performance, low-latency queries and dynamic compute flexibility beyond static materialization.  
    • Spice supports multiple acceleration engines as first-class execution targets: ApacheDataFusion + Apache Arrow, SQLite, Spice Cayenne, and DuckDB, with options for in-memory or on-disk storage. Accelerations are implemented as a standard DataFusion TableProvider that manages two underlying table providers: a federated table provider (pointing to the source system) and an acceleration engine table provider (the local materialized copy). This architecture enables accelerations to integrate with DataFusion\'s query planning and execution; Spice manages refresh by executing special DataFusion queries on the federated table and inserting results into the accelerated table. Most user queries are served directly from the accelerated table, with automatic fallbacks to the federated table under specific conditions (such as cache misses or data freshness requirements). 
  • ' } /> ```rust pub struct AcceleratedTable { dataset_name: TableReference, accelerator: Arc, // Local cache (DuckDB, SQLite, Arrow) federated: Arc, // Source data zero_results_action: ZeroResultsAction, // Fallback behavior refresh_mode: RefreshMode, // Full, Append, Changes } ```
  • Search and AI as query operators: Vector search, text search, and LLM calls are modeled as UDFs and table functions.
  • Resilient, production-grade execution: Deferred connections, fallback execution, schema casting, and cache invalidation all live inside the engine, not the application layer.
  • Incremental improvements: As DataFusion adds new optimizer capabilities, execution primitives, and APIs, we can adopt them incrementally while still shipping Spice-specific features on our own cadence
  • ' } />
    Figure 2: Spice Cayenne integration with DataFusion
    ' } /> With that context, let's zoom in to some of the specifics of our implementation.

    " } /> SessionState Configuration' } /> DataFusion\'s SessionState holds all configuration for query execution.

    ' } /> Key configuration choices:

    ' } />
  • PostgreSQL Dialect: We use PostgreSQL syntax to provide a widely supported SQL dialect with consistent, well-understood semantics. 
  • Case-Sensitive Identifiers: Disabled normalization preserves column case from source systems. While we use the PostgreSQL dialect for syntax, we differ from PostgreSQL\'s behavior of normalizing identifiers to lower-case. 
  • Custom Analyzer Rules: Our federation analyzer runs before DataFusion\'s default rules to ensure we produce valid federated plans. Some default optimizer rules assume a single execution engine and can generate invalid plans for federation, so we intercept early and then selectively apply DataFusion optimizations such as predicate and column pushdown. 
  • ' } /> Custom TableProvider Implementations' } /> TableProvider is the interface between DataFusion and data sources. We implement it for every connector, but they fall into two distinct categories based on execution model:

    ' } /> SQL-Federated Sources: For these sources (e.g. PostgreSQL, MySQL, DuckDb, and Snowflake), the TableProvider acts primarily as a marker for the federation analyzer to discover. The actual execution doesn\'t follow DataFusion\'s normal path - instead, the federation analyzer identifies these tables and replaces them with a simple execution plan that defers computation to the remote source. 

    ' } /> Take this query as an example:  

    '} /> ```sql SELECT count(*), course FROM duckdb_table GROUP BY course; ``` This query is sent almost unchanged to DuckDB, with DataFusion doing minimal work in the middle. 

    ' } /> For single-source queries, Spice can often push the SQL down nearly unchanged. When a query spans multiple sources (e.g., JOIN/UNION across tables from different systems), Spice splits the work: it pushes per-source subqueries down, then lets DataFusion combine the results locally (see the SQL Federation section below for details). 

    ' } /> Non-Federated Sources: For data lake tables and streaming sources where data is stored in formats like Parquet or Vortex files, all execution happens within DataFusion. Here, the TableProvider implementation is critical; DataFusion directly uses the scan() method to create execution plans, and proper implementation of filter pushdown, projection, and other capabilities directly impacts query performance. 

    ' } /> Accelerated dataset architecture  ' } /> When acceleration is enabled for a dataset, we use a layered TableProvider architecture: 

    ' } /> ┌─────────────────────────────────────────────────────────┐\n│ AcceleratedTable │\n│ Wraps federated source with local cache │\n│ Handles refresh, fallback, zero-results policies │\n├─────────────────────────────────────────────────────────┤\n│ Accelerator TableProvider │\n│ DuckDB, SQLite, Arrow, Cayenne, PostgreSQL │\n├─────────────────────────────────────────────────────────┤\n│ FederatedTable │\n│ Supports immediate or deferred connection │\n│ Enables SQL pushdown to source │\n├─────────────────────────────────────────────────────────┤\n│ Connector TableProvider │\n│ PostgreSQL, Snowflake, S3, DuckDB, etc. │\n└─────────────────────────────────────────────────────────┘' } /> For non-accelerated datasets, the architecture is simpler; we register the federated TableProvider directly in DataFusion, without the AcceleratedTable layer or accelerator engine. 

    ' } /> AcceleratedTable' } /> ```rust pub struct AcceleratedTable { dataset_name: TableReference, accelerator: Arc, // Local cache (DuckDB, SQLite, Arrow) federated: Arc, // Source data zero_results_action: ZeroResultsAction, // Fallback behavior refresh_mode: RefreshMode, // Full, Append, Changes } ``` AcceleratedTable provides:

    '} />
  • Local query execution against the accelerator
  • Background refresh from the federated source
  • Fallback to source when local returns zero results (configurable)
  • ' } /> FederatedTable'} /> ```rust pub enum FederatedTable { // TableProvider available immediately Immediate(Arc), // Retries connection in background, serves stale data from checkpoint Deferred(DeferredTableProvider), } ``` Deferred mode enables resilient startup. If a source is temporarily unavailable, Spice starts with cached data and retries in the background.

    ' } /> Data Source Coverage' } /> We implement TableProvider for 20+ sources:

    ' } />
    CategorySources
    DatabasesPostgreSQL, MySQL, SQLite, DuckDB, MongoDB, Oracle, MSSQL, ClickHouse, Turso
    WarehousesSnowflake, Databricks, BigQuery, Redshift
    LakesDelta Lake, Iceberg, S3, Azure Blob, GCS
    StreamingKafka, Debezium, DynamoDB Streams
    APIsGraphQL, HTTP/REST, GitHub, SharePoint
    SpecializedFTP/SFTP, SMB/NFS
    ' } /> SQL Federation'} /> For sources that support SQL (databases, warehouses), we push queries down rather than pulling all data; this means we minimize the work DataFusion does in the middle. The user query is parsed into a LogicalPlan, which the federation analyzer captures and converts (via the DataFusion unparser) into dialect-specific SQL executed directly by the source.  

    ' } /> ```sql -- User query SELECT name, SUM(amount) FROM sales WHERE region = 'NA' AND date > '2024-01-01' GROUP BY name -- What we push to Snowflake (via Arrow Flight SQL) SELECT name, SUM(amount) FROM sales WHERE region = 'NA' AND date > '2024-01-01' GROUP BY name -- Only aggregated results flow over the network ``` Multi-source query splitting ' } /> When a query references multiple federated tables - like a JOIN between Postgres and Snowflake - the federation analyzer rewrites the LogicalPlan into per-source subqueries. Each source executes its portion with filters/projections pushed down, and DataFusion performs the remaining work locally (e.g., join, union, final projection). 

    ' } /> Consider this query:  

    '} /> ```sql SELECT o.order_id, o.order_date, c.name AS customer_name FROM postgres.sales.orders o JOIN snowflake.crm.customers c ON o.customer_id = c.customer_id WHERE o.order_date >= DATE '2025-01-01' AND c.country = 'KR'; ``` The federation analyzer will split this into two queries, one each to Postgres and Snowflake:

    ' } /> Postgres:

    '} /> ```sql SELECT order_id, order_date, customer_id FROM sales.orders WHERE order_date >= DATE '2025-01-01'; ``` Snowflake:

    '} /> ```sql SELECT customer_id, name FROM crm.customers WHERE country = 'KR'; ``` Federation Architecture' } /> We use the datafusion-federation crate to handle query pushdown. At a high level, this enables DataFusion to identify sub-plans in a query that can be executed by an external system (for example, a database or warehouse), push those sub-plans down for remote execution, and then combine the results locally only when necessary. 

    ' } /> This is how Spice can efficiently execute queries that span multiple systems, pushing filters, projections, joins, and aggregates to each source when supported, while handling any cross-source work inside DataFusion. 

    ' } /> Future articles will explore Spice\'s federation architecture in more detail. For readers interested in the underlying framework today, see the datafusion-federation README

    ' } /> Dialect Translation' } /> Different databases have different SQL dialects. As part of the query pipeline, we first parse the user query into a DataFusion LogicalPlan. The federation analyzer then captures that plan and uses the DataFusion unparser - extended with source-specific dialect rules - to convert it back into SQL that can be executed natively by the underlying system. 

    ' } /> We rewrite DataFusion functions into their source-native equivalent: 

    ' } /> ```rust pub fn new_duckdb_dialect() -> Arc { DuckDBDialect::new().with_custom_scalar_overrides(vec![ // cosine_distance → array_cosine_distance (COSINE_DISTANCE_UDF_NAME, Box::new(duckdb::cosine_distance_to_sql)), // rand() → random() ("rand", Box::new(duckdb::rand_to_random)), // regexp_like → regexp_matches (REGEXP_LIKE_NAME, Box::new(duckdb::regexp_like_to_sql)), ]) } ``` Custom Optimizer Rules' } /> DataFusion's optimizer is a pipeline of rules that can rewrite or wrap a logical plan. We extend this pipeline with our own rules for two purposes: (1) semantics-preserving rewrites that produce logically equivalent plans with better execution characteristics, and (2) engine-level behavior that we inject at planning time using the same rule extension point (for example, cache invalidation around DML).

    " } /> Some examples:

    '} /> Cache Invalidation Rule' } /> Cache invalidation is not a performance optimization; it's engine logic needed to keep cached results consistent after data changes. We implement it using DataFusion's optimizer rule interface as an extension point: when the planner encounters a DML statement (INSERT, UPDATE, DELETE), we wrap that DML plan in an extension node that triggers invalidation for the affected table(s) after the statement completes. 

    " } /> ```rust impl OptimizerRule for CacheInvalidationOptimizerRule { fn name(&self) -> &'static str { "cache_invalidation" } fn rewrite( &self, plan: LogicalPlan, _config: &dyn OptimizerConfig, ) -> Result> { plan.transform_down(|plan| match plan { LogicalPlan::Dml(dml) => { // Wrap DML with cache invalidation node let node = CacheInvalidationNode::new( LogicalPlan::Dml(dml), table_name, Weak::clone(&self.caching), ); Ok(Transformed::yes(LogicalPlan::Extension( Extension { node: Arc::new(node) } ))) } _ => Ok(Transformed::no(plan)), }) } } ``` DuckDB Aggregate Pushdown' } /> When federation is enabled, aggregate pushdown is normally handled by the federation analyzer. When federation is disabled, those analyzer-based pushdowns do not run, and aggregates would not be pushed down through the standard TableProvider interface. To preserve aggregate pushdown for DuckDB-accelerated tables in that configuration, we apply a DuckDB-specific optimizer rule that recognizes supported aggregate functions and rewrites the plan to execute the aggregation inside DuckDB: 

    ' } /> ```rust static SUPPORTED_AGG_FUNCTIONS: LazyLock> = LazyLock::new(|| { HashSet::from([ // Basic aggregates "avg", "count", "max", "min", "sum", // Statistical "corr", "covar_pop", "stddev_pop", "var_pop", // Boolean "bool_and", "bool_or", // Approximate "approx_percentile_cont", ]) }); ``` When enabled, the optimizer rewrites:

    '} /> ```sql -- Original (DataFusion executes aggregate) SELECT region, SUM(sales) FROM duckdb_table GROUP BY region -- Rewritten (DuckDB executes aggregate via SQL federation) SELECT region, SUM(sales) FROM duckdb_table GROUP BY region -- Pushed as native DuckDB SQL ``` Physical Optimizer: Empty Hash Join' } /> If we can prove one side of a join is empty at planning time, we skip execution:

    ' } /> ```rust impl PhysicalOptimizerRule for EmptyHashJoinExecPhysicalOptimization { fn optimize( &self, plan: Arc, _config: &ConfigOptions, ) -> Result> { plan.transform_down(|plan| { let Some(join) = plan.as_any().downcast_ref::() else { return Ok(Transformed::no(plan)); }; let is_empty = match join.join_type() { JoinType::Inner => guaranteed_empty(join.left()) || guaranteed_empty(join.right()), JoinType::Left => guaranteed_empty(join.left()), // ... other join types }; if is_empty { Ok(Transformed::yes(Arc::new(EmptyExec::new(join.schema())))) } else { Ok(Transformed::no(plan)) } }).data() } } ``` User-Defined Functions' } /> DataFusion supports scalar UDFs, aggregate UDFs, and table-valued functions.

    ' } /> We use all three:

    '} /> Scalar UDFs'} /> Simple functions that operate on individual values:

    '} /> ```rust use datafusion::common::hash_utils::create_hashes; pub struct Bucket; impl ScalarUDFImpl for Bucket { fn name(&self) -> &'static str { "bucket" } fn signature(&self) -> &Signature { &Signature::any(2, Volatility::Immutable) } fn return_type(&self, arg_types: &[DataType]) -> Result { Ok(DataType::Int32) } fn invoke_with_args(&self, args: ScalarFunctionArgs) -> Result { let args = args.args; let num_args = args.len(); if num_args != 2 { return Err(BucketError::InvalidArgumentCount { count: args.len() }.into()); } let num_buckets = match &args[0] { ColumnarValue::Scalar(ScalarValue::Int64(Some(n))) => { if *n <= 0 || *n > MAX_NUM_BUCKETS { return Err(BucketError::InvalidNumBuckets { num_buckets: *n }.into()); } *n } arg => { return Err(BucketError::InvalidFirstArgType { description: describe_columnar_value(arg), } .into()); } }; match &args[1] { ColumnarValue::Scalar(scalar) => { let bucket = compute_bucket(scalar, num_buckets)?; Ok(ColumnarValue::Scalar(bucket)) } ColumnarValue::Array(array) => { let buckets = compute_bucket_array(array, num_buckets)?; Ok(ColumnarValue::Array(Arc::new(buckets))) } } } } fn compute_bucket(scalar: &ScalarValue, num_buckets: i64) -> Result { if scalar.is_null() { return Ok(ScalarValue::Int32(None)); } let array = scalar.to_array()?; let mut hashes = vec![0; 1]; create_hashes(&[array], &RANDOM_STATE, &mut hashes)?; Ok(ScalarValue::Int32(Some( u64::try_from(num_buckets) .and_then(|n| i32::try_from(hashes[0] % n)) .context(BucketLargerThanTypeSnafu)?, ))) } ``` Async Scalar UDFs for AI' } /> LLM calls are async. DataFusion\'s AsyncScalarUDFImpl trait enables this:

    ' } /> ```rust pub struct Ai { model_store: Arc>, } #[async_trait] impl AsyncScalarUDFImpl for Ai { fn name(&self) -> &str { "ai" } async fn invoke_async( &self, args: ScalarFunctionArgs, ) -> DataFusionResult { let prompt = extract_string(&args.args[0])?; let model_name = extract_string(&args.args[1])?; let model = self.model_store.read().get(&model_name)?; let response = model.complete(&prompt).await?; Ok(ColumnarValue::Scalar(ScalarValue::Utf8(Some(response)))) } } ``` Example usage:

    '} /> ```sql SELECT ai('Summarize this text: ' || content, 'gpt-4') as summary FROM documents ``` ‍‍Table-Valued Functions' } /> vector_search() and text_search() return tables:

    ' } /> ```rust impl TableFunctionImpl for VectorSearchTableFunc { fn call(&self, args: &[Expr]) -> DataFusionResult> { let parsed = Self::parse_args(args)?; let df = self.df.upgrade().context("Runtime dropped")?; let table = df.get_table_sync(&parsed.table)?; let embedding_table = find_embedding_table(&table)?; Ok(Arc::new(VectorSearchUDTFProvider { args: parsed, underlying: table, embedding_models: embedding_table.embedding_models, })) } } ``` Example usage:

    '} /> ```sql SELECT * FROM vector_search( 'documents', 'embedding_column', 'search query text', 10 -- top k ) ``` UDF Registration' } /> All UDFs are registered at runtime startup:

    ' } /> ```rust pub async fn register_udfs(runtime: &crate::Runtime) { let ctx = &runtime.df.ctx; // Scalar UDFs ctx.register_udf(CosineDistance::new().into()); ctx.register_udf(Bucket::new().into()); ctx.register_udf(Truncate::new().into()); // Async UDFs for AI #[cfg(feature = "models")] { ctx.register_udf(Embed::new(runtime.embeds()).into()); ctx.register_udf( Ai::new(runtime.completion_llms()) .into_async_udf() .into_scalar_udf(), ); } // Table-valued functions ctx.register_udtf("vector_search", Arc::new(VectorSearchTableFunc::new(...))); ctx.register_udtf("text_search", Arc::new(TextSearchTableFunc::new(...))); } ``` Physical Execution Extensions' } /> Sometimes we need custom execution behavior beyond logical planning:

    ' } /> FallbackOnZeroResultsScanExec' } /> If an accelerated table returns zero rows, optionally fall back to the source:

    ' } /> ```rust pub struct FallbackOnZeroResultsScanExec { input: Arc, fallback_table_provider: FallbackAsyncTableProvider, fallback_scan_params: TableScanParams, } impl ExecutionPlan for FallbackOnZeroResultsScanExec { fn execute( &self, partition: usize, context: Arc, ) -> DataFusionResult { let input_stream = self.input.execute(partition, context.clone())?; // Wrap stream to detect zero results and trigger fallback Ok(Box::pin(FallbackStream::new( input_stream, self.fallback_table_provider.clone(), self.fallback_scan_params.clone(), context, ))) } } ``` SchemaCastScanExec' } /> SchemeCastScanExec handles type representation differences across systems during streaming. Different systems represent the same logical types differently. For example, SQLite only supports 5 types while Arrow has 30+ types. SchemaCastScanExec maps between these type system differences as data streams through DataFusion, ensuring type compatibility across connectors:  

    ' } /> ```rust pub struct SchemaCastScanExec { input: Arc, target_schema: SchemaRef, } impl ExecutionPlan for SchemaCastScanExec { fn execute(...) -> DataFusionResult { let input_stream = self.input.execute(partition, context)?; Ok(Box::pin(SchemaCastStream::new( input_stream, Arc::clone(&self.target_schema), ))) } } ``` Extension Planners' } /> Custom logical plan nodes need physical planners:

    '} /> ```rust pub fn default_extension_planners() -> Vec> { vec![ Arc::new(IndexTableScanExtensionPlanner::new()), Arc::new(FederatedPlanner::new()), Arc::new(CacheInvalidationExtensionPlanner::new()), #[cfg(feature = "duckdb")] DuckDBLogicalExtensionPlanner::new(), ] } ``` Our DataFusion fork and contributions' } /> Building Spice on Apache DataFusion meant moving quickly at layers of the engine that are still actively evolving upstream. Very early on, we made a deliberate decision to maintain a fork of DataFusion rather than treat it as a fixed dependency. We maintain a fork of DataFusion at spiceai/datafusion:

    ' } /> ```yaml datafusion = { git = "https://github.com/spiceai/datafusion", rev = "10b5cc5" } ``` The benefits of maintaining our own fork include: 

    ' } /> Faster iteration: We can ship features before they\'re merged upstream. Some patches are tightly coupled to Spice-specific concepts-federation semantics, acceleration policies, or execution behaviors that don\'t generalize cleanly to other DataFusion users. Keeping those changes in our fork lets us move fast without forcing premature abstractions into the core engine. 

    ' } /> Predictable stability: We control when we rebase, when we absorb breaking changes, and how we roll out upgrades. This is critical for a production system that spans dozens of connectors and execution paths. 

    ' } /> That said, we work hard to avoid drifting away from the community. When improvements are broadly useful-bug fixes, performance optimizations, clearer APIs, or missing documentation-we contribute them back upstream. We stay close to DataFusion's main branch and regularly rebase our fork, treating upstream not as an external dependency but as a shared foundation we help maintain. 

    " } /> Lessons learned from building on DataFusion' } /> After building Spice on top of DataFusion in production for multiple years, a few patterns and lessons have consistently stood out:

    ' } /> 1. TableProvider is incredibly powerful: The TableProvider abstraction lets us add any data source without modifying DataFusion. We\'ve implemented 20+ connectors this way.

    2. Optimizer rules compose well: Each rule does one thing. Cache invalidation, aggregate pushdown, and empty join elimination all coexist without conflicts.

    3. Physical planning is the escape hatch: When logical transformations aren\'t enough, custom ExecutionPlan implementations let us do anything - fallback streams, schema casting, managed runtimes.

    4. Schema metadata is your friend: Arrow schema metadata flows through the entire pipeline. We use it for:

    ' } />
  • Source tracking (which connector)
  • Acceleration status (accelerated vs. federated)
  • Optimization hints (enable aggregate pushdown)
  • ' } /> 5. Async UDFs open new possibilities: DataFusion\'s async UDF support enables SQL-embedded AI:

    ' } /> ```sql SELECT ai('Summarize: ' || text) FROM articles ``` This wouldn't be possible with synchronous-only UDFs.

    "} /> 6. Federation requires dialect awareness: Different databases have different SQL. Plan for dialect translation from the start, not as an afterthought.

    ' } /> Conclusion'} /> Apache DataFusion is the foundation of Spice's query engine: parsing, planning, optimization, and execution all delivered entirely in Rust, with native Arrow memory and vectorized execution. Its design lets us extend the engine at every layer, adding custom table providers, optimizer rules, and execution operators without rewriting or wrapping the core.

    " } /> DataFusion isn't just a fast SQL engine - it's a programmable query compiler. Stable extension points like TableProvider, OptimizerRule, ExecutionPlan, and ScalarUDFImpl allow us to express federation, acceleration, search, and AI inference inside the planner and runtime, not as external systems. By building on these abstractions and contributing improvements back upstream, we get a production-grade engine that evolves with our needs rather than constraining them.

    " } /> If you have further questions about our implementation or are interested in learning more about the Spice platform, join us on Slack.

    ' } /> References'} />
  • Writing a Custom TableProvider
  • Apache DataFusion Documentation
  • DataFusion GitHub
  • DataFusion Examples
  • datafusion-federation
  • ' } />

    '} /> --- ## Interviewing at Spice AI URL: https://spice.ai/blog/interviewing-at-spice-ai Date: 2024-03-14T19:22:00 Description: Interviewing at Spice AI It's been said that a leader's core job is two things. One, set direction and two, put the right people in the right roles. That's why at Spice AI, the mission, hiring, and interviewing is fundamental and the people we bring into the team is critical for success. This post walks through our interviewing process as a guide for candidates and to share our learnings with the broader community.

    " } /> Spice AI Hiring Principles' } /> Everything we do at Spice AI is built from first-principles. Here are our hiring principles:

    ' } />
  • High Standards - Every hire is exceptional and a bar raiser.
  • Mission-Driven - Candidates are excited by and want to contribute to the Spice AI mission.
  • Able - Hires are intelligent, are great communicators, and have done this before with a proven track record. As a startup, we need contributors who can hit the ground running and contribute from day 1. We\'re also distributed, so communication is critical.
  • Willing - Hires know the value of overcoming challenge, doing hard things, and are willing to put in the work to build something great together.
  • Clarity of thought - Hires demonstrate clear thinking and problem solving, with written pieces to back it up, because "if you\'re not writing, you\'re not thinking."
  • Great judgement - Hires have a history of making great judgement calls and decisions.
  • Vectors over scalars - Beyond table stakes, direction and velocity more important than a single measure of skill or ability.
  • Hire people not just resumes - We\'re on this mission and are building this company together.
  • ' } /> A Unique Approach to Interviews' } /> The Spice AI interview process includes a couple of unique elements. We generally minimize methods, like whiteboard interviews, which we believe to have limited value.

    ' } /> Pair Programming: Pair programming sessions help assess collaboration, clarity of thought, and problem solving using real-world challenges. The first session is in your choice of Go or Rust, playing to your strengths, and the second in the other, demonstrating drive for results, adaptability, problem solving, and learning rate.

    ' } /> Book and Paper Challenge: We introduce a novel way to get to know candidates and for them to get to know the team by discussing a research paper, white paper, or leadership book. Think of it like a mini book club. We ask the candidate to lead the discussion as if they were on the team already.

    ' } /> Example papers: MEMTOTemporal Fusion TransformersToolLLMForecasting at Scale.

    ' } /> Example books: MindsetThe Big LeapExtreme OwnershipGritThe DipThe Phoenix Project.

    ' } /> Standard Interview Process' } /> Once a candidate proceeds to the engineering team, the standard interview process has two stages, either on the same or different days, and is as follows.

    ' } />
    The Spice AI interview process
    ' } /> After the interview, the team will meet separately to discuss the candidate's performance. Candidate profiles put forward as hires will then be presented in the weekly team meeting. A member of the team must advocate for the candidate for them to be given an offer.

    " } /> Keys to Success at Spice AI' } /> To succeed in becoming a part of the Spice AI team, candidates must demonstrate more than just technical proficiency. Being an A-player is table stakes. We look for individuals who are adaptable, thrive on challenge, and are deeply committed to the mission of making a better world through intelligent, AI-driven software.

    ' } /> Conclusion'} /> At Spice AI, we believe A-players want to work with other A-players to create and contribute to something meaningful. We strive to build a team of exceptional individuals aligned to the Spice AI vision and mission. Hiring is principled and uniquely designed to ensure the right people are in the right roles. The interview process is thorough and challenging, but know that if you succeed, you will join and be working with others who have also overcome it and want to build side-by-side with you.

    ' } /> If that resonates with you, check out our open roles at spice.ai/careers, and apply today!

    ' } /> About Spice AI'} /> Founded in June 2021 by Microsoft and GitHub alumni Luke Kim and Phillip LeBlanc, Spice AI creates technology to help developers build intelligent apps that learn and adapt.

    ' } /> Before co-founding Spice AI, Luke was the co-creator of Azure Incubations in the Office of the Azure CTO, where he led cross-functional engineering teams to create and develop technologies like DaprOAM, and Radius.

    ' } /> Spice AI is backed by some of the top industry angel investors and leaders, including Nat Friedman, Chairman of GitHub, Mark Russinovich, CTO of Microsoft Azure, and Thomas Dohmke, CEO of GitHub who is also on Spice AI\'s board.

    ' } /> Spice AI also has notable VC backing from Madrona Venture GroupBasis Set VenturesFounders\' Co-op, and Picus Capital.

    ' } /> Learn More'} />
  • About Spice AI
  • Spice AI Careers
  • The Spice AI Blog
  • Spice.ai OSS GitHub
  • TechCrunch and GeekWire
  • ' } />

    '} /> --- ## Introducing Spice Cayenne: The Next-Generation Data Accelerator Built on Vortex for Performance and Scale URL: https://spice.ai/blog/introducing-spice-cayenne-data-accelerator Date: 2025-12-17T23:58:50 Description: Spice Cayenne is the next-generation Spice.ai data accelerator built for high-scale and low latency data lake workloads. TLDR'} /> Spice Cayenne is the next-generation Spice.ai data accelerator built for high-scale and low latency data lake workloads. It combines the Vortex columnar format with an embedded metadata engine to deliver faster queries and significantly lower memory usage than existing Spice data accelerators, including DuckDB and SQLite. Watch the demo for an overview of Spice Cayenne and Vortex.

    ' } /> ' } /> Introduction'} /> Spice.ai is a modern, open-source SQL query engine that enables development teams to federate, accelerate, search, and integrate AI across distributed data sources. It\'s designed for enterprises building data-intensive applications and AI agents across disparate, tiered data infrastructure. Data acceleration of disparate and disaggregated data sources is foundational across many vertical use cases the Spice platform enables.

    ' } /> Spice leans into the industry shift to object storage as the primary source of truth for applications. These object store workloads are often multi-terabyte datasets using open data lake formats like Parquet, Iceberg, or Delta that must serve data and search queries for customer-facing applications with sub-second performance. Spice data acceleration, which transparently materializes working sets of data in embedded databases like DuckDB and SQLite, is the core technology that makes these applications built on object storage functional. Embedded data accelerators are fast and simple for datasets up to 1TB, however for multi-terabyte workloads, a new class of accelerator is required.

    ' } /> So we built Spice Cayenne, the next-generation data accelerator for high volume and latency-sensitive applications. 

    ' } /> Spice Cayenne combines Vortex, the next-generation columnar file format from the Linux Foundation, with a simple, embedded metadata layer. This separation of concerns ensures that both the storage and metadata layers are fully optimized for what each does best. Cayenne delivers better performance and lower memory consumption than the existing DuckDB, Arrow, SQLite, and PostgreSQL data accelerators. 

    ' } /> This post explains why we built Spice Cayenne, how it works, when it makes sense to use instead of existing acceleration options, and how to get started.

    ' } /> How data acceleration works in Spice' } /> Spice accelerates datasets by materializing them in local compute engines; which can be ApacheDataFusion + Apache Arrow, SQLite, or DuckDB, in-memory or on-disk. This provides applications with high-performance, low-latency queries and dynamic compute flexibility beyond static materialization. It also reduces network I/O, avoids repeated round-trips to downstream data sources, and as a result, accommodates applications that need to access disparate data, join that data, and make it really fast. By bringing frequently accessed working sets of data closer to the application, Spice delivers sub-second, often single-digit millisecond queries without requiring additional clusters, ingestion pipelines, or ETL.

    ' } /> ' } /> To support the wide range of enterprise workloads run on Spice, the platform includes multiple acceleration engines suited to different data shapes, query patterns, and performance needs. The Spice ethos is to offer optionality: development teams can choose the engine that best fits their requirements. These are currently the following acceleration engines:

    ' } />
  • PostgreSQL: PostgreSQL is great for row-oriented workloads, but is not optimized for high-volume columnar analytics. 
  • Arrow (in-memory): Arrow is ideal for workloads that need very fast in-memory access and low-latency scans. The tradeoff is that data isn't persisted to disk and more sophisticated operations like indexes aren't supported. 
  • DuckDB: DuckDB offers excellent all-around performance for medium-sized datasets and analytical queries. Single file limits and memory usage, however, can become a constraint as data volume grows beyond a terabyte. 
  • SQLite: SQLite is a lightweight option that excels for smaller tables and row-based lookups. SQLite's single-writer model, file single limits, and limited parallelism make it less ideal for larger or analytical workflows.
  • " } /> Why we built Spice Cayenne'} /> Enterprise workloads on multi-terabyte datasets stored in object storage share a common set of pressure points; the volume of data continues to increase, more applications and services are querying the same accelerated tables at once, and teams need consistently fast performance without having to manage extra infrastructure.

    ' } /> Existing accelerators perform well at smaller scale but run into challenges at different inflection points:

    ' } />
  • Single-file architectures create bottlenecks for concurrency and updates.
  • Memory usage of embedded databases like DuckDB can be prohibitive.
  • Database and search index creation and storage can be prohibitive.
  • ' } /> These constraints inspired us to develop the next-generation accelerator for petabyte-scale, that keeps metadata operations lightweight, and maintains low-latency, high-performance queries even as dataset sizes and concurrency increase. It also was critically important the underlying technologies aligned with the Spice philosophy of open-source with strong community support and governance.

    ' } /> Spice Cayenne addresses these requirements by separating metadata and data storage into two complementary layers: the Vortex columnar format and an embedded metadata engine.

    ' } /> Spice Cayenne architecture '} /> ' } /> Cayenne is built with two core concepts:

    '} /> 1. Data: Vortex Columnar Format' } /> Data is stored in Vortex, the next-generation open-source, Apache-licensed format under the Linux Foundation. 

    ' } /> Compared with Apache Parquet, Vortex provides:

    '} />
  • 100x faster random access
  • 10-20x faster full scans
  • 5x faster writes
  • Zero-copy compatibility with Apache Arrow
  • Pluggable compression, encoding, and layout strategies
  • ' } /> Source: Vortex Github

    ' } /> Vortex has a clean separation of logical schema and physical layout, which Cayenne leverages to support efficient segment-level access, minimize memory pressure, and extend functionality without breaking compatibility. It draws on years of academic and systems research including innovations from projects like YouTube\'s Procella, FSST, FastLanes, ALP/G-ALP, and MonetDB/X100 to push the boundaries of what\'s possible in open-source analytics.

    ' } /> Extensible and community-driven, Vortex is already integrated with tools like Apache Arrow, DataFusion, and DuckDB, and is designed to support Apache Iceberg in future releases. It\'s also the foundation of commercial offerings from SpiralDB and PolarSignals. Since version 0.36.0, Vortex guarantees backward compatibility of the file format.

    ' } /> 2. Metadata Layer'} /> Cayenne stores metadata in an embedded database. SQLite is supported today, but aligned with the Spice philosophy of optionality, the design is extensible for pluggable metadata backends in the future. Cayenne's metadata layer was intentionally designed as simple as possible, optimizing for maximum ACID performance.

    " } /> The metadata layer includes:

    '} />
  • Schemas
  • Snapshots
  • File tracking
  • Statistics
  • Refreshes 
  • ' } /> All metadata access is done through standard SQL transactions. This provides:

    ' } />
  • A single, local source of truth
  • Fast metadata reads
  • Consistent ACID semantics
  • No external catalog servers
  • No scattered metadata files
  • ' } /> A single SQL query retrieves all metadata needed for query planning. This eliminates round-trip calls to object storage, supports file-pruning, and reduces sensitivity to storage throttling.

    ' } /> Together, the metadata engine and Vortex format enable Cayenne to scale beyond the limits of single-file engines while keeping acceleration operationally simple.

    ' } /> Benchmarks'} /> So, how does Spice Cayenne stack up to the other accelerators?

    ' } /> We benchmarked Cayenne against DuckDB v1.4.2 using industry standard benchmarks (TPC-H SF100 and ClickBench), comparing both query performance and memory efficiency. All tests ran on a 16 vCPU / 64 GiB RAM instance (AWS c6i.8xlarge equivalent) with local NVMe storage. Cayenne was tested with Spice v1.9.0.

    ' } />
    Cayenne accelerated TPC-H queries 1.4x faster than DuckDB (file mode) and used nearly 3x less memory.
    ' } />
    Cayenne was 14% faster than DuckDB file mode, and used 3.4x less memory.
    ' } /> Spice Cayenne achieves faster query times and drastically lower memory usage by pairing a purpose-built execution engine with the Vortex columnar format. Unlike DuckDB, Cayenne avoids monolithic file dependencies and high memory spikes, making it ideal for production-grade acceleration at scale.

    ' } /> Getting started with Spice Cayenne' } /> Use Cayenne by specifying engine: cayenne in the Spicepod.yml (dataset configuration).

    ' } /> Following are a few example configurations.

    '} /> Basic:

    '} /> ```yaml datasets: - from: spice.ai:path.to.my_dataset name: my_dataset acceleration: engine: cayenne mode: file ``` Full configuration:

    '} /> ```yaml version: v1 kind: Spicepod name: cayenne-example datasets: - from: s3://my-bucket/data/ name: analytics_data params: file_format: parquet acceleration: engine: cayenne enabled: true refresh_mode: full refresh_check_interval: 1h ``` Memory'} /> Memory usage depends on dataset size, query patterns, and caching configuration. Vortex's design reduces memory overhead by using selective segment reads and zero-copy access.

    " } /> Storage'} /> Disk space is required for:

    '} />
  • Vortex columnar data
  • Temporary files during query execution
  • Metadata tables
  • ' } /> Provision storage according to dataset size and refresh patterns.

    ' } /> Roadmap'} /> Spice Cayenne is in beta and still evolving. We encourage users to test Cayenne in development environments before deploying to production.

    ' } /> Upcoming improvements include:

    '} />
  • Index support
  • Improved snapshot bootstrapping
  • Additional metadata backends
  • Advanced compression and encoding strategies
  • Expanded data type coverage
  • ' } /> The goal for Spice Cayenne stable is for Cayenne to be the fastest, most efficient accelerator across the full range of analytical and operational data and AI workloads at terabyte & petabyte-scale.

    ' } /> Conclusion'} /> Spice Cayenne represents a step function improvement in Spice data acceleration, designed to serve multi-terabyte, high concurrency, and low-latency workflows with predictable operations. By pairing an embedded metadata engine with Vortex's high-performance format, Cayenne offers a scalable alternative to single-file accelerators while keeping configuration simple.

    " } /> Spice Cayenne is available in beta. We welcome feedback on the road to its stable release.

    ' } />

    '} /> --- ## Making Apps That Learn And Adapt URL: https://spice.ai/blog/making-apps-that-learn-and-adapt Date: 2021-11-05T05:55:47 Description: Building intelligent applications is still too hard for most developers-not because ML is impossible, but because it's treated as something separate from the app. In the Spice.ai announcement blog post, we shared some of the inspiration for the project stemming from challenges in applying and integrating AI/ML into a neurofeedback application. Building upon those ideas, in this post, we explore the shift in approach from a focus of data science and machine learning (ML) to apps that learn and adapt.

    ' } /> As a developer, I've followed the AI/ML space with keen interest and been impressed with the advances and announcements that only seem to be increasing. stateof.ai recently published its 2021 report, and once again, it's been another great year of progress. At the same time, it's still more challenging than ever for mainstream developers to integrate AI/ML into their applications. For most developers, where AI/ML is not their full-time job, and without the support of a dedicated ML team, creating and developing an intelligent application that learns and adapts is still too hard.

    " } /> Most solutions on the market, even those that claim they are for developers, focus on helping make ML easier instead of making it easier to build applications. These solutions have been great for advancing ML itself but have not helped developers leverage ML in their apps to make them intelligent. Even when a developer successfully integrates ML into an application, it might make that application smart, but often does not help the app continue to learn and adapt over time.

    ' } /> Traditionally, the industry has viewed AI/ML as separate from the application. A pipeline, service, or team is provided with data, which trains on that data, and can then provide answers or insights. These solutions are often created with a waterfall-like approach, gathering and defining requirements, designing, implementing, testing, and deploying. Sometimes this process can take months or even years.

    ' } /> With Spice.ai, we propose a new approach to building applications. By bringing AI/ML alongside your compute and data and incorporating it as part of your application, the app can incrementally adopt recommendations from the AI engine and in addition the AI engine can learn from the application's data and actions. This approach shifts from waterfall-like to agile-like, where the AI engine ingests streams of application and external data, along with the results of the application's actions, to continuously learn. This virtuous feedback cycle from the app to the AI engine and back again enables the app to get smarter and adapt over time. In this approach, building your application is developing the ML.

    " } /> Being part of the application is not just conceptual. Development teams deploy the Spice.ai runtime and AI engine with the application as a sidecar or microservice, enabling the app services and runtime to work together and for data to be kept application local. A developer teaches the AI engine how to learn by defining application goals and rewards for actions the application takes. The AI Engine observes the application and the consequences of its actions, which feeds into its experience. As the AI engine learns, the application can adapt.

    ' } />
    Figure 1: The intelligent app flywheel
    ' } /> As developers shift from thinking about disparate applications and ML to building applications where AI that learns and adapts is integrated as a core part of the application logic, a new class of intelligent applications will emerge. And as technical talent becomes even more scarce, applications built this way will be necessary, not just to be competitive but to be even built at all.

    ' } /> In the next post, I'll discuss the concept of Spicepods, bundles of configuration that describes how the application should learn, and how the Spice.ai runtime hosts and uses them to help developers make applications that learn.

    " } /> Learn more and contribute' } /> Building intelligent apps that leverage AI is still way too hard, even for advanced developers. Our mission is to make this as easy as creating a modern web page. If the vision resonates with you, join us!

    ' } /> Our Spice.ai Roadmap is public, and now that we have launched, the project and work are open for collaboration.

    ' } /> If you are interested in partnering, we\'d love to talk. Try out Spice.aiemail us "hey," join our community Slack, or reach out on Twitter.

    ' } /> We are just getting started! 🚀

    '} /> Luke

    '} /> --- ## Making Object Storage Operational for Real-Time and AI Workloads URL: https://spice.ai/blog/making-object-storage-operational Date: 2025-10-06T17:37:00 Description: Transform object stores into real-time AI platforms. Spice adds federation, acceleration, hybrid search, and inference capabilities. TLDR'} />
  • Object storage and open table formats deliver nearly limitless scalability and cost efficiency, making them important pieces of modern data architectures. 
  • Despite their advantages, object storage can\'t function as an independent solution for workloads that require millisecond latency, sophisticated queries, or AI-driven retrieval, where throughput-optimized designs and limited query expressiveness introduce bottlenecks.
  • Spice expands the utility of these systems by pushing object storage closer to the application layer and layering on more advanced compute capabilities. 
  • Spice\'s federation and acceleration eliminates ETL and transforms object storage into a functional data layer for operational applications and AI agents.
  • ' } /> Introduction'} /> Although legacy systems and workflows remain common, many enterprises are re-evaluating their architectures to meet new demands  - driven in part, but not exclusively, by AI - that require support for more data-intensive and real-time applications.

    ' } /> The underlying storage needs for these novel workloads are generally outside the bounds of a traditional operational database for a handful of reasons - namely scalability, flexibility (the need to support heterogeneous data types), or availability (or some combination thereof). 

    ' } /> Object storage systems have experienced a renaissance in this environment, often being re-purposed or augmented for more transactional use cases than they\'ve historically supported. Platforms such as Amazon S3 and MinIO provide the scalability to handle petabytes of data, the cost efficiency of commodity hardware and open-source software, and the simplicity of a flat architecture that reduces management overhead. Although object storage systems don\'t offer some of the guardrails of operational databases like strong consistency, many operational use cases tolerate eventual consistency. Common scenarios like rate-limiting or feature lookups, for example, don\'t mandate strong consistency, and object storage systems help development teams avoid the performance tax strong consistency can impose. 

    ' } /> These attributes have made object storage a source of truth for operational workloads; development teams get the dual benefit of reduced system complexity while maintaining high reliability.

    ' } /> Challenges for Object Storage in Demanding Operational Workloads ' } /> Unfortunately, there's no free lunch in technology. 

    " } /> Object storage systems also come with significant tradeoffs for more performance-sensitive workloads. 

    ' } />
  • Object storage systems optimized for throughput rather than responsiveness introduce higher latency, limiting their use in real-time scenarios. 
  • The object storage key-value model makes complex SQL queries difficult to express and slows down analytical flexibility. 
  • Managing governance, consistency, and security at scale becomes a challenge in environments limited to eventual consistency. 
  • AI and ML workloads, which rely on random access patterns and low-latency retrieval, are not natively optimized for object storage.
  • Finally, for enterprises migrating from legacy databases, re-engineering data formats and pipelines to fit object stores can introduce complexity, cost, and downtime.
  • ' } /> ‍While object stores are now ubiquitous in enterprise environments, they can't serve as an independent solution for the operational and AI-driven workloads now shaping many application access patterns. 

    " } /> Open Table Formats: Structuring Data for Performance and Governance' } /> Open table formats like Apache IcebergDelta Lake, and Apache Parquet represent a step function of improvement for these more demanding operational data workloads by introducing database-like capabilities to object storage. These formats address the shortcomings of raw object storage, such as lack of transactional support and poor query performance, making them ideal for managing structured operational data:

    ' } />
  • Consistency Optionality: ACID transactions ensure reliable updates, while eventual consistency aligns with use cases where brief sync delays are tolerable.
  • Query Performance: Optimizations like data skipping and indexing make complex queries fast.
  • Governance and Security: Features like schema enforcement and audit trails support compliance.
  • Migration Support: Structured formats ease transitions from legacy systems by mimicking database functionality.
  • ' } /> ‍However, open table formats are still not a panacea for all operational workloads. They improve governance and query planning, but they don't solve the performance challenges of running federated queries across multiple operational and analytical systems or powering AI applications that embed both structured and unstructured data. Different tools for different jobs, as they say. 

    " } /> What if you could maintain all of the great attributes of object storage and open table formats, but add the orchestration necessary to actually power your application without a bunch of ETL pipelines?

    ' } /> Well, you now can with Spice.ai

    '} /> Transforming Object Storage into a High-Performance Data Layer with Spice ' } /> Spice was purpose-built to solve this problem. By unifying SQL query federation and acceleration, search and retrieval, and LLM inference into a single, deploy-anywhere runtime, Spice makes it possible to serve data and AI-powered experiences directly from your existing object storage - securely, at low latency, and without sacrificing the simplicity and economics of object storage. Built in Rust on top of modern open-source technologies like Apache DataFusion (query optimization), Apache Arrow (in-memory processing), DuckDB (fast analytics), Apache Iceberg (open table format), and OpenTelemetry (observability), Spice transforms object storage into a high-performance data layer equipped to serve the most demanding operational workloads. 

    ' } /> It's a lightweight (~150MB) and portable runtime that:

    "} />
  • Federates, Materializes, and Accelerates Data: Run SQL queries across databases, data lakes, and APIs without moving data. Store hot data in-memory or locally using Apache Arrow, DuckDB, or SQLite for sub-second queries.
  • Delivers Hybrid Search Across Unstructured and Structured Data: Execute keyword, vector, and full-text search from a single SQL query. 
  • Serves AI Models: Support local or hosted AI models, tying real-time data to AI outputs.
  • ' } />
    Figure 1: Spice.ai Compute Engine
    ' } /> One Runtime for All Your Data'} /> Where others solve one piece of the problem (search, query, or inference), Spice brings these capabilities together in one platform. The result is faster delivery of high-performance applications, with fewer moving parts to operate and maintain.

    ' } /> As you can imagine, Spice's value goes beyond operationalizing object stores. With Spice you can federate SQL across transactional and analytical systems, join it with Parquet in S3 or Iceberg tables, and avoid the latency and cost of moving data back and forth.

    " } /> You can run Spice wherever your application lives: as a sidecar for edge workloads, a microservice in the cloud, or a managed deployment. The benefit of this deployment optionality is that it gives applications and AI a controlled execution layer rather than direct database access.

    ' } /> For more on the Spice architecture, visit the OSS overview here

    ' } />
    Figure 2: AI-driven architecture with Spice.ai
    ' } /> Real-World Impact: Twilio, Barracuda, and NRC Health' } /> Let's take this out of the abstract and into some real-world applications built on Spice. 

    " } /> Twilio: Database CDN for Messaging Pipelines' } /> For Twilio, consistently fast data access is mission-critical. In their messaging pipelines, even a brief database outage could cascade into service interruptions. With Spice, Twilio stages critical control-plane datasets in object storage, then accelerates them locally for sub-second queries. This not only improved P99 query times to under 5ms but also introduced automated multi-tenancy controls that propagate updates in minutes instead of hours. By reducing reliance on direct database queries and adding a resilient S3 failover path, Twilio doubled data redundancy and improved overall reliability - all with a lightweight container drop-in.

    ' } /> Barracuda: Datalake Accelerator for Email Archives' } /> By deploying Spice as a datalake accelerator, Barracuda reduced P99 query times to under 200 milliseconds and moved audit logs into cost-efficient Parquet files on S3, which Spice queries directly. The shift not only eliminated costly data lakehouse queries but also reduced load on Cassandra, improving stability across the infrastructure. The result was a faster, more reliable customer experience at a fraction of the cost.

    ' } /> NRC Health: Data-Grounded AI for Healthcare Insights' } /> NRC Health needed a way to build secure, data-grounded AI features that could integrate multiple internal platforms - from MySQL and SharePoint to Salesforce - without lengthy development cycles. Spice provided a unified, AI-ready data layer that developers could access through a single interface. Developers found it easier to experiment with embeddings, search, and inference directly in Spice, avoiding the complexity of stitching together bespoke pipelines. The result is faster innovation and AI features grounded in real, relevant healthcare data.

    ' } /> Conclusion'} /> Object storage and open table formats have become critical parts of modern enterprise data infrastructure, but they were not designed to serve real-time operational or AI-driven workloads on their own. Spice fills that gap by pairing federation with acceleration, search, and inference, turning data lakes into low-latency, AI-ready data layers. For enterprises hoping to get the most leverage possible out of their operational data, Spice is the catalyst.

    ' } /> Getting Started with Spice'} /> Spice is open source (Apache 2.0) and can be installed in less than a minute on macOS, Linux, or Windows, and also offers an enterprise-grade Cloud deployment

    ' } />

    '} /> --- ## On Writing URL: https://spice.ai/blog/on-writing Date: 2024-05-23T19:14:00 Description: Writing is fundamental to formalizing thoughts, communicating effectively, and is the ultimate creation tool. Words matter. A single word can throw you into the depths of despair or raise you to euphoria. Every significant civilization, culture, and religion has placed emphasis on them because words are how we create. Every idea starts with words which develop, grow, and materialize through the process of writing. Writing is fundamental to formalizing thoughts, communicating effectively, and is the ultimate creation tool.

    ' } /> Thinking Formalized'} /> Writing is thinking formalized. We think and reason in words, so to think critically, you must write. Paul Graham, the founder of Y Combinator, has written at length on the power and necessity of putting ideas into words as a "severe test" to know something well. Graham also quotes Turing Award winner Leslie Lamport:

    ' } />

    '} /> Writing well shows clarity of thought, but confusing, illogical, and verbose writing betrays poor thinking. Richard Guindon wrote "Writing is nature\'s way of letting you know how sloppy your thinking is."

    ' } /> Part of Amazon\'s success is credited to its culture of writing and Jeff\'s requirement for 6-pagers. Instead of Powerpoint presentations, detailed documents are required, which are read in silence at the beginning of meetings. Writing documents ensures deep thinking, thorough understanding, critical evaluation, and effective communication. Documents also level the playing field for meeting participants, so everyone starts with the same contextual foundation facilitating higher-quality discussions.

    ' } /> Writing at Spice AI'} /> At Spice, we believe great writing is a reflection of clear thinking; and moreover the writing process helps create and crystallize that clear thinking. We infuse writing into everything we do, which started with the Spice AI vision, our first-principles, and includes the mission and strategy, customer discovery, problem-solution, product management, and engineering. Spice board meetings start with a board memo pre-read and discussion rather than a deck. And across the company we document major decisions using Spice Decision Records (SDRs), a version of ADRs, that extend beyond engineering.

    ' } /> Writing is leveraged throughout the customer-discovery and product creation process. This starts with written notes from Mom Test conversations, to using Amazon\'s Docs to define product vision and value proposition, which are iteratively tested with prospects and customers, providing distilled requirements for engineering, and creating clear messaging for customers and stakeholders.

    ' } /> Precison, concision, and structure are important, so writing doesn\'t have to take a lot of time. We start with simple templates that define the What or Goal-State of what we want to achieve, Why it should be prioritized, and By When. Here\'s the GitHub Issue template we use.

    ' } /> At Spice, writing is crucial in creating clarity, communicating effectively, and working as one team. A culture of writing ensures everyone is on the same page regarding goals, expectations, and plans. Great engineers are great communicators, a trait also recognized by other leaders like Paul Dix, CTO of InfluxData.

    ' } /> ' } /> For those early in their careers, clear thinking is table stakes. As you rise in seniority, what you ultimately get paid for is making and communicating a small number of high-quality decisions. Writing well becomes even more important as you progress in your career, especially in teams like Spice, where communication and leadership (creating clarity) are core values. At Spice, everyone is expected to write well.

    ' } /> Writing in the age of ChatGPT'} /> It's seductive to outsource your writing to AI, but if you do, your ability to think critically and create clarity for yourself and others will atrophy, along with your ability to create and forge your own destiny in the world. At Spice, while AI is encouraged for ideation and research, our guidance is to avoid using ChatGPT and other generative AI tools for writing as to maintain our critical thinking muscle. Some engineers take this even further and intentionally disable tools like GitHub Copilot when writing core or critical code.

    " } /> Principles for writing'} />
  • Audience. Be aware of, understand, and target a specific audience. Don\'t waste their time.
  • Clarity. Strive for clear, articulate, and straightforward expression. Be as specific, precise, and concise as possible. Remove all unnecessary words.
  • Narrative. Use narrative, story, or essay form, and avoid bullet-points except for specific lists.
  • Structure. Use structure to organize ideas coherently. E.g. write emails using the Inverted Pyramid structure.
  • Revision. Read, edit, and revise until the piece is as clear, precise, concise, and well-structured for the audience as possible.
  • ' } /> Conclusion'} /> Writing forces us to articulate ideas precisely which creates clarity. Through clarity we generate certainty - one of the 6 human needs. Through high certainty we can lead ourselves and others to do great things and ultimately create the world we desire.

    ' } /> Learning Resources'} />
  • Amazon on writing.
  • Jordan Peterson on Writing and his Essay Writing Guide.
  • On Writing Well by William Zinger
  • The Elements of Style by Strunk and White.
  • Paul Graham\'s Essays.
  • People\'s words and actions can actually shape your brain - TED Ideas.
  • ' } />

    '} /> --- ## Operationalizing Amazon S3 for AI: From Data Lake to AI-Ready Platform in Minutes URL: https://spice.ai/blog/operationalizing-amazon-s3-for-ai Date: 2026-02-03T18:03:10 Description: Transform Amazon S3 from passive storage to an AI-ready platform. Real-world example using Spice and S3 for hybrid search and LLM inference. TL;DR'} /> Amazon S3 has evolved into one of the most flexible and powerful systems of record, but leveraging it for real-time AI workloads requires significant distributed systems work to stitch together applications, databases, vector stores, and caches. 

    ' } /> Spice handles ingestion, federation, acceleration, caching, and query execution, so teams can build AI applications and agents directly on S3 without that distributed systems complexity.  

    ' } /> This post walks through a real-world example of using Spice to transform Amazon S3 from a passive object store into a low-latency, AI-ready execution layer.  

    ' } /> From storage to system of record ' } /> Amazon S3 is durable, predictable, and cost-effective at massive scale. Its API has become the storage standard, making it one of the most portable foundations in the modern data stack. 

    ' } /> But S3 wasn't designed for serving low-latency, operational workloads. To serve application queries, teams generally copy data into databases, search engines, and caches. 

    " } /> However, recently, AWS has extended S3 with primitives that can make it the backbone of AI workloads: 

    ' } />
  • S3 Tables bring managed Apache Iceberg tables directly into S3. Structured, tabular data that traditionally lived in databases or data warehouses can be queried with the simplicity of the S3 storage layer. 
  • ' } />
  • S3 Vectors is purpose-built vector storage designed for embeddings at petabyte scale that can power search and RAG, grounding foundation models with proprietary data, enabling semantic search that understands meaning rather than just matching keywords. 
  • ' } /> These foundational capabilities can change what's possible when you're building AI applications. They are, however, still only storage primitives that don't solve all of the distributed systems complexity you end up facing at scale: ingestion, federation, caching, sharding, partitioning, query optimization, re-ranking, observability, and more. Infrastructure complexity compounds quickly.  

    " } /> Even a nominally straight-forward Q&A application needs to ingest structured data (questions, answers, metadata) and unstructured data (long-form text), vectorize the data to produce embeddings (for semantic search) and keyword indexes (for exact matches), and provide high-quality context for LLM inference (for analysis and generation). To serve these workloads, you're still required to build and operate application-layer distributed systems code to deliver the system at scale. 

    " } />
    Figure 1. S3 and S3 Vectors are great storage primitives. Production AI systems need federation, ingestion, acceleration, hybrid search, and distributed query on top.
    ' } /> The missing piece is a runtime that turns S3 into an operational, AI-ready system that handles query execution, acceleration, and coordination across structured data, vectors, and real-time sources. 

    ' } /> Spice AI: The operational layer for S3 ' } /> Spice integrates your applications and your data infrastructure - S3, databases, data warehouses, unstructured stores - and handles the distributed systems complexity for you. By unifying SQL query federation and accelerationsearch and retrieval, and LLM inference into a single, deploy-anywhere runtime, Spice makes it possible to serve data and AI-powered experiences directly from S3 - securely, at low latency, and without sacrificing the simplicity and economics of object storage. Spice is built in Rust with modern open-source technologies including Apache DataFusionApache ArrowApache Iceberg, and Vortex.  

    ' } /> Here are four specific challenges Spice addresses for these AI-driven workloads: 

    ' } /> Federate data where it lives ' } /> Spice executes SQL queries across databases, data lakes, and APIs with zero ETL. For example, you can write a single query that joins live data in S3 Tables and Aurora or combines historical logs in S3 with real-time operational data from DynamoDB. 

    ' } /> Spice has native data connectors across 35+ data sources: Everything from S3, PostgreSQL, MySQL, Snowflake, Databricks, DynamoDB, and more. 

    ' } /> Accelerate data for latency-sensitive AI apps ' } /> Spice implements tiered caching and acceleration using embedded databases including DuckDB, SQLite, and Vortex-based Spice Cayenne. Frequently accessed data is materialized locally for millisecond queries. 

    ' } /> This is critical for AI workloads: applications and agents making hundreds of queries per second can't wait for S3 round trips on every request. 

    " } /> Hybrid search across structured and unstructured data ' } /> Search is a foundational primitive for AI applications - RAG and agents rely on it to build high-quality, relevant context. But in traditional architectures, search lives in separate systems (Elasticsearch, Pinecone, etc.) with their own APIs, integrations, and copies of data. 

    ' } /> Spice takes an opinionated stance: search should use the same SQL interface as query, with indexes built off the same copy of data. 

    ' } /> Spice combines BM25 full-text search with vector similarity search and native re-ranking, enabling developers to execute hybrid search (vector and full-text search) from a single SQL query. Spice does the work to build partitioned data indexes, manage metadata for filtering, and parallelizes cross-index scatter-gather queries. 

    ' } /> Serve AI models ' } /> When you want to pipe query and search results into an LLM for analysis, classification, or generation, Spice provides built-in SQL functions for inference to models hosted on Bedrock, OpenAI, or self-hosted local models with full GPU-acceleration. Unlike alternative solutions, you don't need to wire external API calls, orchestration code, or copy data between systems.  

    " } /> You get S3's scale and cost efficiency without the distributed systems complexity in your application layer. 

    " } />
    Figure 2. The data and AI substrate for AWS applications: Spice provides federated SQL, acceleration, hybrid search, and LLM inference across DynamoDB, S3, S3 Vectors, S3 Tables, and more.
    ' } /> Building an AI-driven search application with Spice and S3 ' } /> Let's take this out of the abstract and into a real-world scenario. We're going to progressively improve the search experience for Apache Answer, the open-source Stack Overflow-style Q&A application.  

    " } />
    Figure 3. Apache Answer interface
    ' } /> By the end of this walk-though, we'll have: 

    " } />
  • Real-time ingestion from Kafka streaming into S3 Tables (structured data) and S3 Vectors (embeddings) so that queries and searches are real-time and accurate  
  • ' } />
  • Federated queries that join S3 data with live data in Aurora and DynamoDB with zero ETL 
  • ' } />
  • Hybrid search combining BM25 keyword matching with semantic vector search, re-ranked with Reciprocal Rank Fusion (RRF) 
  • ' } />
  • Sub-50ms query latency with built-in caching using DuckDB and the Spice Cayenne acceleration engine. 
  • ' } />
  • AI analysis where search results are piped directly into LLMs via SQL for classification, summarization, and generation 
  • ' } /> The entire implementation is less than 100 lines of declarative YAML configuration - eliminating custom application code, orchestration, and the need to copy data. 

    ' } /> This architecture is inspired by Spice AI's Founder and CEO, Luke Kim's Talk at re:Invent 2025. You can watch the full end-to-end demo in under 10 minutes here: 

    " } /> The baseline  ' } />
    Figure 4. Native search alternates between 20,000 results and sometimes nothing at all!
    ' } /> Let\'s start with the Apache Answer default and often the baseline for applications - good, old-fashioned string matching in PostgreSQL. When you search in Apache Answer for something like "MySQL connection error", you\'re waiting several seconds for 20,000 results - most of which are completely irrelevant. Sometimes the query just times out and returns nothing at all. This is a common outcome when your search is just matching keywords in a database with no understanding of semantic meaning or ability to distinguish between a question about MySQL connection errors, and a random post that happens to mention those words in passing. 

    ' } /> Let's see how we can improve this. 

    "} /> The architecture ' } />
    Figure 5. The Apache Answer Agent architecture with Spice and S3
    ' } /> First, to enable real-time indexing, questions and answers are streamed via Debezium CDC through Kafka. Spice ingests that stream and simultaneously indexes the content for BM25 full-text search, generates vector embeddings using Amazon Titan, and materialized data locally in DuckDB. 

    ' } /> Structured data (e.g. question IDs, timestamps, tags) is then written to S3 Tables where it's queryable as Iceberg tables. Embeddings are stored in S3 Vectors, automatically partitioned by date into separate indexes with filterable metadata. When a user searches, Apache Answer queries Spice with SQL, so no new API integration is required. Spice serves queries from the local acceleration, scatter-gather queries S3 Vectors across multiple partitioned indexes, combines full-text and vector results, and returns a re-ranked result set. 

    " } /> Step 1: Configure Spice  ' } /> Here\'s the configuration for everything just described in a single YAML file (what we call a Spicepod). 

    ' } /> Historic questions are stored in an S3 bucket with DuckDB acceleration, and new records are incrementally added as they arrive: 

    ' } />
    Figure 6: Acceleration configuration
    ' } />  Spice\'s AWS Glue catalog connector sets up S3 Tables for the structured data:

    ' } />
    Figure 7. AWS Glue configuration in Spice
    ' } /> S3 Vectors is used as the vector search engine with the answer text vectorized with the Bedrock hosted Amazon Titan model. The partition_by setting ensures data is striped across multiple indexes, and ingestion and time-based queries are incredibly fast. Metadata fields get pushed down into S3 Vectors, so users can filter by tags or date ranges without scanning every vector:

    ' } />
    Figure 8. Amazon S3 Vectors configuration in Spice
    ' } /> The BM25 search index configuration is even simpler; you just specify which columns to index for full-text search:

    ' } />
    Figure 9. Full-text search configuration in Spice
    ' } /> And finally, we're configuring Bedrock models so query and search results can be analyzed directly from SQL queries:

    " } />
    Figure 10: Amazon Bedrock configuration in Spice
    ' } /> Spice handles the complete end-to-end, from streaming ingestion from Kafka, partitioning data into the right indexes, generating embeddings, managing caches, and accessing everything through SQL.  

    ' } /> Step 2: Real-time data ingestion ' } />
    Figure 11. Streaming architecture with Kafka and Debezium
    ' } /> Now that the configuration is in place, we're ready to run Spice. Questions and answers begin streaming into the application through Kafka, which Spice processes in real-time. For each incoming record, it's generating embeddings using Titan, indexing the content for BM25 search, partitioning and sharding the records based on timestamp, and pushing filterable metadata like tags and creation date into S3 Vectors. 

    " } /> While data is streaming in, you can query it live in the Spice Cloud Playground, where the record count ticks up in real-time as data flows through the system. 

    ' } />
    Figure 12. Ingesting real-time data with Kafka
    ' } /> That LIKE query returned in under 100 milliseconds, searching across a quarter million records already ingested and arriving in real-time. This is the power of the tiered caching; frequently accessed queries hit the DuckDB acceleration locally instead of making round trips to S3. 

    ' } /> Step 3: Federate across multiple data sources ' } /> Spice doesn't just work with S3 but can federate queries across any data source in your stack. That means you can write a single SQL query that joins S3 data with data in Aurora and combines historical logs with real-time metrics from DynamoDB. 

    " } /> Spice pushes down queries from both sources, executes the join, and returnes unified results. 

    ' } /> Step 4: Full-text search with BM25 ' } /> Now, let's improve search results with full-text search for keyword matching and identifying specific terms. Spice provides a text_search function that hits the BM25 index we configured earlier directly (avoiding a full table scan), so if someone is searching for a specific error code or technical term, it will also be included and ranked in the results based on relevance:

    " } />
    Figure 13. Full-text search in Spice
    ' } /> Step 4: Semantic search with S3 Vectors ' } /> We'll now add semantic understanding with vector search. The syntax looks almost identical: 

    " } />
    Figure 14. Vector search in Spice
    ' } /> Behind that simple vector_search SQL function is a lot of power. Spice automatically vectorizes the query text using the same Titan model we configured earlier. Then it searches across multiple daily indexes in S3 Vectors and combines the results. We're partitioning by date, so there might be dozens of indexes involved. It applies metadata filters to narrow down the search space, scatter-gather executes the similarity searches in parallel, merges the results, and returns the top-k most similar answers. 

    " } /> You can see exactly what's happening, by running an EXPLAIN query: 

    " } />
    Figure 15. Explain plan
    ' } /> The query plan shows multiple parallel queries to S3 Vectors. Each box in the visualization represents a separate index being searched. Spice automatically shards the query across all relevant daily indexes, executes them in parallel, merges and ranks the results, and returns a unified result set. 

    ' } /> This is the kind of thing you'd normally need to build yourself - writing code to manage index metadata, parallel scatter-gather searches, handle failures and retries, merge results with proper ranking. With Spice, you get it out of the box. 

    " } /> Step 5: Hybrid search (BM25 + vector) ' } /> Full-text search and vector search combined provide higher relevance search results. Full-text-search excels at catching exact technical terms and keywords. If someone searches for "error code 1045" you want that exact match. Vector search understands semantic similarity; someone searching for "database connection problems" should find answers about "DB connectivity issues". 

    ' } /> Hybrid search combines both modalities. Here\'s how to do that with Spice: 

    ' } />
    Figure 16. Spice hybrid search
    ' } /> This query runs both searches in parallel, ranks each result set, then uses Reciprocal Rank Fusion (RRF) to combine them into a single ranking (for a more in-depth explainer on RRF, visit the docs). 

    ' } /> Step 6: Feed results into AI for analysis ' } /> Now that we\'ve got high-quality search results, we can pipe them directly into an LLM for deeper analysis. Spice provides an ai() function that makes this trivial:

    ' } />
    Figure 17. Spice ai() function.
    ' } /> This query pipes the top 10 search results to Amazon Nova to extract the main technology keywords. The results come back right in the SQL result set: 

    ' } />
    Figure 18. AI query results
    ' } /> From this simple example, you can extrapolate some pretty interesting use cases that can be enabled with this pattern: 

    ' } />
  • Run sentiment analysis on customer feedback at scale. For example, search for complaints about a specific product feature and analyze the emotional tone.  
  • ' } />
  • Identify security threats in logs by searching for suspicious patterns and using an LLM to assess severity.  
  • ' } />
  • Detect fraud by finding similar transaction patterns and asking an AI to explain why they\'re anomalous, automatically tagging and categorizing content by extracting themes and topics. 
  • ' } /> This is powerful - we went from raw data to AI-generated insights in just three SQL queries. And without an API integration to maintain, ETL'ing data, or custom orchestration code.  

    " } /> The results: Before and after ' } /> Let's step back and look at what we actually accomplished. We started with a Q&A application that had fundamentally broken PostgreSQL search: slow 2-3 second queries, 20,000 irrelevant results, no semantic understanding, and no ability to handle streaming data.  

    " } /> After implementing Spice with S3 Tables and S3 Vectors, we returned 20 highly relevant results. The results are dramatically better. Instead of 20,000 irrelevant results, we get 20 highly relevant answers that combine the precision of keyword matching with the semantic understanding of vector search:

    ' } />
    Figure 18. A short list of relevant, high quality results, trimmed down from the 20,000 baseline.
    ' } /> This solution incorporated:

    '} />
  • 250,000+ records streaming in real-time while maintaining query performance.  
  • ' } />
  • Queries federated across multiple data sources joining user data and other context. 
  • ' } />
  • Semantic vector search alongside keyword matching for better accuracy. 
  • ' } />
  • Search results piped directly into AI models for analysis. 
  • ' } /> The difference in user experience is night and day, yet we built this entire system with minimal YAML configuration and SQL queries. Instead of spending weeks building distributed systems and infrastructure, you're defining your configuration and immediately querying data, running searches, and integrating AI into your application, turning your data lake into an AI-ready platform. 

    " } /> Next steps ' } /> If you want to try this yourself, star the GitHub repo and explore the Spice.ai recipes. There are recipes for common patterns like hybrid search, S3 Vectors integration, and RAG workflows. 

    ' } /> The Spice documentation has a quickstart guide that walks through setting up your first Spice deployment and running queries. Learn more about how to get started with Spice and S3 Vectors in the launch blog, or the \'Architecting high-performance AI-driven data applications with Spice and AWS\' tutorial hosted on the AWS Storage Blog.  

    ' } /> If you\'re building AI applications with S3 and want to talk through your specific use case, join us on the Spice Community Slack. We\'d love to hear what you\'re working on.  

    ' } />

    '} /> --- ## Real-Time Control Plane Acceleration with DynamoDB Streams  URL: https://spice.ai/blog/real-time-acceleration-with-dynamodb-streams Date: 2026-01-22T19:42:03 Description: How to sync DynamoDB data to thousands of nodes with sub-second latency using a two-tier architecture with DynamoDB Streams and Spice acceleration. TL;DR: A global cloud communications company needed to sync their DynamoDB configuration to thousands of nodes with sub-second latency. Their multi-tier caching setup was creating cold start penalties, tight coupling, and TTL tuning overhead. The solution was a two-tier architecture using DynamoDB Streams and Spice data acceleration that eliminated cache complexity and delivered sub-second propagation. 

    ' } /> The challenge: Decoupling the data plane from an OLTP app' } /> A global cloud communications company came to us with a deceptively hard problem. They were building a new data processing platform with a clear separation between control and data planes: 

    ' } /> Control plane: An OLTP application backed by DynamoDB where customers configure their data pipelines (a single-table design holding all configuration data).

    ' } /> Data plane: Thousands of processing nodes needing access to this configuration with single-digit millisecond latency. When customers update configurations, changes must reflect in the pipeline within seconds. 

    ' } /> Their initial approach used multi-tiered caching: each data plane node ran a daemon with an in-memory LRU cache backed by DAX and DynamoDB. This led to three problems: 

    ' } />
  • Cold start penalty: Cache misses required network traversal to DAX or DynamoDB, adding latency 
  • ' } />
  • Tight coupling: Data plane nodes directly coupled to the OLTP database-cache misses meant queries hitting DynamoDB 
  • ' } />
  • TTL tuning overhead: Constant balancing between keeping hot data local and propagating changes quickly 
  • ' } /> What they really wanted was to decouple the data plane entirely from DynamoDB by accelerating the complete dataset locally on each node instead of falling back to the source on cache miss. 

    ' } /> The solution: DynamoDB + local acceleration with Spice ' } /> In this post, we\'ll walk through how DynamoDB Streams and Spice keep accelerated datasets in sync across thousands of nodes - illustrating a pattern applicable to many distributed systems where control plane data needs to be available at the edge with ultra-low latency. 

    ' } /> Introduction to Spice acceleration' } /> First, let\'s cover how Spice makes this architecture possible. Spice is a unified query, search, and LLM inference platform that enables data-intensive applications and AI agents. Spice can be deployed anywhere - in the cloud, on-premises, at the edge, or next to your application as a sidecar - and accelerates data access for teams querying disparate data sources with ultra-low latency.  

    ' } /> Spice data acceleration materializes working sets from distributed data sources into local accelerator engines such as Arrow, SQLite, DuckDB, or Spice Cayenne for high-performance querying. By bringing frequently accessed data closer to compute, applications avoid repeated round-trips to source systems while achieving sub-second latency across operational and analytical workloads. 

    ' } />
    Figure 1: Spice acceleration architecture
    ' } /> The target architecture ' } /> The customer's key requirements included:

    "} />
  • Scale to thousands of data plane nodes  
  • ' } />
  • Single-digit millisecond read latency from local storage  
  • ' } />
  • Sub-second replication from DynamoDB to accelerated datasets 
  • ' } />
  • Support fast cold start so new nodes receive data within seconds 
  • ' } /> With Spice's acceleration capabilities in mind, we designed a two-tiered Spice architecture: 

    " } />
    Figure 2: Spice + DynamoDB Streams architecture
    ' } /> How it works:  ' } />
  • The central Spice layer consumes DynamoDB Streams and maintains a near-real-time accelerated dataset 
  • ' } />
  • Each data plane node runs a local Spice daemon with SQLite or DuckDB that syncs from the central layer
  • Data plane processes read from localhost - no network egress or coupling to DynamoDB 
  • ' } /> DynamoDB Streams vs Kinesis ' } /> DynamoDB offers two change capture options. We evaluated both: 

    ' } />
  • DynamoDB Streams provides exactly-once delivery with strict ordering within each shard. Records arrive in write order with no duplicates. 
  • ' } />
  • Kinesis Data Streams can deliver duplicates and doesn\'t guarantee ordering, requiring deduplication logic on every message. 
  • ' } /> For keeping accelerated tables in sync, exactly-once delivery was decisive. We didn't want deduplication overhead, and the 24-hour retention is sufficient since we checkpoint continuously. The trade-offs-shorter retention and fewer consumers-were acceptable for this use case. 

    " } /> Bootstrapping: The checkpoint-first approach ' } /> When connecting a DynamoDB table to Spice, we need to load current state before consuming changes. This is trickier than it sounds. 

    ' } /> The Problem with LATEST Iterators ' } /> The naive approach is to get a LATEST iterator for each shard, scan the table, and start consuming. But DynamoDB Streams iterators expire after 15 minutes. If your table takes longer to scan, your iterators are gone. 

    ' } /> Buffering changes during scan has problems too. For high-throughput tables, you could exhaust memory. For idle streams, you might never receive a message to establish position. 

    ' } /> Our solution: Checkpoint first, scan second ' } />
  • Create a checkpoint at the current stream position by walking all shards and recording their sequence numbers. 
  • ' } />
  • Scan the entire table and load all existing rows. 
  • ' } />
  • Subscribe using the checkpoint from step 1 and start consuming from the recorded position. 
  • ' } /> ```rust let (should_bootstrap, checkpoint) = load_or_initialize_checkpoint(&dynamodb, &dataset_name).await?; if should_bootstrap { let bootstrap_stream = Arc::clone(&dynamodb) .bootstrap_stream() .await .map(move |msg| { msg.map(|change_batch| { ChangeEnvelope::new(Box::new(NoOpCommitter), change_batch, false) }) }); ``` After bootstrap completes, we commit the checkpoint and start the changes stream: 

    ' } /> ```rust bootstrap_stream .chain( stream::once(async move { let committer = DynamoDBStreamCommitter::new(checkpoint_cloned); if let Err(err) = committer.commit() { tracing::error!("Failed to commit bootstrap checkpoint: {:?}", err); } stream::empty() }) .flatten() ) .chain(changes_stream_from_checkpoint(&dynamodb, &checkpoint)) ``` The time travel trade-off ' } /> The checkpoint points to a moment before the scan completes. Some changes during the scan will replay afterward. The table can briefly go back in time-a row might update to an older value before catching up. 

    ' } /> We mitigate this by not marking the dataset ready until stream lag drops below a threshold (default 2 seconds). Downstream consumers only see the dataset once it's caught up. 

    " } /> This approach works for any table regardless of size or throughput. There's no dependence on receiving messages within a window and no unbounded memory buffering. 

    " } /> Cold start and snapshotting ' } /> For the customer's use case, cold start performance was critical. New data plane nodes need to spin up with data ready in seconds, not minutes. 

    " } /> Our solution is to snapshot the accelerated dataset to object storage with the checkpoint embedded: 

    ' } />
    Figure 3: Snapshot to S3
    ' } /> When a new node starts, it downloads the latest snapshot from S3, reads the embedded watermark, and resumes the CDC stream from that position. 

    ' } /> This gets nodes operational in seconds rather than re-scanning the entire source table. For a dataset of a few gigabytes, startup time drops from minutes to single-digit seconds. 

    ' } /> Shard management with a pure state machine ' } /> DynamoDB Streams organizes data into shards with parent-child relationships. You must fully process a parent before reading children to maintain ordering. 

    ' } /> We modeled this as a state machine: 

    '} /> ```rust pub struct StreamState { active: HashMap, initializing: HashMap, blocked: HashMap, historical: HashMap, } ``` The key insight was to keep state transitions pure. All transitions happen through methods that take input and return results without external API calls: 

    ' } /> ```rust pub fn handle_poll_result( &mut self, shard_id: &str, new_iterator: Option, records: Vec, ) -> Result { if let Some(iter) = new_iterator { self.active.get_mut(shard_id)?.update_iterator(iter); } else { self.active.remove(shard_id); self.promote_children(shard_id); } } ``` When a shard exhausts, we promote its children from 'blocked' to 'initializing'. This separation means we can test every state transition without mocking AWS. 

    " } /> Error handling: Transient vs fatal ' } /> Errors fall into two categories: 

    '} /> ```rust pub enum Error { // Permanent - require intervention TableNotFound, StreamNotFound, StreamBeyondRetention, // Retriable - resolve with retry Timeout, ConnectionFailure, Throttled, // Special handling IteratorExpired, } ``` Iterator expiration needs special treatment. DynamoDB Streams iterators expire after 15 minutes of inactivity. You can't retry with the same iterator - you need a new one from your last checkpoint:

    " } /> ```rust if error.is_retriable() { tracing::warn!("Poll error for shard {}, will retry: {}", shard_id, error); Ok(()) } else if matches!(error, Error::IteratorExpired) { tracing::warn!("Iterator expired for shard {}, reinitializing", shard_id); reinitialize_shard_with_checkpoint(shard_id); Ok(()) } else { Err(error) } } ``` For transient errors, exponential backoff with a 60-second cap prevents thundering herds while recovering quickly from brief network issues.

    ' } /> Watermarks and dataset readiness ' } /> To track how far behind real-time we are, we use watermarks based on each record's approximate creation time. The minimum watermark across active shards indicates global progress. 

    " } /> ```rust fn combine_shard_batches(poll_results: &[ShardPollResult]) -> DynamoDBStreamBatch { let mut shard_watermarks = Vec::new(); for shard_result in poll_results { let is_watermark_eligible = match &shard_result.outcome { PollOutcome::Records { .. } => true, PollOutcome::Failed => true, // Failed shards represent unprocessed lag PollOutcome::Empty => false, // Empty shards are caught up }; if is_watermark_eligible { if let Some(watermark) = shard_result.current_watermark { shard_watermarks.push(watermark); } } } let watermark = shard_watermarks.into_iter().min() .unwrap_or_else(SystemTime::now); } ``` This watermark drives dataset readiness. A dataset is marked ready when lag drops below the threshold so downstream consumers don't see stale data during catch-up. 

    " } /> ```rust ChangeEnvelope::new( Box::new(committer), change_batch, lag.is_some_and(|l| l < acceptable_lag), // Ready signal ) ``` For the customer's use case, this means data plane processes don't see the local dataset until it's within 2 seconds of real-time-no stale reads during catch-up.

    " } /> Checkpointing for reliability' } /> Checkpoints capture sequence number positions for each shard:

    ' } /> ```rust pub struct ShardCheckpoint { pub sequence_number: String, pub parent_id: Option, pub updated_at: SystemTime, pub position: CheckpointPosition, } pub enum CheckpointPosition { At, // Resume AT this sequence (inclusive) - not yet processed After, // Resume AFTER this sequence (exclusive) - already processed } ``` On recovery, we resume from leaf shards only - those with no children in the checkpoint. Parents are already exhausted: 

    ' } /> ```rust pub fn leaf_shards(&self) -> Vec<(&String, &ShardCheckpoint)> { let parent_ids: HashSet<&str> = self.shards.values() .filter_map(|sc| sc.parent_id.as_deref()) .collect(); self.shards.iter() .filter(|(shard_id, _)| !parent_ids.contains(shard_id.as_str())) .collect() } ``` Checkpoints serialize as JSON to Spice's file-accelerated storage, enabling reliable resume after restarts. 

    " } /> Scaling to thousands of nodes ' } /> With thousands of data plane nodes, having each node consume directly from DynamoDB Streams isn't realistic. The central Spice layer acts as a fan-out point. 

    " } /> Edge nodes poll the central layer on a configurable interval using an append refresh strategy. This scales well - each edge node independently pulls updates without coordinating with others. Nodes can also filter to pull only relevant partitions, reducing data transfer for deployments where different node pools need different data subsets.  

    ' } /> For the customer's use case, different teams had different requirements: one had fewer nodes but larger datasets, while the other had smaller datasets across more nodes. The pull-based architecture handles both patterns efficiently. 

    " } /> Metrics and monitoring ' } /> DynamoDB Streams lacks built-in lag metrics, so we built our own and exposed them through OpenTelemetry: 

    ' } /> ```rust pub struct MetricsCollector { pub active_shards_number: RwLock, pub records: AtomicUsize, pub transient_errors: AtomicUsize, pub watermark: RwLock>, } ``` Exposed through OpenTelemetry:

    '} />
  • shards_active: Current active shards being polled 
  • records_consumed_total: Total records since startup 
  • lag_ms: Current lag from watermark to wall clock 
  • errors_transient_total: Recoverable error count 
  • ' } /> The lag metric is especially important for the customer's SLA; they need to verify configuration changes propagate within seconds.

    " } /> Configuration: A complete example ' } /> One of our design principles is making everything as easy as possible for developers. Here's a complete Spicepod configuration implementing the architecture described above: 

    " } /> ```yaml version: v1 kind: Spicepod name: dynamodb-streams-demo snapshots: enabled: true location: s3:// bootstrap_on_failure_behavior: fallback params: s3_auth: key s3_key: ${secrets:AWS_ACCESS_KEY_ID} s3_secret: ${secrets:AWS_SECRET_ACCESS_KEY} s3_region: us-east-2 datasets: - from: dynamodb: name:
    params: dynamodb_aws_region: ap-northeast-2 dynamodb_aws_auth: iam_role acceleration: enabled: true refresh_mode: changes engine: duckdb mode: file snapshots: enabled snapshots_trigger: time_interval snapshots_trigger_threshold: 2m metrics: - name: shards_active - name: records_consumed_total - name: lag_ms - name: errors_transient_total ``` This configuration points Spice at a DynamoDB table, enables CDC, accelerates to DuckDB, snapshots to S3 for fast cold start, falls back to bootstrap if snapshot loading fails, and exposes key metrics. 

    ' } /> That's it. No custom CDC consumers to build, checkpoint management code to write, or shard tracking logic to maintain. Point it at your table and start querying. 

    " } /> The magic moment ' } /> When our customer first deployed this configuration, their feedback was immediate: "It was too easy." They had expected weeks of integration work. Instead, they had real-time DynamoDB synchronization running in an afternoon. 

    ' } /> Lessons learned'} />
  • Choose abstractions that match your guarantees: DynamoDB Streams\' exactly-once delivery saved us from deduplication complexity. The "simpler" option with fewer features was actually less work. 
  • Bootstrap carefully: The checkpoint-first approach handles edge cases that naive strategies miss-large tables, idle streams, memory constraints. Temporary "time travel" during catch-up is an acceptable trade-off. 
  • Pure state machines pay off immediately: Separating state transitions from I/O made shard management testable and easy to reason about.
  • Build observability from day one: Without AWS-provided lag metrics, we built our own. Having watermarks and lag tracking from the start made debugging and operations much easier. 
  • Design for the scaling requirements: The two-tier architecture with push/pull flexibility handles both the "few nodes, large data" and "many nodes, small data" patterns the customer needed. 
  • ' } /> The architecture is extensible. If we need Kinesis Data Streams support for longer retention, the core state machine and checkpointing logic can be reused with a deduplication layer on top. 

    ' } /> Conclusion  ' } /> This pattern of using change data capture to decouple application data planes from OLTP systems is increasingly common in modern, distributed architectures. What made this particular customer challenge compelling was the combination of strict latency requirements, thousands of downstream consumers, and the need for operational simplicity. 

    ' } /> By treating DynamoDB Streams as a reliable source of truth and pairing it with accelerated, local query engines, we were able to eliminate cache complexity, remove DynamoDB from the application critical path, and deliver configuration changes across the fleet in seconds.  

    ' } /> The same approach generalizes well beyond this use case: any system that needs fast, consistent access to changing data without rebuilding custom CDC consumers or managing fragile caching layers can benefit from this architecture.

    ' } /> Get started ' } /> Check out the Spice DynamoDB connector docs, Spice\'s broader CDC support, and the below demo for overviews on using Spice and DynamoDB.

    ' } /> And if you want to dig deeper into architectures like this, ask questions, or share what you\'re building, join the Spice community on Slack

    ' } /> --- ## Real-Time Hybrid Search Using RRF: A Hands-On Guide with Spice URL: https://spice.ai/blog/real-time-hybrid-search-using-rrf Date: 2025-10-23T16:10:00 Description: Learn how to build hybrid search with Reciprocal Rank Fusion (RRF) directly in SQL using Spice - combining text, vector, and time-based relevance in one query for faster, more accurate results. Surfacing relevant answers to searches across datasets has historically meant navigating significant tradeoffs. Keyword (or lexical) search is fast, cheap, and commoditized, but limited by the constraints of exact matching. Vector (or semantic) search captures nuance and intent, but can be slower, harder to debug, and expensive to run at scale. Combining both usually entails standing up multiple engines (e.g. Elasticsearch for text, Pinecone for vectors), writing custom ranker logic, and maintaining ETL and data sync pipelines. 

    ' } /> As real-time, AI-powered applications and agents become ubiquitous, these compromises are less tenable. Users demand instant, context-rich results that balance precision with intent. This applies to both consumer and enterprise search environments; for example, a business user searching across internal knowledge bases, or a customer searching for an item in their chat history on a consumer app. Waiting for data pipelines to sync, dealing with custom APIs, or troubleshooting a multi-system ranking stack introduces a variety of sub-optimal outcomes: inconsistent rankings, higher latency, or just simply inaccurate results. 

    ' } /> Hybrid Search with Reciprocal Rank Fusion (RRF)' } /> Reciprocal Rank Fusion (RRF) is an algorithm for hybrid search that helps mitigate the search challenge unfolded above. Instead of favoring one search modality, RRF merges results from multiple independent searches and variables (text, vector, metadata, recency, etc.) by combining their ranks and giving each signal proportional influence. This avoids "winner take all" blending and delivers results that are both topically relevant and contextually meaningful. 

    ' } /> In practice, each search query is executed independently, and the ranks of the returned results are combined using the following formula:

    ' } /> RRF Score = Σ(rank_weight / (k + rank))

    '} /> Documents that appear across multiple result sets receive higher scores, while the smoothing parameter k controls how much rank position affects the final score (lower values make higher-ranked items more influential).

    ' } /> RRF can also incorporate custom weighting and temporal decay, enabling developers to:

    ' } />
  • Adjust the influence of each query type using the rank_weight parameter.
  • Apply recency boosting by specifying a time_column and decay function.
    • Exponential decay: : e^(-decay_constant * age_in_units) where age is in decay_scale_secs
    • Linear decay:  max(0, 1 - (age_in_units / decay_window_secs))
  • ' } /> ‍This approach lets you incorporate exact keyword matches, semantic similarity, and time-based relevance in one consistent ranking.

    ' } />
    Figure 1: RFF Flowchart
    ' } /> RRF is fully integrated in Spice\'s hybrid search platform:

    ' } />
  • SQL operators combine text and vector search in a single query
  • Rank weights can be tuned per-query 
  • Recency and metadata can be included with no extra code
  • No external ranking server, no additional infrastructure, and no manual pipeline management are required
  • ' } /> ‍Let's take this out of the abstract and review a sequence of queries that illustrate the business value of RFF in Spice, from basic to more sophisticated ranking techniques. 

    " } /> Hybrid Search'} /> ```python -- Combine vector and text search for enhanced relevance SELECT id, title, content, fused_score FROM rrf( vector_search(documents, 'machine learning algorithms'), text_search(documents, 'neural networks deep learning', content), join_key => 'id' -- explicit join key for performance ) WHERE fused_score > 0.01 ORDER BY fused_score DESC LIMIT 5; ``` This first example illustrates the basic building blocks of RRF-powered hybrid search: merging semantic/vector and traditional keyword/text retrieval in one query. The result set balances conceptual relevance - capturing results related to "machine learning algorithms" - with precise keyword matches like "neural networks" or "deep learning.". Using the join_key ensures that performance scales commensurately with data volume.

    ' } /> Weighted Ranking'} /> ```python -- Boost semantic search over exact text matching SELECT fused_score, title, content FROM rrf( text_search(posts, 'artificial intelligence', rank_weight => 50.0), vector_search(posts, 'AI machine learning', rank_weight => 200.0) ) ORDER BY fused_score DESC LIMIT 10; ``` Weighting lets you fine-tune intent. Semantic results for "AI machine learning" are given four times more influence than exact text matches for "artificial intelligence." This allows development teams to favor context and meaning, surfacing more relevant content even when users don\'t type a precise phrase.

    ' } /> Recency-Boosted'} /> ```python -- Exponential decay favoring recent content SELECT fused_score, title, created_at FROM rrf( text_search(news, 'breaking news'), vector_search(news, 'latest updates'), time_column => 'created_at', recency_decay => 'exponential', decay_constant => 0.05, decay_scale_secs => 3600 -- 1 hour scale ) ORDER BY fused_score DESC LIMIT 10; ``` Finally, RRF can incorporate time as a ranking signal (important for use cases like trading exchanges, news, or social media). 

    ' } /> By specifying a time_column and a decay function, you can automatically boost time-pertinent results. In this example, exponential decay prioritizes newer stories while keeping hybrid relevance intact.

    ' } /> Use Case Walk-Through'} /> Now, let's walk through a hands-on example: capturing real-time Bluesky posts, embedding and full-text indexing them automatically, and running hybrid search queries with RRF via SQL.

    " } /> Step 1. Set up'} /> Clone this repository:

    '} /> ```python git clone https://github.com/spiceai/cookbook.git cd cookbook/search ``` Install websocat and set up Python:

    '} /> ```python brew install websocat python -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` Step 2. Preview and capture data'} /> We can read real-time posts using Bluesky\'s Jetstream relay service. Use websocat to preview the stream and ensure that the relay is functional:

    ' } /> ```python websocat wss://jetstream2.us-east.bsky.network/subscribe\?wantedCollections=app.bsky.feed.post | jq { "did": "did:plc:ei3py27iy2orpykshoudxnls", "time_us": 1758813540806266, "kind": "commit", "commit": { "rev": "3lzoas6yujs2z", "operation": "create", "collection": "app.bsky.feed.post", "rkey": "3lzoas6nbhs2e", "record": { "$type": "app.bsky.feed.post", "createdAt": "2025-09-25T15:19:00.163Z", "langs": [ "ja" ], "text": "🧐🧐🧐🧐🧐" }, "cid": "bafyreighkijp5zyclu6qdjtfskmr65ttvxvedvqmfvwgfyf6iaq4jfdje4" } } ... ^C ``` Let's convert this stream into a Parquet file that Spice AI can read. Let this run for a little while, until satisfied with the total number collected. Run again at any time to resume appending:

    " } /> ```python websocat wss://jetstream2.us-east.bsky.network/subscribe\?wantedCollections=app.bsky.feed.post | ./generate_parquet.py [info] boot! [info] INSERTED 250 ROWS; TOTAL 250 [info] INSERTED 250 ROWS; TOTAL 500 ``` Step 3. Start Spice and Search'} /> In a new terminal, start Spice. It will embed, full-text index, and ingest the latest data. Additionally, the file connector is using fsnotify to watch it for updates, to eagerly ingest data.

    ' } /> ```python spice run ``` You should see this output:

    '} /> ```python 2025-09-26T15:21:38.154354Z INFO spiced: Starting runtime v1.8.0-unstable-build.71ac09ff2+models.metal 2025-09-26T15:21:38.225135Z INFO runtime::init::caching: Initialized results cache; max size: 128.00 MiB, item ttl: 1s 2025-09-26T15:21:38.229824Z INFO runtime::init::caching: Initialized search results cache; max size: 128.00 MiB, item ttl: 1s 2025-09-26T15:21:38.230575Z INFO runtime::init::caching: Initialized embeddings cache; max size: 128.00 MiB, item ttl: 1s 2025-09-26T15:21:38.658824Z INFO runtime::opentelemetry: Spice Runtime OpenTelemetry listening on 127.0.0.1:50052 2025-09-26T15:21:38.658888Z INFO runtime::flight: Spice Runtime Flight listening on 127.0.0.1:50051 2025-09-26T15:21:38.678694Z INFO runtime::http: Spice Runtime HTTP listening on 127.0.0.1:8090 2025-09-26T15:21:47.550688Z INFO runtime::init::embedding: Embedding Model potion_128m ready 2025-09-26T15:21:47.659106Z INFO runtime::init::dataset: Dataset bluesky_posts initializing... 2025-09-26T15:21:47.730735Z INFO runtime::dataconnector::file: Watching changes to bluesky_posts.parquet 2025-09-26T15:21:47.730999Z INFO runtime::init::dataset: Dataset bluesky_posts registered (file://bluesky_posts.parquet), acceleration (duckdb:file, append), results cache enabled. 2025-09-26T15:21:47.740354Z INFO runtime::accelerated_table::refresh_task: Loading data for dataset bluesky_posts 2025-09-26T15:21:57.885819Z INFO runtime::accelerated_table::refresh_task: Dataset bluesky_posts received 38,101 records 2025-09-26T15:21:58.507599Z INFO runtime::accelerated_table::refresh_task: Loaded 38,101 rows (54.72 MiB) for dataset bluesky_posts in 10s 775ms. 2025-09-26T15:21:58.550191Z INFO runtime: All components are loaded. Spice runtime is ready! 2025-09-26T15:22:20.335633Z INFO runtime::accelerated_table::refresh_task: Loading data for dataset bluesky_posts 2025-09-26T15:22:21.960722Z INFO runtime::accelerated_table::refresh_task: Loaded 251 rows (339.49 kiB) for dataset bluesky_posts in 1s 656ms. ``` In a new terminal, start the Spice SQL REPL:

    '} /> ```python spice sql ``` Basic Hybrid Search'} /> Combine exact text matching with semantic similarity for comprehensive results:

    ' } /> ```python -- Find posts about space travel using both exact text and semantic search select fused_score, text, created_at, langs from rrf( text_search(bluesky_posts, 'space travel'), vector_search(bluesky_posts, 'space travel') ) order by fused_score desc limit 10; ``` Weighted Ranking'} /> Boost specific search strategies using rank_weight to prioritize different result types:

    ' } /> ```python -- Heavily prioritize semantic similarity over exact text matches select fused_score, text, rkey from rrf( text_search(bluesky_posts, 'artificial intelligence', rank_weight => 50.0), vector_search(bluesky_posts, 'AI machine learning', rank_weight => 200.0) ) order by fused_score desc limit 15; -- Prioritize exact mentions while including semantic results select fused_score, text, created_at from rrf( text_search(bluesky_posts, 'climate change', rank_weight => 300.0), vector_search(bluesky_posts, 'environmental sustainability', rank_weight => 100.0) ) order by fused_score desc limit 20; ``` Recency-Boosted Search'} /> Use temporal information to surface recent content with exponential or linear decay:

    ' } /> ```python -- Recent posts get higher scores with exponential decay select fused_score, text, created_at, rkey from rrf( text_search(bluesky_posts, 'breaking news'), vector_search(bluesky_posts, 'latest updates'), time_column => 'created_at', recency_decay => 'exponential', decay_constant => 0.05, decay_scale_secs => 3600 -- 1 hour scale ) order by fused_score desc limit 10; -- Linear decay for trending topics over the last day select fused_score, text, created_at from rrf( text_search(bluesky_posts, 'trending now'), vector_search(bluesky_posts, 'viral popular'), time_column => 'created_at', recency_decay => 'linear', decay_window_secs => 86400 -- 24 hours ) order by fused_score desc limit 15; ``` Advanced Parameter Tuning'} /> Fine-tune the RRF algorithm using the smoothing parameter k:

    ' } /> ```python -- Lower k value for more aggressive ranking differences select fused_score, text, langs from rrf( text_search(bluesky_posts, 'technology innovation'), vector_search(bluesky_posts, 'tech startups'), k => 20.0 -- More aggressive than default 60.0 ) order by fused_score desc limit 12; -- Higher k for smoother score distribution select fused_score, text, created_at from rrf( text_search(bluesky_posts, 'social media'), vector_search(bluesky_posts, 'online platforms'), k => 120.0 -- Smoother than default 60.0 ) order by fused_score desc limit 10; ``` Multi-Language and Content Analysis' } /> Combine vector search queries across languages for similar concepts:

    ' } /> ```python -- Find posts about "breaking news" with semantic query in Spanish, but keyword match in English select fused_score, text, langs, created_at from rrf( vector_search(bluesky_posts, 'ultimas noticias', rank_weight => 100), text_search(bluesky_posts, 'news'), time_column => 'created_at', recency_decay => 'exponential', decay_constant => 0.05, decay_scale_secs => 3600 -- 1 h ) where trim(text) != '' order by fused_score desc limit 15; -- Find posts about breaking news using two semantic queries in Spanish, but filter results for English select fused_score, text, langs, created_at from rrf( vector_search(bluesky_posts, 'ultimas noticias'), vector_search(bluesky_posts, 'noticias de ultima hora'), time_column => 'created_at', recency_decay => 'exponential', decay_constant => 0.05, decay_scale_secs => 3600 -- 1 h ) where langs like '%en%' and trim(text) != '' order by fused_score desc limit 15; ``` Step 4. Enable agentic support'} /> Stop Spice, and go to spicepod.yml and uncomment the models block. Update the .env file with your OpenAI key. Then start Spice again.

    ' } /> ```python spice run ``` Afterwards, begin a chat session:

    '} /> ```python spice chat ``` Try to query for insights using natural language:

    '} /> ```python chat> Can you see how many posts there are in the last day about photography? There were 676 posts about photography in the last day on the Bluesky platform. If you have any further questions or need additional insights, feel free to ask! Time: 10.12s (first token 9.50s). Tokens: 1635. Prompt: 1588. Completion: 47 (75.62/s). chat> Can you show me a breakdown by language? Here's a breakdown of the posts about photography in the last day by language: 1. **English (en):** 596 posts 2. **German (de):** 41 posts 3. **Finnish (fi):** 20 posts 4. **Unspecified:** 17 posts 5. **English, Hebrew, Sanskrit (en, he, sa):** 1 post 6. **Dutch (nl):** 1 post ``` And that's it. We've just walked through a full

    "} />

    '} /> Next steps'} /> Hybrid Search with RRF in Spice eliminates external ranking servers, sync pipelines, or duplicated datasets; you can query, rank, and reason across disparate data sources from a single SQL interface. Whether you're powering an internal knowledge assistant or surfacing live content from social feeds, you get near-real-time, context-rich results with minimal overhead.

    " } /> Get started:

    '} />
  • Sign up for Spice Cloud for free, or get started with Spice OSS 
  • Explore the Hybrid Search Docs
  • Go through the RFF cookbook example
  • Schedule a demo if you\'d like full a walk-through
  • ' } /> '} /> --- ## Spice AI achieves SOC 2 Type II compliance URL: https://spice.ai/blog/spice-ai-achieves-soc-2-type-ii-compliance Date: 2024-03-05T19:25:00 Description: Spice AI achieves SOC 2 Type II compliance
    Spice AI has achieved SOC-2 Type II compliance.
    ' } /> In June last year, Spice AI announced enterprise-grade performance with our second-generation platform for sub-second SQL queries across 100TBs of time-series data.

    ' } /> Today, we're announcing Spice AI has achieved SOC 2 Type II compliance as of Feb 16, 2024, in accordance with American Institute of Certified Public Accountants (AICPA) standards for SOC for Service Organizations also known as SSAE 18. Achieving this standard with an unqualified opinion serves as third-party industry validation that Spice AI provides enterprise-level security for customer's data secured in the Spice AI platform.

    " } /> Spice AI provides a data and AI infrastructure platform that brings together the infra building blocks needed to build intelligent applications. Security is top-priority for Spice AI. Principles including Compliance, Secure-Access-Control, and Data Protection, are core to how we build and operate the Spice.ai platform, team, and company.

    ' } />
    The Spice.ai platform is built from security and compliance first-principles.
    ' } /> Spice AI was audited by Prescient Assurance, a leader in security and compliance attestation for B2B, SAAS companies worldwide. Prescient Assurance is a registered public accounting in the US and Canada and provides risk management and assurance services which includes but is not limited to SOC 2, PCI, ISO, NIST, GDPR, CCPA, HIPAA, and CSA STAR. For more information about Prescient Assurance, you may reach out them at info@prescientassurance.com.

    ' } /> An unqualified opinion on a SOC 2 Type II audit report demonstrates to Spice AI\'s current and future customers that we manage data and our platform with the highest standard of security and compliance. More information on Spice AI security can be found at https://docs.spice.ai/security/security.

    ' } /> ' } />

    '} /> --- ## The Spice.ai for GitHub Copilot Extension is now available! URL: https://spice.ai/blog/spice-ai-for-github-copilot-extension-now-available Date: 2024-10-27T19:07:00 Description: With the Spice.ai Extension, developers can interact with data, like product requirements documents (PRDs), tickets, and tabular data, from any external data source directly within GitHub Copilot. Save hours copying and pasting across various platforms, relevant data and answers are now surfaced in Copilot Chat, right when you need it. The new Spice.ai for GitHub Copilot Extension, now available in preview, gives developers access to data from external sources directly within the GitHub Copilot experience.

    ' } /> Developers often face the hassle of switching between multiple environments to get the data they need. Whether it's referencing internal documentation or copying details from another ticketing system, the constant context-switching disrupts focus and consumes valuable development time.

    " } /> With the Spice.ai Extension, developers can interact with data, like product requirements documents (PRDs), tickets, and tabular data, from any external data source directly within GitHub Copilot. Save hours copying and pasting across various platforms, relevant data and answers are now surfaced in Copilot Chat, right when you need it.

    ' } />
    Chatting with logs stored on S3 in Copilot Chat with the Spice.ai Extension.
    ' } /> Spice.ai Extension installation and activation' } /> Getting started with the Spice.ai Extension is easy. Get the extension directly from GitHub Copilot in just three steps! 

    ' } />
  • Type @spiceai in Copilot Chat to activate the extension
  • Click Connect to authorize the Spice.ai Cloud Platform - our enterprise-grade data and AI platform. Spice.ai integrates with GitHub for authentication, automatically creating an account and Copilot app, so you can easily configure data sources.
  • Next, you\'ll be able to choose from a set of ready-to-use datasets, like React.js and TailwindCSS, to get started. Spice.ai can also connect to a wide range of data sources, including GitHub repositories, SQL databases, data warehouses, data lakes, and GraphQL endpoints, which can be configured later.
  • ' } /> Now, with the Spice.ai Extension configured, you can mention @spiceai in Copilot Chat to access configured datasets, documentation, issue trackers, and more.

    ' } />
    Configuring the extension.
    ' } /> Use cases and prompts for the Spice.ai Extension' } /> The Spice.ai GitHub Copilot Extension, gives you access to external datasets, right within Copilot Chat. Here are just a few ways you can use it.

    ' } />
  • Query available datasets. Quickly list all available datasets
    • Try: @spiceai What datasets do you have access to?
  • Access relevant documentation. Need documentation related to the file or component you\'re working on?
    • Try: @spiceai What documentation is relevant to this file?
    • Try: @spiceai Write documentation about the user authentication issue.
  • Review tickets and issues. Sometimes issues, tickets, advisories might be stored in external systems
    • Try: @spiceai What OPEN issues are relevant to Next.js ISR?
    • Try: @spiceai Find the 5 most recent CLOSED issues in Next.js related to routing. Include a brief summary of each issue or fix and a link to the issue.
  • ' } /> Check out the video below to see how fast and simple it is to get started with the Spice.ai GitHub Copilot Extension.

    ' } /> Ready to Try the Spice.ai for Copilot Extension?' } /> You can start using the Spice.ai for GitHub Copilot Extension today. It\'s available in preview for free by the Community Edition, with usage limits. Stay tuned for the upcoming general availability launch, where we\'ll introduce paid commercial plans for professionals and organizations.

    ' } /> → Get the Spice.ai for GitHub Copilot Extension now.

    ' } /> Got questions or feedback? Let us know on the Spice AI Discord. Your feedback helps shape the future of the extension as we work to improve it and add more data sources.

    ' } /> We\'re excited to see how you\'ll use the Spice.ai for GitHub Copilot Extension to accelerate your development process. Follow the Spice.ai Blog for updates.

    ' } /> Learn more about Spice.ai and GitHub Copilot' } /> Spice AI is making data-driven AI app development simple and easy for developers. By providing tools that make data more accessible and actionable to AI, Spice AI helps developers to build useful and accurate AI applications faster.

    ' } />

    '} /> The Spice.ai GitHub for Copilot Extension was developed through the GitHub Copilot Partner Program, which supports partners building personalized workflows for Copilot. GitHub Copilot empowers developers by automating repetitive tasks and with proven results of boosting developer productivity by up to 55%, and Spice.ai.

    ' } />

    '} />

    '} /> --- ## Spice.ai is now generally available! URL: https://spice.ai/blog/spice-ai-is-now-generally-available Date: 2023-10-25T19:34:00 Description: Spice.ai is now available for everyone, including a new community-centric developer hub and Community Edition complimentary for developers. Powering intelligent applications with composable data and time-series AI building blocks

    ' } /> TL;DR'} /> Spice.ai, now publicly available, is your hub for building intelligent data and time-series AI applications.

    ' } /> Get composable, data and AI building blocks, including pre-trained machine learning models for AI predictions, and a petabyte-scale cloud data platform preloaded with 100TB+ of ready-to-use Web3, Asset Prices, and time-series data. Create, fork, and share hosted Datasets, Views, and ML Models with the new GitHub integrated Spice.ai Community Edition - complimentary for developers.

    ' } /> Login with GitHub to get started in seconds →

    ' } /> ' } /> Spice.ai is now generally available!' } /> Since the Waitlisted Preview launch last year, projects like YakoaEigenLayer, and Entendre Finance have leveraged building blocks from Spice AI\'s enterprise-grade platform to create high-performance, highly available, data and AI-driven applications.

    ' } /> Today, we're announcing Spice.ai is publicly available for everyone, including a brand-new community-centric hub and a new Community Edition plan complimentary for developers.

    " } /> Developers now have access to petabyte-scale cloud data and AI infrastructure, preloaded with 100TB+ of Web3, Asset Prices, and time-series data, delivered with SQL, Apache Arrow, and DuckDB. Community members can create, fork, and share datasets, and access data in real-time to power data-driven applications, monitoring, and analytics. Datasets can be fed directly into Spice.ai hosted ML training and inferencing for real-time decision-making applications.

    ' } /> Spice.ai is an application platform that brings together everything needed to build an intelligent application in one application-centric AI-backend-as-a-service.

    ' } /> ' } /> ' } /> ' } /> ' } /> Announcing new building blocks'} /> We're rolling out exciting new tools and features that can take your intelligent application development to the next level.

    " } /> Spice Firecache: Turbocharge Your SQL Queries' } /> Spice Firecache is a real-time, in-memory SQL service based on cloud-scale DuckDB instances that enables blazing fast SQL query up to 10x the performance of general SQL query. EigenLayer uses Spice Firecache to enable scenarios not possible before, including serving dynamic data to their high traffic dashboards, real-time monitoring, and analytics. ML models hosted on the Spice.ai platform can be paired with Firecache to power fast, low-latency inferencing, as demonstrated by the AI predictions demo on the Spice.ai website.

    ' } />
  • If you like DuckDB, you\'ll love it at cloud-scale, automatically provisioned and updated with real-time data.
  • ' } /> Spice Functions: Beyond SQL'} /> Spice Functions is a hosted Bacalhau service for serverless function compute that enables data transformation and processing co-located with your data and machine learning pipelines. Developers can write code in Go or Python. And every Spice Function deployment gets access to a dedicated hosted DuckDB instance for working data.

    ' } />
  • Spice Functions unlocks scenarios that are difficult, expensive, or even impossible in pure SQL, such as adding to a basic accumulator or applying a custom algorithm on each new block of data.
  • ' } />
    Adding PostgreSQL as an external data source.
    ' } /> Custom Datasets and Views: Your Data, Your Rules' } /> Developers can tailor Spice data to their application with Custom Datasets and Views, defined in GitHub, alongside their application code. Datasets can be populated with Spice Functions and by connecting to external data sources starting with PostgreSQL. We\'re excited to announce that Yakoa - IP protection for the blockchain - is one of the first projects to make their NFT data available in the Spice.ai platform with the release of their Copymint datasets.

    ' } />

    "Other solutions were prohibitively expensive - what we could do in Spice with a single query would have taken millions of API calls in other platforms." - Andrew Dworschak, CEO & Co-founder of Yakoa

    ' } /> We\'re also making over 15 EigenLayer datasets public that ecosystem participants can use to build data-driven experiences, like Nethermind has done with their Restaking Dashboard. Combined with Spice.ai\'s rich Ethereum Beacon chain data and HTTP API, observability into the EigenLayer universe has never been easier.

    ' } />
    Demo of Spice Firecache accelerated inferencing on Spice.ai hosted ML Models on the Spice.ai website.
    ' } /> Spice ML Models: Automated Machine Learning' } /> Like Datasets and Views, ML Model definitions are synced from GitHub to the Spice.ai platform and connected to Spice.ai hosted data, hosted machine learning pipelines, and Spice Firecache. The entire machine learning data lifecycle from origin to processing to training and inferencing is automatically and seamlessly managed by the Spice.ai platform so that developers can create decision-making applications, such as predicting and responding to resource requirements or mitigating potential security concerns with ease.

    ' } /> Summary'} /> With the release of Spice Firecache, Spice Functions, Custom Datasets and Views, ML Models, and a community-centric developer hub to build and share datasets like from innovators Yakoa and EigenLayer, developers have the next set of building blocks to ship intelligent software for application and ecosystem observability, real-time monitoring and security, AI-powered IP protection, and more!

    ' } /> Try the Spice.ai platform today →

    ' } />

    '} />

    '} /> --- ## Faster, Simpler Dashboards with Spice and Power BI URL: https://spice.ai/blog/spice-and-power-bi Date: 2025-09-15T18:51:00 Description: Spice AI built a Microsoft Power BI Connector on top of the Flight SQL ADBC driver that makes it easy for Power BI users to query across operational databases, analytical warehouses, and object stores. TL;DR'} /> Spice AI built a Microsoft Power BI Connector on top of the Flight SQL ADBC driver that makes it easy for Power BI users to query across operational databases, analytical warehouses, and object stores. Spice federates large OLTP and OLAP datasets and accelerates them at the application layer in DuckDB and Arrow to support sub-second dashboards, driving significant performance and ease-of-use improvements for enterprise BI use cases. Under the hood, Spice leverages Arrow Database Connectivity (ADBC) and Flight SQL for Arrow-native performance that eliminates row-to-column conversion overhead.

    ' } /> The Enterprise BI Challenge'} /> Enterprises rely on Power BI to analyze and visualize data, but the data itself often lives across many systems: operational databases like Postgres or MongoDB, historical datasets in S3 or Delta/Iceberg tables, and real-time streams from systems like Kafka. Traditionally, making this data available in Power BI requires complex ETL pipelines, duplicated storage in various warehouses, and ongoing engineering effort to keep everything in sync. This results in dashboards with slow refresh times and fragile, operationally-intensive pipelines.  

    ' } /> Spice changes this dynamic by combining query federation and local acceleration into a single, lightweight runtime. Instead of copying data into a warehouse, Spice connects directly to distributed systems, federates queries across them, and accelerates datasets with DuckDB and Apache Arrow at the application layer. 

    ' } /> Introducing the Spice.ai Power BI Connector, Built on ADBC' } /> The Spice.ai Power BI Connector sits between Power BI and the systems it needs to query. Data federation removes the need to consolidate sources up front, and Power BI can treat them as if they were a single dataset; analysts can configure Spice once and immediately query across their data estate. For Power BI users, this means dashboards can run on live data from OLTP and OLAP sources without the burden of additional infrastructure management.

    ' } />

    '} />
    Figure 1: Data Federation in Spice
    ' } />

    '} /> Acceleration with DuckDB & Arrow' } /> Federation simplifies connectivity, but acceleration delivers performance; the Spice runtime prefetches working sets of data from these upstream systems and locally accelerates them using DuckDB and Apache Arrow. This eliminates repeated network round-trips, stores data closer to applications, and enables sub-second queries - even for billion-row datasets. Data can be refreshed on a schedule or in real time with CDC, ensuring dashboards always present the latest information.

    ' } /> Further, unlike traditional lakehouses that focus on analytical workloads, Spice accelerates both operational and analytical data. Teams can query transactional sources like Postgres alongside large analytical datasets in S3, all with the same sub-second performance and without overwhelming production databases. For example, Spice can ingest row-based Postgres tables, accelerate them in DuckDB, and serve the results to Power BI in columnar Arrow format for interactive dashboards.

    ' } />

    '} />
    Figure 2: Acceleration in Spice
    ' } /> Decreasing Latency with ADBC'} /> Under the hood, the Spice.ai Power BI Connector is built on the Arrow Database Connectivity (ADBC) and Flight SQL. ADBC provides a vendor-agnostic, Arrow-native standard for delivering columnar data directly to applications and dashboards. In contrast to JDBC and ODBC, ADBC avoids row/column conversions and provides a faster, more efficient path for analytical queries.

    ' } /> Use Case Example: Faster Power BI Queries in Spice Compared to RDS' } /> Let's take this out of the abstract and introduce a practical use case to illustrate the value of Spice.

    " } /> Consider an order management platform that previously relied on an AWS RDS database for recent transactions and S3 for longer-term history. Without Spice, a dashboard showing historical orders would require querying RDS directly, moving potentially millions of rows across the network, and joining that data with S3 data in a warehouse. With Spice, those tables can be federated, accelerated locally, and queried directly by Power BI. 

    ' } /> The video illustrates the performance delta between Spice's acceleration model (the dashboard on the right side of the screen) and a more traditional approach of querying RDS directly (the dashboard on the left side of the screen): query time is decreased from 1324 ms to 223 ms with Spice compared to RDS. That's the difference between a clunky analyst experience and an interactive, real-time workflow.

    " } />

    '} /> ' } />

    '} /> Before (without Spice)'} />
  • Data must be moved into a warehouse via ETL jobs.
  • Dashboards refresh slowly because data flows through JDBC/ODBC, converting columnar to row back to column again.
  • Engineering teams maintain multiple pipelines and troubleshoot schema mismatches.
  • ' } /> After (with Spice + ADBC)'} />
  • Both Postgres and S3 datasets are defined in a Spicepod (the core configuration unit in Spice, a YAML-based package that defines the datasets, models, and acceleration an application requires). 
  • Power BI connects to Spice through the ADBC-based connector.
  • Federated queries run directly across both sources; results return in Arrow format with no row/column conversions.
  • Data stored in Postgres is accelerated in DuckDB.
  • Dashboards refresh in sub-seconds. Pipelines are eliminated, and analysts can build new reports faster.
  • ' } /> Walkthrough: Installing and Using the Connector' } /> Power BI Desktop'} />
  • Download the latest spice_adbc.mez file from the releases page 
  • Copy to the Power BI Custom Connectors directory: C:\\Users\\[USERNAME]\\Documents\\Microsoft Power BI Desktop\\Custom Connectors
  • ' } /> ```python Invoke-WebRequest -Uri "https://github.com/spiceai/powerbi-connector/releases/latest/download/spice_adbc.mez" -OutFile "C:\Users\[USERNAME]\Documents\Microsoft Power BI Desktop\Custom Connectors\spice_adbc.mez" ```
  •  Enable Uncertified Connectors in Power BI Desktop settings and restart Power BI Desktop.
  • ' } /> Adding Spice as a Data Source'} />
  • Open Power BI Desktop.
  • Click on Get Data → More....
  • In the dialog, select Spice.ai connector.
  • ' } /> ' } />

    '} />
  • Click Connect.
  • Enter the ADBC (Arrow Flight SQL) Endpoint:
    • For Spice Cloud Platform:
      grpc+tls://flight.spiceai.io:443
      (Use the region-specific address if applicable.)
    • For on-premises/self-hosted Spice.ai:
      • Without TLS (default): grpc://<server-ip>:50051
      • With TLS: grpc+tls://<server-ip>:50051
  • ' } /> ' } />
  • Select the Data Connectivity mode:
    • Import: Data is loaded into Power BI, enabling extensive functionality but requiring periodic refreshes and sufficient local memory to accommodate the dataset.
    • DirectQuery: Queries are executed directly against Spice in real-time, providing fast performance even on large datasets by leveraging Spice\'s optimized query engine.
  • Click OK.
  • Select Authentication option:
    • Anonymous: Select for unauthenticated on-premises deployments.
  • ' } /> API Key: Your Spice.ai API key for authentication (required for Spice Cloud). Follow the guide to obtain it from the Spice Cloud portal.

    ' } /> ' } />
  • Click Connect to establish the connection.
  • ' } /> Working with Spice datasets'} /> After establishing a connection, Spice datasets appear under their respective schemas, with the default schema being spice.public. When writing native queries, use the PostgreSQL dialect, as Spice is built on this standard.

    ' } /> ' } /> For a list of supported data types, visit the docs here.

    ' } /> Getting started with Spice and Power BI' } /> Spice extends Power BI beyond the traditional limits imposed on it by sub-optimal ETL pipelines.

    ' } /> Spice enables Power BI users to:

    '} />
  • Run federated SQL queries across disparate data sources in one place with zero ETL required. 
  • Accelerate and materialize large datasets for sub-second dashboards in Power BI.
  • Use either Import Mode for full feature access or DirectQuery Mode for real-time results.
  • Build on open standards like ADBC and Apache Arrow, not on proprietary SDKs.
  • ' } />

    '} /> To try it out, download the Spice Power BI Connector and follow the documentation. Configure your first dataset, connect Power BI, and experience how federation and acceleration can make your dashboards faster and more reliable.

    ' } /> Resources'} />
  • Sign up for Spice Cloud for free, or get started with Spice Open Source
  • Install the connector
  • Explore the Spice cookbooks and docs 
  • ' } />

    '} /> --- ## Spice Cloud v1.10: Caching Acceleration Mode, DynamoDB Streams Support, & More! URL: https://spice.ai/blog/spice-cloud-v1-1-0 Date: 2025-12-10T18:30:11 Description: Spice v1.10 includes a new caching acceleration mode, a new DynamoDB Streams data connector in preview, Amazon S3 location-based pruning, S3 Tables write support, and several performance and security improvements. Spice Cloud & Spice.ai Enterprise 1.10 are live!

    '} /> Spice v1.10 includes a new caching acceleration mode, a new DynamoDB Streams data connector in preview, Amazon S3 location-based pruning, S3 Tables write support, and several performance and security improvements.

    ' } /> New in Spice Cloud: Persisted Metrics!' } /> View complete monitoring history after restarts, ensuring no gaps in visibility.

    ' } /> ' } /> Spice Cloud customers will automatically upgrade to v1.10 on deployment, while Spice.ai Enterprise customers can consume the Enterprise v1.9.0 image from the Spice AWS Marketplace listing.

    ' } /> What\'s New in v1.10'} /> Caching Acceleration Mode'} /> Spice's new caching acceleration mode provides stale-while-revalidate (SWR) behavior for accelerations with background refreshes, enabling file-persisted caching using Cayenne, DuckDB, or SQLite.

    " } />
    Figure 1: Spicepod.yaml caching acceleration configuration example
    ' } /> Learn more about getting started with caching accelerator in in the acceleration docs.

    ' } /> DynamoDB Streams Support (Preview)' } /> The DynamoDB connector now integrates with DynamoDB Streams, enabling real-time change-data-capture (CDC) for DynamoDB with automatic table bootstrapping and acceleration snapshots support.

    ' } />
    Figure 2: DynamoDB Streams Spicepod.yaml configuration example
    ' } /> Learn more about using DynamoDB Streams in the docs.

    ' } /> S3 Data Connector Improvements '} /> The S3 data connector now supports location-based predicate pruning - dramatically reducing data scanned by pushing down location filter predicates to S3 listing operations. And, AWS S3 Tables now have full read/write capability in Spice!

    ' } />
    Figure 3: Location-based predicate pruning example
    ' } />
    Figure 4: S3 writes example
    ' } /> Learn more in the S3 data connector docs.

    ' } /> TinyLFU Cache Eviction Policy '} /> TinyLFU is now available for the SQL results cache! TinyLFU is a probabilistic cache admission policy that maintains higher hit rates than LRU (Least Recently Used) while keeping memory usage predictable, making it ideal for workloads with uneven query patterns

    ' } />
    Figure 5: TinyLFU configuration example
    ' } /> Learn more in the caching docs.

    ' } /> Additional Updates'} />
  • Search optimizations for faster full-text-search (FTS) queries, reduced vector index overhead, and better limit pushdown.
  • Security hardening including stronger identifier handling, expanded token redaction, and safe archive extraction.
  • Developer experience updates including new health probe latency metrics and REPL history improvements. 
  • ' } /> For more details on v1.10, visit the release notes.

    ' } /> New to the Spice Cookbook'} /> DynamoDB Streams'} /> ' } /> Learn how to configure a Spice dataset to stream real-time changes from an AWS-hosted DynamoDB table using DynamoDB Streams. Watch as inserts, updates, and deletes automatically flow into Spice!

    ' } /> Try the DynamoDB Streams cookbook here.

    ' } /> Caching Accelerator '} /> ' } /> This recipe walks you through the setup and core functionality for the new caching accelerator, which provides intelligent caching for HTTP-based datasets with Stale-While-Revalidate (SWR) support.

    ' } /> Try the caching accelerator cookbook here.

    ' } /> Schedule a demo if you\'d like to see the product live or have any questions, sign up for Spice Cloud for free, or get started with Spice Open Source.

    ' } /> --- ## Spice Cloud v1.11: Spice Cayenne Reaches Beta, Apache DataFusion v51, DynamoDB Streams Improvements, & More URL: https://spice.ai/blog/spice-cloud-v1-11 Date: 2026-01-30T17:56:27 Description: v1.11 brings Spice Cayenne to Beta, DataFusion v51 and Apache Arrow v57.2, improved DynamoDB Streams, and more. We're excited to announce Spice v1.11 is now available in Spice Cloud - a major release with over 43 new features, improvements, and fixes. 
     
    Spice v1.11 brings Spice Cayenne to Beta with 3x lower memory usage than DuckDB, significant performance upgrades across the entire compute stack: DataFusion v51, Apache Arrow v57.2, improved DynamoDB Streams, and an optimized caching acceleration mode. 
     
    And, Spice Cloud monitoring has new real-time metrics and dashboards! 

    " } /> Monitor your Spice Cloud apps in production ' } /> New real-time dashboards give you complete visibility into API performance, data egress, and cache efficiency - so you can optimize costs and catch issues before they impact users. 

    ' } />
    Figure 1. HTTP and Flight API request dashboards for insights into volume, latency, and query performance.
    ' } />

    '} />
    Figure 2. Track data egress costs and cache hit rates in real-time. 
    ' } /> New to Spice Cloud? Sign up and get $25 in free AI credits. Query databases, data lakes, and data warehouses, add instant RAG and AI analysis with zero-ETL. (US customers only). 

    ' } /> Spice Cloud customers will automatically upgrade to v1.10 on deployment, while Spice.ai Enterprise customers can consume the Enterprise v1.9.0 image from the Spice AWS Marketplace listing.

    ' } /> Join the v1.11 Release Community Call ' } /> ' } /> Connect with the Spice team and community for live demos of what's new in v1.11. Ask questions, share feedback, and get a preview of what's next. 

    " } /> ' } /> Major v1.11 Features' } /> Spice Cayenne Beta ' } /> Spice Cayenne TPCH Benchmark
    Figure 3. Spice Cayenne TPC-H SF-100 benchmark
    ' } /> Spice Cayenne, the premier Spice data accelerator built on the Vortex columnar format, has been promoted to Beta. Cayenne delivers 1.4x faster queries than DuckDB with 3x lower memory usage on TPC-H SF100 benchmarks. 

    ' } /> New Cayenne features in v1.11 include: 

    ' } />
  • Acceleration Snapshots: Point-in-time recovery for fast bootstrap and rollback capabilities 
  • Key-based Deletion Vectors: More efficient data management and faster delete operations 
  • S3 Express One Zone: Store Cayenne files in S3 Express One Zone for single-digit millisecond latency 
  • Primary Key On-Conflict Handling: New `on_conflict` config for Cayenne tables with primary keys supports upsert or duplicate-ignore behavior 
  • ' } /> ' } /> Apache DataFusion v51 Upgrade ' } />
    Figure 4: Apache DataFusion performance improvements. Source: DataFusion docs.
    ' } /> DataFusion v51 brings significant performance improvements and new SQL functionality: 

    ' } /> Performance: 

    ' } />
  • Faster CASE expression evaluation with short-circuit optimization 
  • Better defaults for remote Parquet reads (avoids 2 I/O requests per file) 
  • 4x faster Parquet metadata parsing  
  • ' } /> New SQL features: 

    ' } />
  • Support for |> syntax for inline transforms 
  • `DESCRIBE <query>` returns schema of any query without executing it  
  • Named function arguments `param => value` syntax for scalar, aggregate, and window functions 
  • Decimal32/Decimal64 type support 
  • ' } /> ' } /> Apache Arrow 57.2 Upgrade ' } />
    Figure 5. Apache Parquet performance with Thrift Parser.
    ' } /> Arrow 57.2 delivers major performance improvements: 

    '} />
  • 4x faster Parquet metadata parsing with rewritten thrift metadata parser 
  • Parquet Variant Support (Experimental): Read/write support for semi-structured data 
  • Parquet Geometry Support: Read/write for `GEOMETRY` and `GEOGRAPHY` types 
  • New `arrow-avro` Crate: Efficient conversion between Apache Avro and Arrow with projection pushdown 
  • ' } /> ' } /> DynamoDB Connector & DynamoDB Streams Improvements ' } />
    Figure 6. DynamoDB Streams configuration.
    ' } /> DynamoDB Streams are now more reliable and flexible with JSON nesting support and improved batch deletion handling. 

    ' } /> ' } /> Caching Acceleration Mode Improvements ' } />
    Figure 6. Sample caching acceleration mode configuration.
    ' } /> Major performance optimizations and reliability fixes for caching acceleration mode deliver sub-millisecond cached queries with faster response times on cache misses. 

    ' } /> Performance: 

    ' } />
  • Non-blocking cache writes: Cache misses no longer block query responses; data writes asynchronously 
  • Batch cache writes: Multiple entries written in batches for better throughput 
  • ' } /> Reliability: 

    ' } />
  • Stale-While-Revalidate (SWR) behavior: Refreshes only the entries that were accessed instead of refreshing all stale rows  
  • Deduplicated refresh requests: Prevents redundant source queries 
  • Fixed cache hit detection: Queries now correctly detect cached data 
  • ' } /> ' } /> Additional Features ' } /> Prepared Statements: Spice now supports prepared statements, enabling parameterized queries that improve performance and security by preventing SQL injection attacks with full SDK support across the Go, Rust, .NET, Java, JavaScript, and Python clients. 

    ' } /> iceberg-rust v0.8.0: v0.8.0 brings support for Iceberg V3 table metadata format, INSERT INTO for partitioned tables, and more. 

    ' } /> Acceleration Snapshots Improvements: Additions in v1.11 include flexible triggers based on time intervals or batch counts, automatic compaction to reduce storage overhead, and better creation policies that only create snapshot when data changes. 

    ' } /> New Data Connectors 

    ' } />
  • NFS: Query data on Unix/Linux NFS exports 
  • ScyllaDB: Query the high-performance NoSQL database via CQL. 
  • ' } /> Google LLM Support: Spice now supports Google embedding and chat models via the Google AI provider 

    ' } /> URL Tables: Query data directly via URL in SQL from S3, Azure Blob Storage, and HTTP/HTTPS. 

    ' } /> Hash Indexing for Arrow Acceleration (experimental): Arrow-based accelerations now support opt-in hash indexing for faster point lookups on equality predicates.

    ' } /> From the Blog: How we Use Apache DataFusion at Spice AI  ' } /> ' } /> A technical deep-dive on how Spice uses and extends Apache DataFusion with custom table providers, optimizer rules, and UDFs to power federated SQL, search, and AI inference. 

    ' } /> ' } /> From the Blog: Real-Time Control Plane Acceleration with DynamoDB Streams' } /> ' } /> Learn how to stream DynamoDB data to thousands of nodes with sub-second latency using a two-tier architecture with DynamoDB Streams and Spice acceleration. 

    ' } /> ' } /> New Recipe in the Spice Cookbook: ScyllaDB Connector   ' } /> ' } /> Learn how to connect Spice to ScyllaDB for sub-second federated queries. 

    ' } /> ' } /> As always, we\'d love your feedback! Join us on Slack to connect directly with the team and other Spice users.

    ' } />

    '} /> --- ## Spice Cloud v1.8.0: Iceberg Write Support, Acceleration Snapshots & More URL: https://spice.ai/blog/spice-cloud-v1-8-0-iceberg-writes Date: 2025-10-08T17:29:00 Description: Announcing Spice Cloud v1.8.0 - now with Iceberg write support, acceleration snapshots, partitioned S3 Vectors indexes & a new AI SQL function
    Spice Cloud & Spice.ai Enterprise 1.8.0 are live! v1.8.0 includes Iceberg write support, acceleration snapshots, partitioned S3 Vector indexes, a new AI SQL function for LLM integration, and an updated Spice.js SDK.

    ' } /> V1.8.0 also introduces developer experience upgrades, including a redesigned Spice Cloud dashboard with tabbed navigation:

    ' } />
    Figure 1: Switch between datasets, queries, and models without losing context.
    ' } /> Spice Cloud customers will automatically upgrade to v1.8.0 on deployment, while Spice.ai Enterprise customers can consume the Enterprise v1.8.0 image from the Spice AWS Marketplace listing.

    ' } /> What\'s New in v1.8.0'} /> Iceberg Write Support (Preview)' } /> Spice now supports writing to Apache Iceberg tables using standard SQL INSERT INTO statements. This greatly simplifies creating and updating Iceberg datasets in the Spice runtime - letting teams directly manipulate open table data with SQL instead of third-party tools. Get started with Iceberg writes in Spice here.

    ' } /> Example query:

    '} /> ```python -- Insert from another table INSERT INTO iceberg_table SELECT * FROM existing_table; -- Insert with values INSERT INTO iceberg_table (id, name, amount) VALUES (1, 'John', 100.0), (2, 'Jane', 200.0); -- Insert into catalog table INSERT INTO ice.sales.transactions VALUES (1001, '2025-01-15', 299.99, 'completed'); ``` Acceleration Snapshots (Preview)'} /> A new snapshotting system enables datasets accelerated with file-based engines (DuckDB or SQLite) to bootstrap from stored snapshots in object storage like S3 - significantly reducing cold-start latency and simplifying distributed deployments. Learn more.

    ' } /> Partitioned Amazon S3 Vector Indexes' } /> Vector search at scale is now faster and more efficient with partitioned Amazon S3 Vector indexes - ideal for large-scale semantic search, recommendation systems, and embedding-based applications. Learn more.

    ' } /> AI SQL Function (Preview)'} /> A new asynchronous ai SQL function enables developers to call large language models (LLMs) directly from SQL, making it possible to integrate LLM inference directly into federated or analytical workflows without additional services. Learn more.

    ' } /> Spice.js v3.0.3 SDK'} /> v3.0.3 brings improved reliability and broader platform support. Highlights include new query methods, automatic transport fallback between gRPC and HTTP, and built-in health checks and dataset refresh controls. Learn more.

    ' } /> Bug & Stability Fixes'} /> v1.8.0 also includes numerous fixes and improvements:

    '} />
  • Reliability: Improved logging, error handling, and network readiness checks across connectors (Iceberg, Databricks, etc.).
  • Vector search durability and scale: Refined logging, stricter default limits, safeguards against index-only scans and duplicate results, and always-accessible metadata for robust queryability at scale.
  • Cache behavior: Tightened cache logic for modification queries.
  • Full-Text Search: FTS metadata columns now usable in projections.
  • RRF Hybrid Search: Reciprocal Rank Fusion (RRF) UDTF enhancements for advanced hybrid search scenarios.
  • ' } />

    '} /> For more on v1.8.0, check out the full release notes.

    ' } /> v1.8 Release Community Call'} /> Join us on Thursday, October 16th for live demos of the new functionality delivered in v1.8! Register here.

    ' } />
    Figure 2: October 16th, v1.8 Release Community Call
    ' } /> Resources to Get Started with Spice' } />
  • Sign up for Spice Cloud for free, or get started with Spice Open Source
  • Explore the Spice cookbooks and docs
  • Schedule a demo if you\'d like to see the product live or have any questions
  • ' } />

    '} /> --- ## Spice Cloud v1.9.0: Introducing the Spice Cayenne Data Accelerator URL: https://spice.ai/blog/spice-cloud-v1-9-0-cayenne-data-accelerator Date: 2025-11-20T18:21:00 Description: Spice Cloud v1.9.0 adds the Cayenne Data Accelerator, Apache DataFusion v50, HTTP data connector support for querying endpoints as tables, and much more. Spice Cloud & Spice.ai Enterprise 1.9.0 are live!

    '} /> Our mission at Spice is to make building data-intensive applications and AI systems easier, faster, and more secure. With v1.9.0, we're taking a big step forward.

    " } /> This release introduces Spice Cayenne, our new premier data accelerator based on Vortex, upgrades to DataFusion v50 and DuckDB v1.4.2, new HTTP Data Connector support for querying API endpoints as tables, and many more improvements across performance, scalability, and developer experience.

    ' } /> Spice Cloud customers will automatically upgrade to v1.9.0 on deployment, while Spice.ai Enterprise customers can consume the Enterprise v1.9.0 image from the Spice AWS Marketplace listing.

    ' } /> What\'s New in v1.9.0'} /> Cayenne Data Accelerator (Beta)'} /> Cayenne is the new premier data accelerator for high-volume, multi-file workloads. Built on the Vortex columnar format from the Linux Foundation, Cayenne offers better ingestion and query performance than DuckDB without single-file scaling limits. Spice Cayenne supports high concurrency, retention policies, and SQL-based lifecycle management.

    ' } />
    Figure 1: TPC-H SF-100 benchmark
    ' } />
    Figure 2: ClickBench benchmark
    ' } /> Learn more about getting started with Cayenne in the docs.

    ' } /> Apache DataFusion v50 Upgrade'} /> DataFusion v50 features faster filter pushdown, new SQL functions, and more reliable execution plans. Learn more in the Apache DataFusion blog.

    ' } />
    Figure 3: Apache DataFusion performance improvements
    ' } /> HTTP Data Connector: Query Endpoints as Tables' } /> Query HTTP endpoints as tables in SQL queries with dynamic filters, with full support for results-caching including new stale-while-revalidate (SWR) support. Learn more here.

    ' } />
    Figure 4: HTTP data connector query
    ' } /> Full-Text and Vector Search on Views' } /> You can now add full-text indexes or embeddings to accelerated views for advanced search across pre-aggregated or transformed data. Vector engines on views are now also supported. Visit the search and embeddings docs for more information.

    ' } />
    Figure 5: Full-text and vector search on views example
    ' } /> AWS Authentication Improvements' } /> AWS SDK credential initialization now includes more robust retry logic and better handling, supporting transient and extended network and AWS outages without manual intervention. Learn more.

    ' } /> Additional Updates'} />
  • DuckDB v1.4.2: Composite ART indexes for accelerated table scans, intermediate materialization, and better refresh performance
  • Git Data Connector: Query data directly from Git repositories 
  • DynamoDB Connector Improvements: Improved filter handling, parallel scan support, and better handling for misconfigured queries
  • Spice Java SDK v0.4.0 with configurable memory limits
  • CLI Improvements: version pinning, persistent query history, and tab completion
  • Dedicated Query Thread Pool is now enabled by default
  • ' } /> For more details on v1.9.0, visit the release notes.

    ' } /> --- ## Spice Firecache | Cloud-Scale DuckDB URL: https://spice.ai/blog/spice-firecache Date: 2023-12-05T19:28:00 Description: Cloud-Scale DuckDB Spice AI is not just another data indexer or data provider.

    '} /> Spice.ai is a set of AI/ML-infra building blocks for creating data and AI-driven applications - web3 data included.

    ' } /> In October\'s General Availability announcement we also announced Spice Firecache.

    ' } /> Spice Firecache is a real-time, in-memory SQL service based on cloud-scale DuckDB instances that enables blazing fast SQL query up to 10x the performance of general SQL query. For example, EigenLayer uses Spice Firecache to enable scenarios not possible before, including serving dynamic data to their high traffic dashboards, real-time monitoring, and analytics. ML models hosted on the Spice.ai platform can be paired with Firecache to power super-fast, low-latency inferencing, as demonstrated by the AI predictions demo on the Spice.ai website.

    ' } /> If you like DuckDB, you'll love it at cloud-scale, automatically provisioned and updated with real-time data.

    " } />
    Experience high concurrency, blazing fast SQL query up to 10x the performance of general SQL query in the Firecache Playground.
    ' } /> 🔥 Spice Firecache in Preview'} /> Spice.ai is preloaded with over 100TBs of Web3 and Asset Prices data which can be combined with your own PostgreSQL, MySQL, and data lake external data sources. While organizations need access to terabytes or petabytes of data, the working set of data that is used day-to-day is often orders of magnitude smaller, generally in the 10s of GBs.

    ' } /> Cloud-Scale DuckDB. Spice Firecache enables you to configure specific datasets for inclusion into cloud-scale managed DuckDB instances for query performance 10x or sometimes even 100x faster than general SQL query.

    ' } /> Platform managed. The entire Firecache data lifecycle, from ETL to query ensures datasets are updated in real-time and is completely platform managed. All the user has to do is enable Firecache on a dataset, via configuration as code through GitHub-connected Datasets, deploy it, and start querying.

    ' } /> Easy to query. Once datasets have been deployed, they can be queried by the same interfaces as general SQL query, including with the Playground SQL Query Editor in the Spice.ai portal, the HTTP API, the Apache Arrow Flight API, and SDKs.

    ' } /> Dedicated instances. Dedicated Firecache instances are deployed per organization and are Spice app-specific, only available to the Spice app to which they were deployed.

    ' } /> Easy to integrate. Simply swap to using the Firequery() method instead of the Query() method using one of the GoPythonNode.js, or Rust SDKs to start using Firecache.

    ' } /> What it enables'} /> Intelligent data and AI-driven software is often limited by the speed and cost of data retrieval from big data warehouses and systems.

    ' } /> High-performance access to data is required to power real-time operations, observability, analytics, ML inferencing, and recently popular Retrieval-Augmented Generation (RAG) for large-language-models (LLMs).

    ' } /> By keeping the day-to-day working set of frequently queried data available in Firecache, data retrieval latency can be significantly reduced, resulting in higher-performance (and lower-cost) frontends, applications, and AI-powered insights.

    ' } /> This is particularly beneficial for customers like EigenLayer who quickly rose to popularity, needing to make 10s of millions of SQL queries a month and growing to power their dynamic community and user dashboards. Spice Firecache ensures that software can meet user expectations for speed and interactivity, supercharging the user experience, all while reducing cost.

    ' } /> Spice Firecache is currently available in preview for Spice AI Design Partners and Enterprise customers.

    ' } /> Get in touch at hey@spice.ai if you\'d like to trial Firecache for free.

    ' } /> Thank you!

    '} /> The Team at Spice AI

    '} /> 🌐 Community updates:

    '} /> Spice AI recently partnered with RISC Zero, a leader in Zero-Knowledge (ZK) technology to provide ZK-provable ML inferencing for Ethereum gas-fees.

    ' } /> Read the full case-study at spice.ai/cases/risc-zero.

    ' } /> 👥 Join the growing Spice AI Community:

    ' } /> Twitter | LinkedIn | GitHub | Discord | Telegram

    ' } /> 💡 We're hiring! 💡

    " } /> We\'re looking for innovators across engineering, design, and devrel. Discover the latest opportunities at Spice AI here and learn how you can play a leading role in shaping the future of intelligent software and application development.

    ' } /> About Spice AI'} /> Spice.ai is a set of AI/ML-infra building blocks for creating data and AI-driven applications - web3 data included.

    ' } /> ​Spice AI eliminates the complexity of building and operating costly data and AI infrastructure by composing real-time and historical time-series data, custom ETL, machine learning training and inferencing, in a high-performance, enterprise-grade platform.

    ' } /> Have questions or feedback? Get in touch on Discord.

    ' } /> Spice.ai | View previous releases

    ' } />

    '} />

    '} /> --- ## Spice OSS, rebuilt in Rust URL: https://spice.ai/blog/spice-oss-rebuilt-in-rust Date: 2024-04-01T19:19:00 Description: Spice.ai is now available for everyone, including a new community-centric developer hub and Community Edition complimentary for developers. Last week we announced the next-generation of Spice OSS, the technology behind Spice Firecache, completely rebuilt from the ground up in Rust.

    ' } /> Spice OSS is as a unified SQL query interface and portable runtime to locally materialize, accelerate, and query data tables sourced from any database, data warehouse or data lake.

    ' } /> Spice federates SQL query across databases (MySQL, PostgreSQL, etc.), data warehouses (Snowflake, BigQuery, etc.) and data lakes (S3, MinIO, Databricks, etc.) so you can easily use and combine data wherever it lives. And of course Spice OSS connects to the Spice.ai Cloud Platform.

    ' } /> Datasets can be materialized and accelerated using your engine of choice, including DuckDB, SQLite, PostgreSQL, and in-memory Apache Arrow records, for ultra-fast, low-latency query. Accelerated engines run in your infrastructure giving you flexibility and control over price and performance.

    ' } /> You can get started with Spice on your own machine in less than 30 seconds by following the quickstart at github.com/spiceai/spiceai as Phillip demonstrated below.

    ' } /> --- ## Getting Started with Spice.ai SQL Query Federation & Acceleration URL: https://spice.ai/blog/spice-sql-query-federation-acceleration Date: 2025-10-14T17:15:00 Description: Learn how to use Spice.ai to federate and accelerate queries across operational and analytical systems with zero ETL. Modern applications succeed when they can deliver speed, intelligence, and reliability at scale. Achieving that depends increasingly on how quickly and efficiently they can access the relevant underlying data sources. Most enterprises, however, rely on pipelines, warehouses, and APIs that make real-time or intelligent apps prohibitively expensive or slow. Engineering teams are faced with how to make these fragmented systems faster, more secure, and more productive without rebuilding from scratch. Spice was built to solve this problem, delivering SQL query federation and local acceleration in a lightweight, portable runtime that turns distributed data environments into a high-performance data layer capable of supporting the most demanding workloads.

    ' } />
    Figure 1: Federated SQL Query in Spice
    ' } /> The Current State of Data Access in the Enterprise' } /> The primary mandate for development teams is satisfying the performance, availability, and security benchmarks your use case mandates at a cost profile that makes sense for your business; how you satisfy those requirements in terms of the underlying technology deployed is ultimately an implementation detail. 

    ' } /> It's evident that this philosophy is put into practice when you take a peek behind the 'enterprise curtain', where you'll see a patchwork of different systems deployed at different layers of abstraction: operational and analytical apps built on on-premise, cloud, hybrid, or serverless infrastructure depending on the use case. 

    " } /> In order to make these very heterogenous architectures operational, historically (largely by necessity) development teams would have to patch together a variety of pipelines to connect to data spread out across the enterprise: customer records in transactional databases, historical data in warehouses or data lakes, semi-structured content in object stores, etc. All across a variety of deployment tiers. 

    ' } /> How can you make your existing infrastructure investment more productive, secure, and performant, while also serving the low-latency data access that intelligent applications and agents demand? Copying everything into a single warehouse no longer satisfies the performance, security, or cost requirements of modern workloads.

    ' } /> How Spice\'s SQL Federation & Acceleration Solves the Data Access Problem' } /> Spice is an open-source data and AI platform that federates and accelerates your operational and analytical data and deploys it at the application layer. Instead of centralizing all data in one system, it lets teams query data in place across multiple sources in a lightweight runtime that runs anywhere - edge, cloud, or on-prem. 

    ' } />
  • SQL Query Federation: Run SQL queries across OLTP databases, OLAP warehouses, and object stores without ETL.
  • ' } /> Spice.ai Open Source Query Federation
    Figure 2: SQL Query Federation in Spice
    ' } />

    '} /> SQL Query Acceleration: Cache or index working sets locally in DuckDB or SQLite, cutting query latency from seconds to milliseconds.

    ' } />
    Figure 3: SQL Query Acceleration in Spice
    ' } /> By combining federation and acceleration in a single runtime, Spice reduces infrastructure complexity and delivers the sub-second latency needed for real-time apps and AI agents - whereas traditional approaches rely on heavy ETL pipelines or pre-aggregations to make object storage and open table formats queryable. And for use cases that demand search, Spice packages keyword, vector, and full-text search in one SQL query for truly hybrid retrieval.

    ' } /> This breadth of capabilities brings object storage fully into the operational path; Spice turns object storage into active, queryable data layers that support real-time ingestion, transformation, and retrieval. You can query data where it lives, ingest real-time updates through change-data-capture (CDC), index for vector and full-text search, and write directly back to Iceberg tables using standard SQL.

    ' } /> Use Case Example: Combining S3, PostgreSQL, and Dremio Data in Single Query' } /> Consider a customer portal that needs to show per-customer delivery stats in real time, which for this use case means joining customer orders in S3 with trip data stored in Dremio. With a traditional pipeline, this would require duplicating data into a warehouse, incurring both cost and latency.

    ' } /> Spice, conversely, federates and accelerates that data locally. Here's what it looks like in practice (which you can validate for yourself in the next section):

    " } />
  • Raw S3 query (~2,800 rows): 0.87s
  • Accelerated S3 query with Spice: 0.02s (40x faster)
  • Raw Dremio query (100,000 rows): 2.67s
  • Accelerated Dremio query with Spice: 0.01s (250x faster)
  • Federated aggregation across both: 0.009s
  • ' } /> This performance delta transforms multi-system queries from a batch job into something fast enough for an interactive app.

    ' } /> Cookbook: How To Run It Yourself' } /> Watch the video and follow along with the cookbook below to see how to fetch combined data from S3 Parquet, PostgreSQL, and Dremio in a single query.

    ' } /> Follow these steps to use Spice to federate SQL queries across data sources' } /> Step 1. Clone the github.com/spiceai/cookbook repo and navigate to the federation directory.

    ' } /> ```python git clone https://github.com/spiceai/cookbook cd cookbook/federation ``` Step 2. Initialize the Spice app. Use the default name by pressing enter when prompted.

    ' } /> ```python spice init name: (federation)? ``` Step 3. Log into the demo Dremio instance. Ensure this command is run in the federation directory.

    ' } /> ```python spice login dremio -u demo -p demo1234 ``` Step 4. Add the spiceai/fed-demo Spicepod from spicerack.org.

    ' } /> ```python spice add spiceai/fed-demo ``` Step 5. Start the Spice runtime.

    '} /> ```python spice run 2025/01/27 11:36:41 INFO Checking for latest Spice runtime release... 2025/01/27 11:36:42 INFO Spice.ai runtime starting... 2025-01-27T19:36:43.199530Z INFO runtime::init::dataset: Initializing dataset dremio_source 2025-01-27T19:36:43.199589Z INFO runtime::init::dataset: Initializing dataset s3_source 2025-01-27T19:36:43.199709Z INFO runtime::init::dataset: Initializing dataset dremio_source_accelerated 2025-01-27T19:36:43.199537Z INFO runtime::init::dataset: Initializing dataset s3_source_accelerated 2025-01-27T19:36:43.201310Z INFO runtime::flight: Spice Runtime Flight listening on 127.0.0.1:50051 2025-01-27T19:36:43.201625Z INFO runtime::metrics_server: Spice Runtime Metrics listening on 127.0.0.1:9090 2025-01-27T19:36:43.205435Z INFO runtime::http: Spice Runtime HTTP listening on 127.0.0.1:8090 2025-01-27T19:36:43.209349Z INFO runtime::opentelemetry: Spice Runtime OpenTelemetry listening on 127.0.0.1:50052 2025-01-27T19:36:43.401179Z INFO runtime::init::results_cache: Initialized results cache; max size: 128.00 MiB, item ttl: 1s 2025-01-27T19:36:43.624011Z INFO runtime::init::dataset: Dataset dremio_source_accelerated registered (dremio:datasets.taxi_trips), acceleration (arrow), results cache enabled. 2025-01-27T19:36:43.625619Z INFO runtime::accelerated_table::refresh_task: Loading data for dataset dremio_source_accelerated 2025-01-27T19:36:43.776300Z INFO runtime::init::dataset: Dataset dremio_source registered (dremio:datasets.taxi_trips), results cache enabled. 2025-01-27T19:36:44.182533Z INFO runtime::init::dataset: Dataset s3_source registered (s3://spiceai-demo-datasets/cleaned_sales_data.parquet), results cache enabled. 2025-01-27T19:36:44.203734Z INFO runtime::init::dataset: Dataset s3_source_accelerated registered (s3://spiceai-demo-datasets/cleaned_sales_data.parquet), acceleration (sqlite), results cache enabled. 2025-01-27T19:36:44.205146Z INFO runtime::accelerated_table::refresh_task: Loading data for dataset s3_source_accelerated 2025-01-27T19:36:45.138393Z INFO runtime::accelerated_table::refresh_task: Loaded 2,823 rows (1010.18 kiB) for dataset s3_source_accelerated in 933ms. 2025-01-27T19:36:46.313896Z INFO runtime::accelerated_table::refresh_task: Loaded 100,000 rows (27.91 MiB) for dataset dremio_source_accelerated in 2s 688ms. ``` Step 6. In another terminal window, start the Spice SQL REPL and perform the following SQL queries:

    ' } /> ```python spice sql -- Query the federated S3 source select * from s3_source; +--------------+------------------+------------+-------------------+---------+---------------------+---------+---------+-------+------+--------------+------+--------------+--------------------+------------------+-------------------------------+---------------+-------+-------+-------------+---------+-----------+-------------------+--------------------+-----------+ | order_number | quantity_ordered | price_each | order_line_number | sales | order_date | status | quarter | month | year | product_line | msrp | product_code | customer_name | phone | address_line1 | address_line2 | city | state | postal_code | country | territory | contact_last_name | contact_first_name | deal_size | +--------------+------------------+------------+-------------------+---------+---------------------+---------+---------+-------+------+--------------+------+--------------+--------------------+------------------+-------------------------------+---------------+-------+-------+-------------+---------+-----------+-------------------+--------------------+-----------+ | 10107 | 30 | 95.7 | 2 | 2871.0 | 2003-02-24T00:00:00 | Shipped | 1 | 2 | 2003 | Motorcycles | 95 | S10_1678 | Land of Toys Inc. | 2125557818 | 897 Long Airport Avenue | | NYC | NY | 10022 | USA | | Yu | Kwai | Small | | 10121 | 34 | 81.35 | 5 | 2765.9 | 2003-05-07T00:00:00 | Shipped | 2 | 5 | 2003 | Motorcycles | 95 | S10_1678 | Reims Collectables | 26.47.1555 | 59 rue de l'Abbaye | | Reims | | 51100 | France | EMEA | Henriot | Paul | Small | | 10134 | 41 | 94.74 | 2 | 3884.34 | 2003-07-01T00:00:00 | Shipped | 3 | 7 | 2003 | Motorcycles | 95 | S10_1678 | Lyon Souveniers | +33 1 46 62 7555 | 27 rue du Colonel Pierre Avia | | Paris | | 75508 | France | EMEA | Da Cunha | Daniel | Medium | ... +--------------+------------------+------------+-------------------+---------+---------------------+---------+---------+-------+------+--------------+------+--------------+--------------------+------------------+-------------------------------+---------------+-------+-------+-------------+---------+-----------+-------------------+--------------------+-----------+ Time: 0.876282458 seconds. 500/2823 rows displayed. ``` ```python -- Query the accelerated S3 source select * from s3_source_accelerated; ``` Output:

    '} /> ```python +---------------------+-----------------+------------------+-------------+------------+--------------+ | pickup_datetime | passenger_count | trip_distance_mi | fare_amount | tip_amount | total_amount | +---------------------+-----------------+------------------+-------------+------------+--------------+ | 2013-08-22T08:24:12 | 1 | 1.1 | 7.5 | 0.0 | 8.0 | | 2013-08-21T12:40:46 | 1 | 6.1 | 23.0 | 0.0 | 23.5 | | 2013-08-24T00:40:17 | 2 | 0.6 | 4.5 | 0.0 | 5.5 | ... +---------------------+-----------------+------------------+-------------+------------+--------------+ Time: 0.015666208 seconds. 500/100000 rows displayed. -- Perform an aggregation query that combines data from S3 and Dremio WITH all_sales AS ( SELECT sales FROM s3_source_accelerated UNION ALL select fare_amount+tip_amount as sales from dremio_source_accelerated ) SELECT SUM(sales) as total_sales, COUNT(*) AS total_transactions, MAX(sales) AS max_sale, AVG(sales) AS avg_sale FROM all_sales; ``` Output:

    '} /> ```python +--------------------+--------------------+----------+--------------------+ | total_sales | total_transactions | max_sale | avg_sale | +--------------------+--------------------+----------+--------------------+ | 11501140.079999998 | 102823 | 14082.8 | 111.85376890384445 | +--------------------+--------------------+----------+--------------------+ Time: 0.009526666 seconds. 1 rows. ``` Closing Thoughts'} /> Federated SQL with Spice gives development teams a faster, simpler way to work with distributed data, and allows enterprises to accommodate modern access patterns on top of their existing infrastructure investment. By eliminating ETL bottlenecks and enabling low-latency queries across multiple systems, Spice delivers consistent, high-performance access to data wherever it lives.

    ' } /> Clone the cookbook repo and give Spice federation a try!

    ' } /> Getting Started with Spice'} /> Spice is open source (Apache 2.0) and can be installed in less than a minute on macOS, Linux, or Windows, and also offers an enterprise-grade Cloud deployment.

    ' } />
  • Explore the open source docs and blog
  • Visit the getting started guide
  • Explore the 75+ cookbooks
  • Try Spice.ai Cloud for a fully managed deployment and get started for free.
  • ' } />

    '} /> --- ## Spice.ai's approach to Time-Series AI URL: https://spice.ai/blog/spiceais-approach-to-time-series-ai Date: 2021-11-18T18:27:54 Description: Explore the challenges of time-series AI and why Spice.ai uses a data-driven reinforcement learning approach to help developers build adaptive, intelligent applications. The Spice.ai project strives to help developers build applications that leverage new AI advances which can be easily trained, deployed, and integrated. We recently introduced Spicepods: a declarative way to create AI applications with Spice.ai technology. While there are many libraries and platforms in the space, Spice.ai is focused on time-series data aligning to application-centric and frequently time-dependent data, and a reinforcement learning approach, which can be more developer-friendly than expensive, labeled supervised learning.

    ' } /> This post will discuss some of the challenges and directions for the technology we are developing.

    ' } /> Time Series'} /> Time Series processing visualization: a time window is usually chosen to process part of the data stream Figure 1. Time Series processing visualization: a time window is usually chosen to process part of the data stream

    ' } /> Time series AI has become more popular over recent years, and there is extensive literature on the subject, including time-series-focused neural networks. Research in this space points to the likelihood that there is no silver bullet, and a single approach to time series AI will not be sufficient. However, for developers, this can make building a product complex, as it comes with the challenge of exploring and evaluating many algorithms and approaches.

    ' } /> A fundamental challenge of time series is the data itself. The shape and length are usually variable and can even be infinite (real-time streams of data). The volume of data required is often too much for simple and efficient machine learning algorithms such as Decision Trees. This challenge makes Deep Learning popular to process such data. There are several types of neural networks that have been shown to work well with time series so let's review some of the common classes:

    " } />
  • Convolutional Neural Networks (CNN): CNN\'s can only accept data with fixed lengths: even with the ability to pad the data, this is a major drawback for time-series data as a specific time window needs to be decided. Despite this limitation, they are the most efficient network to train (computation, data needed, time) and usually the smallest storage. CNN\'s are very robust and used in image/video processing, making them a very good baseline to start with while also benefiting from refined and mature development over the years, such as with the very efficient MobileNet with depth-wise convolutions.
  • Recurrent Neural Networks (RNN): RNNs have been researched for several decades, and while they aren\'t as fast to train as CNNs, they can be faster to apply as there is no need to feed a time window like CNNs if the desired input/output is in real-time (in a continuous fashion, also called \'online). RNNs are proven to be very good in some situations, and many new models are being discovered.
  • Transformers: Most of the state-of-the-art results today have been made from transformers and their variations. They are very good at correlating sparse information. Popularized in the famous paper Attention is all you need, transformers are proven to be flexible with high-performance in many classes (Vision Transformers, Perceiver, etc.). They suffer the same limitation as CNNs for the length of their input (fixed at training time), but they also have a disadvantage of not scaling well with the size of the data (quadratic growth with the length of the time series). They are also the most expensive network to train in general.
  • ' } /> While not a complete representation of classes of neural networks, this list represents the areas of the most potential for Spice.ai's time-series AI technology. We also see other interesting paradigms to explore when improving the core technology like Memory Augmented Neural Networks (MANN) or neural network-based Genetical Algorithms.

    " } /> Reinforcement Learning' } /> Reinforcement Learning (RL) has grown steadily, especially in fields like robotics. Usually, RL doesn't require as much data processing as Supervised Learning, where large datasets can be demanding for hardware and people alike. RL is more dynamic: agents aren't trained to replicate a specific behaviors/output but explore and 'exploit' their environment to maximize a given reward.

    " } /> Most of today's research is based on environments the agent can interact with during the training process, known as online learning. Usually, efficient training processes have multiple agent/environment pairs training together and sharing their experiences. Having an environment for agents to interact enables different actions from the actual historical state known as on-policy learning, and using only past experiences without an environment is off-policy learning.

    " } /> AI training without interacting with the environment Figure 2. AI training without interacting with the environment (real world nor simulation). Only gathered data is used for training.

    ' } /> Spice.ai is initially taking an off-policy approach, where an environment (either pre-made or given by the user) is not required. Despite limiting the exploration of agents, this aligns to an application-centric approach as:

    ' } />
  • Creating a real-world model or environment can be difficult and expensive to create, arguably even impossible.
  • Off-policy learning is normally more efficient than on-policy (time/data and computation).
  • ' } /> The Spice.ai approach to time series AI can be described as \'Data-Driven\' Reinforcement Learning. This domain is very exciting, and we are building upon excellent research that is being published. The Berkeley Artificial Intelligence Research\'s blog shows the potential of this field and many other research entities that have made great discoveries like DeepMindOpen AIFacebook AI and Google AI (among many others). We are inspired and are building upon all the research in Reinforcement Learning to develop core Spice.ai technology.

    ' } /> If you are interested in Reinforcement Learning, we recommend following these blogs, and if you\'d like to partner with us on the mission of making it easier to build intelligent applications by leveraging RL, we invite you to discuss with us on Slack, or reach out on Twitter.

    ' } /> --- ## Spicepods: From Zero to Hero URL: https://spice.ai/blog/spicepods-from-zero-to-hero Date: 2021-12-02T18:41:30 Description: A step-by-step guide to authoring a Spicepod from scratch and using it to build an application that learns and adapts over time. In my previous post, Teaching Apps how to Learn with Spicepods, I introduced Spicepods as packages of configuration that describe an application\'s data-driven goals and how it should learn from data. To leverage Spice.ai in your application, you can author a Spicepod from scratch or build upon one fetched from the spicerack.org registry. In this post, we\'ll walk through the creation and authoring of a Spicepod step-by-step from scratch.

    ' } /> As a refresher, a Spicepod consists of:

    '} />
  • A required YAML manifest that describes how the pod should learn from data
  • Optional seed data
  • Learned model/state
  • Performance telemetry and metrics
  • ' } /> We\'ll create the Spicepod for the ServerOps Quickstart, an application that learns when to optimally run server maintenance operations based upon the CPU-usage patterns of a server machine.

    ' } /> We\'ll also use the Spice CLI, which you can install by following the Getting Started guide or Getting Started YouTube video.

    ' } /> Fast iterations' } /> Modern web development workflows often include a file watcher to hot-reload so you can iteratively see the effect of your change with a live preview.

    ' } /> Spice.ai takes inspiration and enables a similar Spicepod manifest authoring experience. If you first start the Spice.ai runtime in your application root before creating your Spicepod, it will watch for changes and apply them continuously so that you can develop in a fast, iterative workflow.

    ' } /> You would normally do this by opening two terminal windows side-by-side, one that runs the runtime using the command spice run and one where you enter CLI commands. In addition, developers would open the Spice.ai dashboard located at http://localhost:8000 to preview changes they make.

    ' } /> Figure 1. Spice.ai\'s modern development workflow' } /> Creating a Spicepod' } /> The easiest way to create a Spicepod is to use the Spice.ai CLI command: spice init <Spicepod name>. We'll make one in the ServerOps Quickstart application called serverops.

    " } /> Figure 2. Creating a Spicepod.' } /> The CLI saves the Spicepod manifest file in the spicepods directory of your application. You can see it created a new serverops.yaml file, which should be included in your application and be committed to your source repository. Let's take a look at it.

    " } /> Figure 3. Spicepod manifest.' } /> The initialized manifest file is very simple. It contains a name and three main sections being:

    ' } />
  • dataspaces
  • actions
  • training
  • ' } /> We\'ll walk through each of these in detail, and as a Spicepod author, you can always reference the documentation for the Spicepod manifest syntax.

    ' } /> Authoring a Spicepod manifest' } /> You author and edit Spicepod manifest files in your favorite text editor with a combination of Spice.ai CLI helper commands. We eventually plan to have a VS Code extension and dashboard/portal editing abilities to make this even easier.

    ' } /> Adding a dataspace' } /> To build an intelligent, data-driven application, we must first start with data.

    ' } /> A Spice.ai dataspace is a logical grouping of data with definitions of how that data should be loaded and processed, usually from a single source. A combination of its data source and its name identifies it, for example, nasdaq/msft or twitter/tweets. Read more about Dataspaces in the Core Concepts documentation.

    ' } /> Let\'s add a dataspace to the Spicepod manifest to load CPU metric data from a CSV file. This file is a snapshot of data from InfluxDB, a time-series database we like.

    ' } /> Figure 4. Adding a dataspace.' } /> We can see this dataspace is identified by its source hostmetrics and name cpu. It includes a data section with a file data connector, the path to the file, and a data processor to know how to process it. In addition, it defines a single measurement usage_idle under the measurements section, which is a measurement of CPU load. In Spice.ai, measurements are the core primitive the AI engine uses to learn and is always numerical data. Spice.ai includes a growing library of community contributable data connectors and data processors you can consist of in your Spicepod to access data. You can also contribute your own.

    ' } /> Finally, because the data is a snapshot of live data loaded from a file, we must set a Spicepod epoch_time that defines the data's start Unix time.

    " } /> Now we have a dataspace, called hostmetrics/cpu, that loads CSV data from a file and processes the data into a usage_idle measurement. The file connector might be swapped out with the InfluxDB connector in a production application to stream real-time CPU metrics into Spice.ai. And in addition, applications can always send real-time data to the Spice.ai runtime through its API with a simple HTTP POST (and in the future, using Web Sockets and gRPC).

    ' } /> Adding actions' } /> Now that the Spicepod has data, let's define some data-driven actions so the ServerOps application can learn when is the best time to take them. We'll add three actions using the CLI helper command, spice action add.

    " } /> Figure 5. Adding actions.' } /> And in the manifest:

    '} /> Figure 6. Actions added to the manifest' } /> Adding rewards' } /> The Spicepod now has data and possible actions, so we can now define how it should learn when to take them. Similar to how humans learn, we can set rewards or punishments for actions taken based on their effect and the data. Let's add scaffold rewards for all actions using the spice rewards add command.

    " } /> Figure 7. Adding rewards' } /> We now have rewards set for each action. The rewards are uniform (all the same), meaning the Spicepod is rewarded the same for each action. Higher rewards are better, so if we change perform_maintenance to 2, the Spicepod will learn to perform maintenance more often than the other actions. Of course, instead of setting these arbitrarily, we want to learn from data, and we can do that by referencing the state of data at each time-step in the time-series data as the AI engine trains.

    ' } /> Figure 8. Rewards added to the manifest' } /> The rewards themselves are just code. Currently, we currently support Python code, either inline or in a .py external code file and we plan to support several other languages. The reward code can access the time-step state through the prev_state and new_state variables and the dataspace name. For the full documentation, see Rewards.

    ' } /> Let's add this reward code to perform_maintenance, which will reward performing maintenance when there is low CPU usage.

    " } /> cpu_usage_prev = 100 - prev_state.hostmetrics_cpu_usage_idle
    cpu_usage_new = 100 - new_state.hostmetrics_cpu_usage_idle
    cpu_usage_delta = cpu_usage_prev - cpu_usage_new
    reward = cpu_usage_delta / 100
    ' } /> This code takes the CPU usage (100 minus the idle time) deltas between the previous time state and the current time state, and sets the reward to be a normalized delta value between 0 and 1. When the CPU usage is moving from higher cpu_usage_prev to lower cpu_usage_low, its a better time to run server maintenance and so we reward the inverse of the delta. E.g. 80% - 50% = 30% = 0.3. However, if the CPU moves lower to higher, 50% - 80% = -30% = -0.3, it\'s a bad time to run maintenance, so we provide a negative reward or "punish" the action.

    ' } /> Figure 9. Reward code' } /> Through these rewards and punishments and the CPU metric data, the Spicepod will when it is a good time to perform maintence and be the decision engine for the ServerOps application. You might be thinking you could write code without AI to do this, which is true, but handling the variety of cases, like CPU spikes, or patterns in the data, like cyclical server load, would take a lot of code and a development time. Applying AI helps you build faster.

    ' } /> Putting it all together' } /> The manifest now has defined data, actions, and rewards. The Spicepod can get data to learn which actions to take and when based on the rewards provided.

    ' } /> If the Spice.ai runtime is running, the Spicepod automatically trains each time the manifest file is saved. As this happens reward performance can be monitored in the dashboard.

    ' } /> Once a training run completes, the application can query the Spicepod for a decision recommendation by calling the recommendations API http://localhost:8000/api/v0.1/pods/serverops/recommendation. The API returns a JSON document that provides the recommended action, the confidence of taking that action, and when that recommendation is valid.

    ' } /> In the ServerOps Quickstart, this API is called from the server maintenance PowerShell script to make an intelligent decision on when to run maintenance. The ServerOps Sample, which uses live data, can be continuously trained to learn and adapt even as the live data changes due to load patterns changing.

    ' } /> The full Spicepod manifest from this walkthrough can be added from spicerack.org using the spice add quickstarts/serverops command.

    ' } /> Summary'} /> Leveraging Spice.ai to be the decision engine for your server maintenance application helps you build smarter applications, faster that will continue to learn and adapt over time, even as usage patterns change over time.

    ' } /> Learn more and contribute' } /> Building intelligent apps that leverage AI is still way too hard, even for advanced developers. Our mission is to make this as easy as creating a modern web page. If the vision resonates with you, join us!

    ' } /> Our Spice.ai Roadmap is public, and now that we have launched, the project and work are open for collaboration.

    ' } /> If you are interested in partnering, we\'d love to talk. Try out Spice.aiemail us "hey," join our community Slack, or reach out on Twitter.

    ' } /> We are just getting started! 🚀

    '} /> Luke

    '} /> --- ## Teaching Apps how to Learn with Spicepods URL: https://spice.ai/blog/teaching-apps-how-to-learn-with-spicepods Date: 2021-11-15T18:20:37 Description: Learn how Spicepods define application goals, rewards, and learning behavior - making it easy for developers to build applications that learn and adapt over time. The last post in this series, Making Apps that Learn and Adapt, described the shift from building AI/ML solutions to building apps that learn and adapt. But, how does the app learn? And as a developer, how do I teach it what it should learn?

    ' } /> With Spice.ai, we teach the app how to learn using a Spicepod.

    ' } /> Imagine you own a restaurant. You created a menu, hired staff, constructed the kitchen and dining room, and got off to a great start when it first opened. However, over the years, your customers' tastes changed, you've had to make compromises on ingredients, and there's a hot new place down the street... business is stagnating, and you know that you need to make some changes to stay competitive.

    " } /> You have a few options. First, you could gather all the data, such as customer surveyss, seasonal produce metrics, and staff performance profiles. You may even hire outside consultants. You then take this data to your office, and after spending some time organizing, filtering, and collating it, you've discovered an insight! Your seafood dishes sell poorly and cost the most... you are losing money! You spend several weeks or months perfecting a new menu, which you roll out with much fanfare! And then... business is still poor. What!? How could this be? It was a data-driven approach! You start the process again. While this approach is a worthy option, it has long latency from data to learning to implementation.

    " } /> Another option is to build real-time learning and adaption directly into the restaurant. Imagine a staff member whose sole job was learning and adapting how the restaurant should operate; lets name them Blue. You write a guide for Blue that defines certain goal metrics, like customer food ratings, staff happiness, and of course, profit. Blue tracks each dish served, from start to finish, from who prepared it to its temperature, its costs, and its final customer taste rating. Blue not only learns from each customer review as each dish is consumed but also how dish preparation affects other goal metrics, like profitability. The restaurant staff consults Blue to determine any adjustments to improve goal metrics as they work. The latency from data to learning, to adaption, has been reduced, from weeks or months to minutes. This option, of course, is not feasible for most restaurants, but software applications can use this approach. Blue and his instructions are analogous to the Spice.ai runtime and manifest.

    ' } /> In the Spice.ai model, developers teach the app how to learn by describing goals and rewarding its actions, much like how a parent might teach a child. As these rewards are applied in training, the app learns what actions maximize its rewards towards the defined goals.

    ' } /> Returning to the restaurant example, you can think of the Spice.ai runtime as Blue, and Spicepod manifests as the guide on how Blue should learn. Individual staff members would consult with Blue for ongoing recommendations on decisions to make and how to act. These goals and rewards are defined in Spicepods or \"pods\" for short. Spicepods are packages of configuration that describe the application's goals and how it should learn from data. Although it's not a direct analogy, Spicepods and their manifests can be conceptualized similar to Docker containers and Dockerfiles. In contrast, Dockerfiles define the packaging of your app, Spicepods specify the packaging of your app's learning and data.

    " } /> Anatomy of a Spicepod' } /> A Spicepod consists of:

    '} />
  • A required YAML manifest that describes how the pod should learn from data
  • Optional seed data
  • Learned model/state
  • Performance telemetry and metrics
  • ' } /> Developers author Spicepods using the spice CLI command such as with spice pod init <name> or simply by creating a manifest file such as mypod.yaml in the spicepods directory of their application.

    ' } /> Spicepods as packages' } /> On disk, Spicepods are generally layouts of a manifest file, seed data, and trained models, but they can also be exported as zipped packages.

    ' } /> When the runtime exports a Spicepod using the spice export command, it is saved with a .spicepod extension. It can then be shared, archived, or imported into another instance of the Spice.ai runtime.

    ' } /> Soon, we also expect to enable publishing of .spicepods to spicerack.org, from where community-created Spicepods can easily be added to your application using spice add <pod name> (currently, only Spice AI published pods are available on spicerack.org).

    ' } /> Treating Spicepods as packages and enabling their sharing and distribution through spicerack.org will help developers share their "restaurant guides" and build upon each other\'s work, much like they do with npmjs.org or pypi.org. In this way, developers can together build better and more intelligent applications.

    ' } /> In the next post, we\'ll dive deeper into authoring a Spicepod manifest to create an intelligent application. Follow @spice_ai on Twitter to get an update when we post.

    ' } /> If you haven\'t already, read the next the first post in the series, Making Apps that Learn and Adapt.

    ' } /> Learn more and contribute' } /> Building intelligent apps that leverage AI is still way too hard, even for advanced developers. Our mission is to make this as easy as creating a modern web page. If the vision resonates with you, join us!

    ' } /> Our Spice.ai Roadmap is public, and now that we have launched, the project and work are open for collaboration.

    ' } /> If you are interested in partnering, we\'d love to talk. Try out Spice.aiemail us "hey," join our community Slack, or reach out on Twitter.

    ' } /> We are just getting started! 🚀

    '} /> Luke

    '} /> --- ## True Hybrid Search: Vector, Full-Text, and SQL in One Runtime URL: https://spice.ai/blog/true-hybrid-search Date: 2025-09-22T17:46:00 Description: Build hybrid search without managing multiple systems. Query vectors, run full-text search, and execute SQL in one unified runtime. TL;DR '} />
  • The success of enterprise AI projects boils down to search and retrieval. In order to deliver production-grade AI apps, developers need tools that efficiently access data across distributed systems. 
  • Modern AI apps demand hybrid search across structured, unstructured, and vectorized data. Today\'s fragmented stacks introduce latency, complexity, and risk.
  • Spice solves the search challenge with its hybrid SQL search functionality that natively combines keyword/text search, relational filters, and vector similarity in one query.
  • Hybrid search alone isn\'t enough. To deliver production-grade AI, it must be combined with query federation, acceleration, and inference. Spice AI unifies query, search, and inference in a single, open-source runtime that queries data in place-across databases, warehouses, and object stores like S3-while accelerating the slowest layers.
  • Spice operationalizes object stores for AI, making S3, ADLS, and GCS fast enough for semantic and hybrid search without duplicating data into specialized systems.
  • ' } /> Show Me the (Data)!'} /> It's well established (and maybe even trite) to say that enterprises are going all-in on artificial intelligence, with more than $40 billion directed toward generative AI projects in recent years.

    " } /> The initial results have been underwhelming. A recent study from the Massachusetts Institute of Technology\'s NANDA initiative concluded that despite the enormous allocation of capital, 95% of enterprises have seen no measurable ROI from their AI initiatives. Only 5% of custom AI pilots ever make it to production, and just a fraction of those deliver meaningful business outcomes.

    ' } /> AI models are only as effective as the context (data) they can retrieve, but enterprise data is scattered across transactional databases, analytical platforms, object stores, and countless other data sources. To accommodate this fragmentation, enterprises have historically relied on fragile ETL pipelines, complex integrations, and siloed point solutions like search engines or vector databases. Each new layer introduces latency, operational overhead, and security risk. The proof is reflected in the results of MIT's study: instead of accelerating innovation, these pipelines are slowing it down. Enterprise-grade AI applications fail not necessarily due to the underlying models or because they can't be built, but because they can't reliably access the data they need.

    " } /> The Search Imperative'} /> Enterprise AI is fundamentally a search and retrieval problem. Applications and agents must be able to reach across structured and unstructured data, apply both exact filters and semantic search, and return the right context in milliseconds.

    ' } /> This requires three retrieval paradigms:

    '} />
  • Exact filtering: Exact matches and filters on structured, relational, or semi-structured data for fields, timestamps, and metadata.
  • Keyword search: Keyword discovery in unstructured text like documents and logs, ranked on term frequency and proximity.
  • Semantic search: Vector embeddings for semantic-based similarity across any data type, from tables to narratives, beyond literal terms.
  • ' } /> ‍Large organizations have worked around this problem by standing up multiple specialized systems: a relational database for queries, a search engine for text, a vector store for embeddings, etc. They then build pipelines to keep those systems in sync, often resulting in complexity and fragility.

    ' } /> Meanwhile, object storage offerings like Amazon S3, Azure Blob, and Google Cloud Storage serve as the system of record for massive volumes of enterprise data - and thus excellent data sources for AI applications. However, they were never designed for low-latency retrieval. Even with the emergence of open formats like Parquet, Iceberg, and Delta, raw performance lags far behind what modern AI applications require.

    ' } /> This ultimately leaves enterprise developers in a catch-22: either they duplicate data into faster but more expensive systems, or they accept latency that makes real-time AI use cases impractical. 

    ' } /> An Emerging Data Convergence'} /> Three industry shifts are now reshaping this landscape and enabling a new generation of applications:

    ' } />
  • Object stores are becoming queryable. With Iceberg, Delta, Hudi, and now S3 Vectors, they are evolving into platforms for active workloads, not just cold storage.
  • AI workloads are inherently hybrid. They need structured data for grounding, unstructured text for context, and embeddings for semantics. No single monolithic database can meet these needs.
  • Enterprises are under pressure to simplify. The cost of maintaining separate systems for query, search, and vector retrieval is too high - in dollars, in complexity, and in security risk.
  • ' } /> Taken together, these shifts mandate a new substrate that unifies search, query federation, and inference across all enterprise data.

    ' } /> Spice.ai: From Fragmented Data to Unified Intelligence' } /> Spice.ai was purpose-built to address this challenge, offering a data and AI platform that combines hybrid search (vector, full-text, and keyword) with query federation, acceleration, and LLM inference in one engine. 

    ' } /> Where other vendors solve a piece of the problem, Spice addresses the full lifecycle. For developers, this means one query interface replacing three. A hybrid search against structured, unstructured, and vectorized data can be expressed in a single SQL statement, with Spice abstracting all of the orchestration. Applications that once required stitching together a handful of different systems can now be built against one, and results that once took minutes arrive in milliseconds. 

    ' } /> Take the below Spice query as an example. One SQL combines vector search, full-text search, temporal and lexical filtering.

    ' } />
    Figure 1: Hybrid SQL search query
    ' } /> But search alone isn't enough. Enterprise AI applications also need low latency retrieval across data systems when integrating with LLMs. That's why Spice pairs its search engine with query federation, acceleration, and AI inference in a single, deploy-anywhere runtime. Instead of moving data, Spice queries it where it resides - across OLTP databases, OLAP warehouses, and object stores like S3 - while accelerating the slowest layers through caching and materialization for sub-second access. This makes it possible to serve data and AI-powered experiences directly from your existing systems - securely, at low latency, and without costly re-engineering.

    " } /> In turn, this architecture turns object stores from passive archives into active, AI-ready data layers. With the introduction of native support for Amazon S3 Vectors, Spice can even create, store, and query embeddings natively in S3, making semantic search as accessible as traditional text search or object retrieval.

    ' } /> Enterprises eliminate the operational drag of ETL pipelines and duplicated data stores, security improves because sensitive databases are never directly exposed to AI agents, and perhaps most importantly, AI apps that failed due to lack of reliable retrieval are now viable.

    ' } /> Architecture Overview'} /> Spice's lightweight compute engine is designed to integrate directly into your application stack and is built on a fully open-source foundation. It embeds the DataFusion SQL query engine, supports over 35 open-source connectors, and can locally materialize data for acceleration using DuckDB, SQLite, or PostgreSQL.

    " } /> Core components of Spice:

    '} />
  • Search & Retrieval. Vector, hybrid, and full-text search across structured and unstructured data.
  • Federated SQL Engine. Execute queries across disparate data sources.
  • Acceleration Engine. Materialize and pre-cache data for millisecond access.
  • LLM Inference. Load models locally or use as a router to hosted AI platforms like OpenAI, Anthropic, Bedrock, or NVIDIA NIM.
  • ' } />
    Figure 2: Spice.ai Compute Engine
    ' } /> Spice can be deployed:

    '} />
  • As a sidecar: Co-located with your application for ultra-low latency.
  • As a shared service: Centralized deployment serving multiple applications.
  • At the edge: Serve data and AI capabilities as close as possible to the user.
  • In the cloud: Fully-managed via the Spice.ai Cloud Platform.
  • ' } /> This deployment flexibility ensures Spice fits to your application architecture and compliance requirements. 

    ' } /> Applications Built on Spice'} /> Whether you're powering a RAG-enabled customer service bot, an internal AI agent, or a high-throughput transactional API, the foundational challenge is the same: getting fast, secure access to the right data at the right time.

    " } /> Spice solves that challenge once, and lets you deploy the same solution for every workload. Spice enables three primary categories of applications: AI Apps, RAG Apps, and Data Apps. 

    ' } /> 1. AI Apps'} /> AI models are only as good as the context they can access. As discussed, most enterprise AI efforts fail because retrieval is too slow, incomplete, or insecure.

    ' } /> Key benefits of using Spice for AI Apps include:

    '} />
  • Ground LLMs in enterprise data without moving data into separate stores.
  • Retrieve structured and unstructured data in real time, with hybrid SQL search.
  • Keep sensitive systems secure by acting as a containerized execution layer, so AI agents never query a production database directly.
  • ' } />
    Figure 3: AI app architecture
    ' } /> 2. RAG Apps'} /> Traditional RAG (retrieval-augmented generation) is powerful but fragile - performance, relevance, and freshness/veracity all depend on the retrieval layer.

    ' } /> Key benefits of using Spice for RAG Apps include:

    '} />
  • Unified retrieval that spans transactional, analytical, and object store data sources.
  • Low-latency query performance for interactive AI experiences.
  • Dynamic materializations that refresh context automatically, ensuring AI agents always have the latest data without paying a tax on re-ingestion.
  • ' } />

    '} />
    Figure 4: Hybrid search architecture
    ' } /> 3. Data Apps'} /> Modern data applications often need to unify data from multiple disparate systems, deliver low-latency results, and scale globally without constant ETL jobs or manual integrations.

    ' } /> Key benefits of using Spice for Data Apps include:

    '} />
  • Federated SQL queries across OLTP, OLAP, and object store systems without pre-processing or data duplication.
  • Accelerated database and object store queries to sub-second speeds, enabling a "Database CDN" model where working datasets are staged close to the application.
  • Real-time updates via Change Data Capture (CDC), intervals, or event triggers, so apps never query stale data.
  • ' } />
    Figure 5: Federation + Acceleration in Spice
    ' } /> The Path Forward with Spice ' } /> The boundaries between operational databases, analytics, and object stores are dissolving, and AI applications demand all three together in real-time. 

    ' } /> Traditional approaches, anchored on moving and transforming data between systems, can't keep up with these demands. Spice makes search and retrieval reliable, fast, and unified - turning fragmented data into a single searchable layer. With sub-second access to transactional, analytical, and object data, enterprises can finally deliver intelligent applications at scale.

    " } /> Getting Started'} /> Spice is open source (Apache 2.0) and can be installed in less than a minute on macOS, Linux, or Windows:

    ' } />
  • Explore the open source docs and blog for cookbooks, integration examples.
  • Visit the getting started guide 
  • Explore the 70+ cookbooks 
  • Try Spice.ai Cloud for a fully managed deployment and get started for free
  • ' } />

    '} /> --- ## What Data Informs AI-driven Decision Making? URL: https://spice.ai/blog/what-data-informs-ai-driven-decision-making Date: 2022-01-04T05:36:13 Description: Learn the three classes of data required for intelligent decision-making and how Spice.ai simplifies runtime data engineering for AI-powered applications. AI unlocks a new generation of intelligent applications that learn and adapt from data. These applications use machine learning (ML) to out-perform traditionally developed software. However, the data engineering required to leverage ML is a significant challenge for many product teams. In this post, we\'ll explore the three classes of data you need to build next-generation applications and how Spice.ai handles runtime data engineering for you.

    ' } /> While ML has many different applications, one way to think about ML in a real-time application that can adapt is as a decision engine. Phillip discussed decision engines and their potential uses in A New Class of Applications That Learn and Adapt. This decision engine learns and informs the application how to operate. Of course, applications can and do make decisions without ML, but a developer normally has to code that logic. And the intelligence of that code is fixed, whereas ML enables a machine to constantly find the appropriate logic and evolve the code as it learns. For ML to do this, it needs three classes of data.

    ' } /> The three classes of data for informed decision making' } /> We don't want any decision, though. We want high-quality, informed decisions. If you consider making higher quality, informed decisions over time, you need three classes of information. These classes are historical information, real-time or present information, and the results of your decisions.

    " } /> Especially recently, stock or crypto trading is something many of us can relate to. To make high-quality, informed investing decisions, you first need general historical information on the price, security, financials, industry, previous trades, etc. You study this information and learn what might make a good investment or trade.

    ' } /> Second, you need a real-time updated stream of data as it happens to make a decision. If you were stock trading, this information might be the stock price on the day or hour you want to make the trade. You need to apply what you learned from historical data to the current information to decide what trade to place.

    ' } /> Finally, if we're going to make better decisions over time, we need to capture and learn from the results of those decisions. Whether you make a great or poor trade, you want to incorporate that experience into your historical learning.

    " } /> Using all three data classes together results in higher quality decisions over time. Broad data across these classes are useful, and we could make some nice trades with that. Still, we can make an even higher quality trading decision with personal context. For example, we may want to consider the individual tax consequences or risk level of the trade for our situation. So each of these classes also comes with global or local variants. We combine global information, like what worked well for everyone, and local experience, what worked well for us and our situation, to make the best, overall informed decision.

    ' } /> The waterfall approach to data engineering' } /> Consider how you would capture these three data classes and make them available to both the application and ML in the trading example. This data engineering can be a pretty big challenge.

    ' } /> First, you need a way to gather and consume historical information, like stock prices, and keep that updated over time. You need to handle streaming constantly updated real-time data to make runtime decisions on how to operate. You need to capture and match the decisions you make and feed that back into learning. And finally, you need a way to provide personal or local context, like holding off on sell trades until next year, to stay within a tax threshold, or identifying a pattern you like to trade. If all this wasn\'t enough, as we learned from Phillip\'s AI needs AI-ready data post, all three data classes need to be in a format that ML can use.

    ' } /> If you can afford a data or ML team, they may do much of this for you. However, this model starts to look quite waterfall-like and is not suited well to applications that want to learn and adapt in real-time. Like a waterfall approach, you would provide requirements to your data team, and they would do the data engineering required to provide you with the first two classes of data, historical and real-time. They may give you ML-ready data or train an ML model for you. However, there is often a large latency to apply that data or model in your application and a long turn-around time if it does not meet your requirements. In addition, to capture the third class of data, you would need to capture and send the results of the decisions your application made as a result of using those models back to the data team to incorporate in future learning. This latency through the data, decision-making, learning, and adaptation process is often infeasible for a real-world app.

    ' } /> And, if you can't afford a data team, you have to figure out how to do all that yourself.

    " } /> The agile approach' } /> Modern software engineering practices have favored agile methodologies to reduce time to learn and adapt applications to customer and business needs. Spice.ai takes inspiration from agile methods to provide developers with a fast, iterative development cycle.

    ' } /> Spice.ai provides mechanisms for making all three classes of data available to both the application and the decision engine. Developers author Spicepods declaring how data should be captured, consumed, and made ML-ready so that all three classes are consistent and ML available.

    ' } /> The Spice.ai runtime exposes developer-friendly APIs and data connectors for capturing and consuming data and annotating that data with personal context. The runtime generates AI-ready data for you and makes it available directly for ML. These APIs also make it easy to capture application decisions and incorporate the resulting learning.

    ' } /> The Spice.ai approach short circuits the traditional waterfall-like data process by keeping as much data as possible application local instead of round-tripping through an external pipeline or team, especially valuable for real-time data. The application can learn and adapt faster by reducing the latency of decision consequences to learning.

    ' } /> Spice.ai enables personalized learning from personal context and experiences through the interpretations mechanism. Interpretations allow an application to provide additional information or an "interpretation" of a time range as input to learning. The trading example could be as simple as labeling a time range as a good time to buy or providing additional contextual information such as tax considerations, etc. Developers can also use interpretations to record the results of decisions with more context than what might be available in the observation space. You can read more about Interpretations in the Spice.ai docs.

    ' } /> While Spice.ai focuses on ensuring consistent ML-ready data is available, it does not replace traditional data systems or teams. They still have their place, especially for large historical datasets, and Spice.ai can consume data produced by them. Where possible, especially for application and real-time data, Spice.ai keeps runtime data local to create a virtuous cycle of data from the application to the decision engine and back again, enabling faster and more agile learning and adaption.

    ' } /> Summary'} /> In summary, to build an intelligent application driven from AI recommended decisions, a significant amount of data engineering can be required to learn, make decisions, and incorporate the results. The Spice.ai runtime enables you as a developer to focus on consuming those decisions and tuning how the AI engine should learn rather than the runtime data engineering.

    ' } /> The potential of the next generation of intelligent applications to improve the quality of our lives is very exciting. Using AI to help applications make better decisions, whether that be AI-assisted investing, improving the energy efficiency of our homes and buildings, or supporting us in deciding on the most appropriate medical treatment, is very promising.

    ' } /> Learn more and contribute' } /> Even for advanced developers, building intelligent apps that leverage AI is still way too hard. Our mission is to make this as easy as creating a modern web page. If that vision resonates with you, join us!

    ' } /> If you want to get involved, we\'d love to talk. Try out Spice.aiemail us "hey," join our community Slack, or reach out on Twitter.

    ' } /> Luke

    '} /> --- ## Write to Apache Iceberg Tables with SQL in Spice URL: https://spice.ai/blog/write-to-apache-iceberg-tables-with-sql Date: 2025-11-18T23:27:09 Description: Spice v1.8 adds native Apache Iceberg write support with standard SQL INSERT_INTO statements. Build complete data workflows without ETL - query, accelerate, and write from one runtime. With the release of Spice v1.8, developers can now write directly to Apache Iceberg tables and catalogs using standard SQL INSERT_INTO statements. 

    ' } /> This feature extends Spice\'s SQL federation capabilities beyond reads, enabling data ingestion, transformation, and pipeline workloads to write results back into Iceberg directly from the same runtime used for queries and acceleration.

    ' } /> What sets Spice apart from other query engines is its broader, application-focused feature set designed for modern data and AI workloads. Spice brings together federation, hybrid search, embedded LLM inference, and now native writes in one unified runtime - enabling teams to build complete, end-to-end workflows without the management overhead and performance concessions of using multiple systems. 

    ' } /> Iceberg write support is available in preview, with append-only operations and schema validation for secure and predictable data management.

    ' } /> From Read-Only Federation to Full Data Workflows' } /> Data teams are standardizing on open table formats like Apache Iceberg to unify analytical and operational data across systems; Iceberg offers a consistent way to store, version, and manage data across different engines and clouds, helping teams avoid vendor lock-in while maintaining strong governance and interoperability.

    ' } /> Supporting Iceberg writes natively inside Spice means development teams can:

    ' } />
  • Direct Writes to Iceberg without ETL: Insert data directly into Iceberg from SQL queries.
  • Simplify ingestion paths: Load transformed or federated data into Iceberg without separate tools.
  • Enforce governance: Maintain schema validation and secure access through read_write permissions.
  • ' } /> Paired with Spice\'s built-in performance acceleration and federation, these write capabilities make it easier to use Iceberg not just as a storage solution, but as a queryable data layer for both operational and AI workloads

    ' } /> How It Works'} /> Spice supports INSERT_INTO statements on Iceberg tables and catalogs explicitly marked as read_write.

    ' } /> Example Spicepod configuration:

    ' } /> ```python catalogs: - from: iceberg:http://localhost:8181/v1/namespaces access: read_write # Uncomment this line name: ice params: iceberg_s3_endpoint: http://localhost:9000 iceberg_s3_access_key_id: admin iceberg_s3_secret_access_key: password iceberg_s3_region: us-east-1 ``` And, here's an example SQL query:

    "} /> ```python -- Insert from another table INSERT INTO iceberg_table SELECT * FROM existing_table; -- Insert with values INSERT INTO iceberg_table (id, name, amount) VALUES (1, 'John', 100.0), (2, 'Jane', 200.0); -- Insert into catalog table INSERT INTO ice.sales.transactions VALUES (1001, '2025-01-15', 299.99, 'completed'); ``` Support for updates, deletes, and merges will be added in future releases.

    ' } /> Now, let's walk through an end-to-end workflow demonstrating how to execute Iceberg writes in Spice.

    " } /> Write to Iceberg Tables with Spice Cookbook' } /> Prerequisites: 

    '} />
  • Access to an Iceberg catalog, or Docker to run an Iceberg catalog locally.
  • Spice is installed (see the Getting Started documentation).
  • ' } /> Step 1: Create a new directory and initialize a Spicepod' } /> ```python mkdir iceberg-catalog-recipe cd iceberg-catalog-recipe spice init ``` Step 2. Run the Docker container for the Iceberg catalog' } /> In a separate terminal, clone the cookbook repository and run the Docker container for the Iceberg catalog.

    ' } /> ```python git clone https://github.com/spiceai/cookbook.git cd cookbook/catalogs/iceberg docker compose up -d ``` Step 3. Add the Iceberg Catalog Connector to your Spicepod' } /> ```python catalogs: - from: iceberg:http://localhost:8181/v1/namespaces # access: read_write name: ice params: iceberg_s3_endpoint: http://localhost:9000 iceberg_s3_access_key_id: admin iceberg_s3_secret_access_key: password iceberg_s3_region: us-east-1 ``` Step 4. Run Spice'} /> ```python spice run 2025/01/27 11:08:36 INFO Checking for latest Spice runtime release... 2025/01/27 11:08:37 INFO Spice.ai runtime starting... 2025-01-27T19:08:37.494155Z INFO runtime::init::dataset: No datasets were configured. If this is unexpected, check the Spicepod configuration. 2025-01-27T19:08:37.494905Z INFO runtime::init::catalog: Registering catalog 'ice' for iceberg 2025-01-27T19:08:37.499162Z INFO runtime::metrics_server: Spice Runtime Metrics listening on 127.0.0.1:9090 2025-01-27T19:08:37.499174Z INFO runtime::flight: Spice Runtime Flight listening on 127.0.0.1:50051 2025-01-27T19:08:37.500689Z INFO runtime::http: Spice Runtime HTTP listening on 127.0.0.1:8090 2025-01-27T19:08:37.503376Z INFO runtime::opentelemetry: Spice Runtime OpenTelemetry listening on 127.0.0.1:50052 2025-01-27T19:08:37.696469Z INFO runtime::init::results_cache: Initialized results cache; max size: 128.00 MiB, item ttl: 1s 2025-01-27T19:08:37.697178Z INFO runtime::init::catalog: Registered catalog 'ice' with 1 schema and 8 tables ``` Step 5. Query the Iceberg catalog' } /> ```python spice sql sql> show tables; +---------------+--------------+--------------+------------+ | table_catalog | table_schema | table_name | table_type | +---------------+--------------+--------------+------------+ | ice | tpch_sf1 | lineitem | BASE TABLE | | ice | tpch_sf1 | nation | BASE TABLE | | ice | tpch_sf1 | orders | BASE TABLE | | ice | tpch_sf1 | supplier | BASE TABLE | | ice | tpch_sf1 | customer | BASE TABLE | | ice | tpch_sf1 | partsupp | BASE TABLE | | ice | tpch_sf1 | region | BASE TABLE | | ice | tpch_sf1 | part | BASE TABLE | | spice | runtime | task_history | BASE TABLE | | spice | runtime | metrics | BASE TABLE | +---------------+--------------+--------------+------------+ ``` Run Pricing Summary Report Query (Q1). More information about TPC-H and all the queries involved can be found in the official TPC Benchmark H Standard Specification.

    ' } /> ```python select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from ice.tpch_sf1.lineitem where l_shipdate <= date '1998-12-01' - interval '110' day group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus ; ``` Output:

    '} /> ```python +--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ | l_returnflag | l_linestatus | sum_qty | sum_base_price | sum_disc_price | sum_charge | avg_qty | avg_price | avg_disc | count_order | +--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ | A | F | 37734107.00 | 56586554400.73 | 53758257134.8700 | 55909065222.827692 | 25.522005 | 38273.129734 | 0.049985 | 1478493 | | N | F | 991417.00 | 1487504710.38 | 1413082168.0541 | 1469649223.194375 | 25.516471 | 38284.467760 | 0.050093 | 38854 | | N | O | 73416597.00 | 110112303006.41 | 104608220776.3836 | 108796375788.183317 | 25.502437 | 38249.282778 | 0.049996 | 2878807 | | R | F | 37719753.00 | 56568041380.90 | 53741292684.6040 | 55889619119.831932 | 25.505793 | 38250.854626 | 0.050009 | 1478870 | +--------------+--------------+-------------+-----------------+-------------------+---------------------+-----------+--------------+----------+-------------+ Time: 0.186233833 seconds. 10 rows. ``` Step 6. Write to Iceberg tables'} /> To enable write operations to Iceberg tables, uncomment the access: read_write configuration and restart Spice.

    ' } /> 6.1. Update the Spicepod configuration' } /> Edit the spicepod.yaml file to uncomment the access line:

    ' } /> ```python catalogs: - from: iceberg:http://localhost:8181/v1/namespaces access: read_write # Uncomment this line name: ice params: iceberg_s3_endpoint: http://localhost:9000 iceberg_s3_access_key_id: admin iceberg_s3_secret_access_key: password iceberg_s3_region: us-east-1 ``` 6.2. Restart Spice'} /> Stop the current Spice instance (Ctrl+C) and restart it:

    '} /> ```python spice run ``` 6.3. Insert data into Iceberg tables' } /> Now you can write data to the Iceberg tables using SQL INSERT statements:

    ' } /> ```python spice sql ``` ‍Example: Insert a new region into the region table:

    '} /> ```python INSERT INTO ice.tpch_sf1.region (r_regionkey, r_name, r_comment) VALUES (5, 'ANTARCTICA', 'A cold and remote region'); +-------+ | count | +-------+ | 1 | +-------+ ``` Example: Insert a new nation into the nation table:

    '} /> ```python INSERT INTO ice.tpch_sf1.nation (n_nationkey, n_name, n_regionkey, n_comment) VALUES (25, 'PENGUINIA', 5, 'A vibrant home for brave penguins in Antarctica'); +-------+ | count | +-------+ | 1 | +-------+ ``` ‍Verify the inserts by querying the tables:

    '} /> ```python SELECT * FROM ice.tpch_sf1.region WHERE r_regionkey = 5; SELECT * FROM ice.tpch_sf1.nation WHERE n_nationkey = 25; ``` Step 7. View the Iceberg tables in MinIO' } /> Navigate to http://localhost:9001 and login with admin and password. View the iceberg bucket to see the created Iceberg tables.

    ' } /> Step 8. Clean up'} /> ```python docker compose down --volumes --rmi local ``` Next steps with Iceberg writes in Spice' } /> Iceberg write support is available in preview. See the Iceberg connector docs for configuration details and try the Iceberg Catalog Connector recipe to get started. 

    ' } /> Feedback is welcome as we round out support for Iceberg writes in upcoming releases! 

    ' } />

    '} /> --- ## Careers URL: https://spice.ai/careers Date: 2025-11-19T20:45:41 Description: Join Spice AI and help build the future of data and AI infrastructure. --- ## Contact URL: https://spice.ai/contact Date: 2025-11-19T20:34:04 Description: Get in touch with the Spice AI team. Whether you're exploring enterprise deployments, pricing, integrations, or technical questions, we're here to help. --- ## Spice.ai Cookbook URL: https://spice.ai/cookbook Date: 2026-02-24T00:00:00 Description: A collection of guides and samples to help you build data-grounded AI apps and agents with Spice.ai Open-Source. Find ready-to-use examples for data acceleration, AI agents, LLM memory, and more. {/* */} The cookbook is a curated set of practical, ready-to-run recipes for Spice.ai Open Source. Recipes cover connectors, federation, acceleration, hybrid search, model integration, and deployment patterns.

    \n', }, { title: 'Which recipe should I start with?', paragraph: '

    If you are new to Spice, start with a recipe that matches your immediate goal: federated SQL for multi-source queries, DuckDB acceleration for faster performance, or OpenAI SDK and MCP recipes for AI agent use cases.

    \n', }, { title: 'Do cookbook recipes work with Spice Cloud?', paragraph: '

    Yes. Cookbook patterns are based on Spice OSS capabilities and can be adapted to Spice Cloud workflows. You can start locally with OSS and move to managed deployments as workloads grow. See Spice Cloud pricing.

    \n', }, ], padding_top: 'st-lg', padding_bottom: 'sb-lg', }} /> --- ## AI Model Serving URL: https://spice.ai/feature/ai-model-serving Date: 2025-11-14T14:45:31 Description: Serve, evaluate, and ground AI models directly inside Spice. Call LLMs locally or connect to hosted providers from one secure, high-performance runtime. --- ## Distributed Query URL: https://spice.ai/feature/distributed-query Date: 2025-11-04T19:51:09 Description: Scale beyond single-node limits with petabyte-scale, multi-node, distributed queries. --- ## Edge to Cloud Deployments URL: https://spice.ai/feature/edge-to-cloud-deployments Date: 2025-11-14T14:44:32 Description: Deploy Spice anywhere, from lightweight sidecars to enterprise clusters. Choose the architecture that fits your performance, scale, and governance needs. --- ## MCP Server & Gateway URL: https://spice.ai/feature/mcp-server-gateway Date: 2025-11-14T14:44:48 Description: Deploy MCP servers locally or over SSE, route tools to models, and expose Spice securely as an MCP gateway with full observability. --- ## Real-Time Change Data Capture URL: https://spice.ai/feature/real-time-change-data-capture Date: 2025-11-14T14:45:01 Description: Sync accelerated datasets with real-time changes using Change Data Capture (CDC) and maintain low-latency analytics without full-table refreshes. --- ## Secure AI Sandboxing URL: https://spice.ai/feature/secure-ai-sandboxing Date: 2025-11-14T14:45:12 Description: Safely connect AI to enterprise data. Spice isolates access for agents and models, enforcing least privilege, observability, and compliance across every query. --- ## Get a demo URL: https://spice.ai/get-a-demo Date: 2026-01-09T02:06:37 Description: Get in touch with the Spice AI team. Whether you're exploring enterprise deployments, pricing, integrations, or technical questions, we're here to help. --- ## Home URL: https://spice.ai/home Date: 2025-10-14T16:53:33 Description: Ground AI in enterprise data with zero ETL. Spice is an open-source SQL query & hybrid search engine built for data-intensive apps & AI agents. data lakehouse', paragraph: 'Open-source SQL federation, data acceleration, and hybrid search for data-intensive AI apps. ', cta: [ { type: 'filled', cta: { title: 'Get a demo', url: 'https://meetings.hubspot.com/lukekim/talk-to-sales?uuid=836fd7be-a95e-4cee-b0cb-044fd8ea52a4&utm_campaign=22505145-Website+Demo+Requests&utm_source=homepageheader&utm_medium=website&utm_content=demo+request', target: '_blank', }, }, { type: 'bordered', cta: { title: 'Start for free', url: '/login', target: '_blank', }, }, ], media_type: 'image', media_image: { ID: 1499, id: 1499, title: 'HomepageHero4', filename: 'HomepageHero4.png', filesize: 500229, url: '/website-assets/media/2025/11/HomepageHero4.png', link: '/home/homepagehero4/', alt: '', author: '6', description: '', caption: '', name: 'homepagehero4', status: 'inherit', uploaded_to: 2, date: '2025-11-27 16:59:58', modified: '2025-11-27 16:59:58', menu_order: 0, mime_type: 'image/png', type: 'image', subtype: 'png', icon: '/website-assets/media/default.png', width: 1700, height: 1136, sizes: { thumbnail: '/website-assets/media/2025/11/HomepageHero4-150x150.png', 'thumbnail-width': 150, 'thumbnail-height': 150, medium: '/website-assets/media/2025/11/HomepageHero4-300x200.png', 'medium-width': 300, 'medium-height': 200, medium_large: '/website-assets/media/2025/11/HomepageHero4-768x513.png', 'medium_large-width': 768, 'medium_large-height': 513, large: '/website-assets/media/2025/11/HomepageHero4-1024x684.png', 'large-width': 1024, 'large-height': 684, '1536x1536': '/website-assets/media/2025/11/HomepageHero4-1536x1026.png', '1536x1536-width': 1536, '1536x1536-height': 1026, '2048x2048': '/website-assets/media/2025/11/HomepageHero4.png', '2048x2048-width': 1700, '2048x2048-height': 1136, }, }, media_video: '', }} /> anywhere', description: 'Run Spice.ai Open Source locally, at the edge, or on the fully managed Spice.ai Cloud Platform. Lightweight, portable, and designed for scale.', cta: { title: 'Learn more', url: '/feature/edge-to-cloud-deployments', target: '_blank', }, }, { icon: { ID: 453, id: 453, title: 'Homepage_Benefit_AI sandboxing & security', filename: 'Homepage_Benefit_AI-sandboxing-security-1.svg', filesize: 8931, url: '/website-assets/media/2025/11/Homepage_Benefit_AI-sandboxing-security-1.svg', link: '/home/homepage_benefit_ai-sandboxing-security-2/', alt: '', author: '6', description: '', caption: '', name: 'homepage_benefit_ai-sandboxing-security-2', status: 'inherit', uploaded_to: 2, date: '2025-11-05 20:14:15', modified: '2025-11-05 20:14:15', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Homepage_Benefit_AI-sandboxing-security-1.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Homepage_Benefit_AI-sandboxing-security-1.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Homepage_Benefit_AI-sandboxing-security-1.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Homepage_Benefit_AI-sandboxing-security-1.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Homepage_Benefit_AI-sandboxing-security-1.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Homepage_Benefit_AI-sandboxing-security-1.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'AI sandboxing
    & security', description: 'Provision isolated, least-privilege datasets for apps and agents with zero direct database access. Keep governance intact while enabling RAG, agents, and AI workflows.', cta: { title: 'Learn more', url: '/feature/secure-ai-sandboxing', target: '_blank', }, }, { icon: { ID: 1041, id: 1041, title: 'Homepage_Benefit_Distributed observability', filename: 'Homepage_Benefit_Distributed-observability-2.svg', filesize: 10585, url: '/website-assets/media/2025/11/Homepage_Benefit_Distributed-observability-2.svg', link: '/home/homepage_benefit_distributed-observability-3/', alt: '', author: '6', description: '', caption: '', name: 'homepage_benefit_distributed-observability-3', status: 'inherit', uploaded_to: 2, date: '2025-11-21 15:43:03', modified: '2025-11-21 15:43:03', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Homepage_Benefit_Distributed-observability-2.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Homepage_Benefit_Distributed-observability-2.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Homepage_Benefit_Distributed-observability-2.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Homepage_Benefit_Distributed-observability-2.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Homepage_Benefit_Distributed-observability-2.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Homepage_Benefit_Distributed-observability-2.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'Distributed
    observability', description: 'Perform end-to-end tracing across SQL, embeddings, search, and LLM calls. Debug, measure latency, and prove ROI from a single view.', cta: { title: 'Learn more', url: 'https://docs.spice.ai/features/observability', target: '_blank', }, }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> --- ## Cybersecurity URL: https://spice.ai/industry/cybersecurity Date: 2025-11-21T22:02:05 Description: Build fast, reliable, and intelligent cybersecurity applications. Spice delivers unified data access, real-time performance, and embedded AI integration across any environment. --- ## Financial Services URL: https://spice.ai/industry/financial-services Date: 2025-11-21T21:57:14 Description: Unify, govern, and accelerate sensitive financial data. Spice delivers federation, hybrid search, and integrated AI for regulated workloads. --- ## SaaS URL: https://spice.ai/industry/saas Date: 2025-11-21T22:11:12 Description: Power SaaS with live, governed data. Federate across warehouses and DBs, accelerate to millisecond latency, and add AI-all on one portable runtime. --- ## Integrations URL: https://spice.ai/integrations Date: 2025-11-21T00:46:47 Description: Spice offers 30+ integrations with leading databases, warehouses, data lakes, streaming systems, and more. --- ## Spice AI for AWS URL: https://spice.ai/partners/aws Description: Build Fast, Scalable AI Applications with Spice AI and Amazon Web Services Amazon S3, DynamoDB, Redshift, Aurora, RDS, and Amazon MSK with Spice.ai's unified query engine - no data movement required.", }, { icon: 'bolt', title: 'Integrate Amazon Bedrock AI', description: 'Connect Amazon Nova, Titan, Claude, and other foundation models through Amazon Bedrock for LLM inference and embeddings, with Bedrock Guardrails support for safe AI applications.', }, { icon: 'shield', title: 'Vector Search with S3 Vectors', description: 'Build semantic search and RAG applications using Amazon S3 Vectors - a new S3 bucket type for sub-second similarity queries on billions of vectors at up to 90% cost reduction.', }, { icon: 'building', title: 'Deploy via AWS Marketplace', description: 'Purchase and deploy Spice.ai Enterprise through AWS Marketplace with consolidated billing, Private Offers support, and fast onboarding using your existing AWS procurement workflows.', }, ], padding_top: 'st-lg', padding_bottom: 'sb-lg', theme: 'aws', }} /> Iceberg tables in Amazon S3 Tables using AWS Glue catalog integration.', url: 'https://spiceai.org/docs/components/data-connectors/s3', }, { logo: { src: '/website-assets/partners/aws/services/dynamodb.svg', alt: 'Amazon DynamoDB', }, title: 'Amazon DynamoDB & Streams', description: 'Federated SQL queries on DynamoDB tables with automatic schema inference and real-time CDC via DynamoDB Streams.', url: 'https://spiceai.org/docs/components/data-connectors/dynamodb', }, { logo: { src: '/website-assets/partners/aws/services/bedrock.svg', alt: 'Amazon Bedrock', }, title: 'Amazon Bedrock (Nova, Titan, Claude)', description: 'LLM inference with Amazon Nova and embeddings with Titan. Supports Bedrock Guardrails for content filtering.', url: 'https://spiceai.org/docs/components/models/aws-bedrock', }, { logo: { src: '/website-assets/partners/aws/services/s3-vectors.svg', alt: 'Amazon S3 Vectors', }, title: 'Amazon S3 Vectors', description: 'Sub-second similarity queries on billions of vectors with up to 90% cost reduction compared to traditional vector databases.', url: 'https://spice.ai/blog/amazon-s3-vectors', }, { logo: { src: '/website-assets/partners/aws/services/glue.svg', alt: 'AWS Glue', }, title: 'AWS Glue Data Catalog', description: 'Discover and query tables from AWS Glue with glob pattern filtering. Supports Iceberg and Delta Lake table formats.', url: 'https://spiceai.org/docs/components/catalogs/glue', }, { logo: { src: '/website-assets/partners/aws/services/redshift.svg', alt: 'Amazon Redshift', }, title: 'Amazon Redshift, Aurora & RDS', description: 'Connect to Redshift clusters, Aurora PostgreSQL/MySQL, and RDS instances with full SQL federation.', url: 'https://spiceai.org/docs/deployment/aws/integrations', }, ], padding_top: 'st-lg', padding_bottom: 'sb-lg', theme: 'aws', }} /> --- ## Spice AI for Databricks URL: https://spice.ai/partners/databricks Description: Build Fast, Accurate AI Applications with Spice AI and Databricks inventory tracking or fraud detection.", }, { icon: 'bolt', title: 'Embed AI with Applications', description: 'Integrate Databricks Mosaic AI model serving and embeddings with the Spice engine to deploy AI features, such as low-latency recommendation systems, search, or predictive maintenance.', }, { icon: 'shield', title: 'Streamline Data Governance', description: 'Manage Apache Iceberg and Delta Lake tables using Unity Catalog, enforcing secure access, ensuring compliance, and restricted data access.', }, { icon: 'bolt', title: 'Optimize Workload Performance', description: 'Use Spice.ai to cache hot data, replicate high-demand datasets, and load-balance hosted AI endpoints, maintaining speed and resilience for applications like real-time dashboards.', }, ], padding_top: 'st-lg', padding_bottom: 'sb-lg', }} /> DuckDB and SQLite.', url: 'https://spiceai.org/docs/components/data-connectors/databricks#spark-connect', }, { icon: 'bolt', title: 'Databricks Mosaic AI Integration', description: 'Model serving and embeddings integrations to bring MosaicAI alongside applications.', url: 'https://spiceai.org/docs/components/embeddings/databricks', }, { icon: 'shield', title: 'Unity Catalog Support', description: 'Comprehensive support for governance and security.', url: 'https://spiceai.org/docs/components/catalogs/databricks', }, { icon: 'building', title: 'Apache Iceberg & Delta Lake Support', description: 'Query and management of open format tables via Unity Catalog.', url: 'https://spiceai.org/docs/components/data-connectors/databricks#delta-lake-s3', }, { icon: 'users', title: 'Service Principal Authentication', description: 'M2M & U2M OAuth authentication for enterprise-grade role-based security.', url: 'https://spiceai.org/docs/components/data-connectors/databricks#authentication', }, ], padding_top: 'st-lg', padding_bottom: 'sb-lg', }} /> --- ## Spice AI for NetApp URL: https://spice.ai/partners/netapp Description: Build Accelerated, Data-Grounded AI Applications with Spice AI and NetApp ONTAP NetApp ONTAP S3, NFS, SMB, and Azure NetApp Files with Spice.ai's unified query engine - no data movement required.", }, { icon: 'bolt', title: 'Accelerate Queries Locally', description: 'Cache frequently accessed data alongside your application for sub-second latency. Eliminate network round-trips and reduce load on primary storage systems.', }, { icon: 'shield', title: 'Build Modern Data Lakehouses', description: 'Combine NetApp ONTAP S3 Lakehouse with Dremio and PostgreSQL for a composable data platform that supports real-time analytics and AI workloads.', }, { icon: 'building', title: 'Integrate LLMs with Your Data', description: 'Connect foundation models like GPT-4 to your NetApp data sources. Use natural language queries with spice chat to get answers grounded in your enterprise data.', }, ], padding_top: 'st-lg', padding_bottom: 'sb-lg', theme: 'netapp', }} /> ONTAP S3 buckets. Build data lakehouses with native Apache Iceberg support.', url: 'https://spiceai.org/docs/components/data-connectors/s3', }, { logo: { src: '/website-assets/partners/netapp/services/nfs.svg', alt: 'NFS', }, title: 'NFS File Shares', description: 'Access data on NFS-mounted NetApp volumes directly. Query files from network-attached storage with the File Data Connector.', url: 'https://spiceai.org/docs/components/data-connectors/file', }, { logo: { src: '/website-assets/partners/netapp/services/smb.svg', alt: 'SMB', }, title: 'SMB/CIFS Shares', description: 'Connect to SMB file shares for Windows-based workflows. Federate data from CIFS-mounted NetApp storage.', url: 'https://spiceai.org/docs/components/data-connectors/file', }, { logo: { src: '/website-assets/partners/netapp/services/sftp.svg', alt: 'SFTP', }, title: 'FTP/SFTP Access', description: 'Query files from FTP and SFTP servers. Supports Parquet, CSV, and JSON formats with secure transfer.', url: 'https://spiceai.org/docs/components/data-connectors/ftp', }, { logo: { src: '/website-assets/partners/netapp/services/ontap.svg', alt: 'ONTAP', }, title: 'Azure NetApp Files', description: 'Connect to Azure NetApp Files by Instaclustr for cloud-native enterprise file storage with high performance.', url: 'https://community.netapp.com/t5/Tech-ONTAP-Blogs/Building-Accelerated-Data-Grounded-Apps-with-Spice-ai-and-NetApp/ba-p/463612', }, { logo: { src: '/website-assets/partners/netapp/services/file.svg', alt: 'File Connector', }, title: 'Local File Systems', description: 'Query any locally accessible filesystem including mounted network shares. Supports automatic refresh on file changes.', url: 'https://spiceai.org/docs/components/data-connectors/file', }, ], padding_top: 'st-lg', padding_bottom: 'sb-lg', theme: 'netapp', }} /> --- ## Partners URL: https://spice.ai/partners Date: 2025-11-21T00:46:27 Description: Partner with Spice AI to deliver faster data, search, and AI solutions for your customers. Build integrations, co-market solutions, and power data-intensive applications and AI agents together. --- ## Hybrid SQL Search URL: https://spice.ai/platform/hybrid-sql-search Date: 2025-11-14T14:39:28 Description: Combine vector similarity, full-text, and keyword search in one SQL query. Fast, scalable, and production-ready. every time', description: 'Retrieve answers that reflect context (semantic meaning) and precision (exact match).', cta: { title: 'Learn more', url: 'https://spiceai.org/docs/features/search', target: '', }, }, { icon: { ID: 605, id: 605, title: 'Platform-Search_Benefits_Search at any scale', filename: 'Platform-Search_Benefits_Search-at-any-scale.svg', filesize: 8140, url: '/website-assets/media/2025/11/Platform-Search_Benefits_Search-at-any-scale.svg', link: '/platform/sql-federation-acceleration/attachment/platform-search_benefits_search-at-any-scale/', alt: '', author: '6', description: '', caption: '', name: 'platform-search_benefits_search-at-any-scale', status: 'inherit', uploaded_to: 543, date: '2025-11-18 19:39:16', modified: '2025-11-18 19:39:16', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Platform-Search_Benefits_Search-at-any-scale.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Platform-Search_Benefits_Search-at-any-scale.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Platform-Search_Benefits_Search-at-any-scale.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Platform-Search_Benefits_Search-at-any-scale.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Platform-Search_Benefits_Search-at-any-scale.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Platform-Search_Benefits_Search-at-any-scale.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'Search at any scale', description: 'Index and search billions of embeddings with low-latency, across cloud object storage or operational databases. Performance remains consistent as datasets grow.', cta: { title: 'Learn more', url: '/blog/amazon-s3-vectors-with-spice', target: '', }, }, { icon: { ID: 604, id: 604, title: 'Platform-Search_Benefits_Full SQL control', filename: 'Platform-Search_Benefits_Full-SQL-control.svg', filesize: 6603, url: '/website-assets/media/2025/11/Platform-Search_Benefits_Full-SQL-control.svg', link: '/platform/sql-federation-acceleration/attachment/platform-search_benefits_full-sql-control/', alt: '', author: '6', description: '', caption: '', name: 'platform-search_benefits_full-sql-control', status: 'inherit', uploaded_to: 543, date: '2025-11-18 19:39:15', modified: '2025-11-18 19:39:15', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Platform-Search_Benefits_Full-SQL-control.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Platform-Search_Benefits_Full-SQL-control.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Platform-Search_Benefits_Full-SQL-control.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Platform-Search_Benefits_Full-SQL-control.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Platform-Search_Benefits_Full-SQL-control.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Platform-Search_Benefits_Full-SQL-control.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'Full SQL control', description: 'Design, refine, and combine search results entirely in standard SQL.', cta: { title: 'Learn more', url: 'https://spiceai.org/docs/reference/sql/search', target: '', }, }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> Hybrid search in Spice.ai merges vector similarity (semantic) and full-text BM25 (keyword) results into one ranked output. Both search types run in parallel, and their ranks are combined using Reciprocal Rank Fusion (RRF) for optimal relevance.

    \n

    You can query this through the /v1/search API or with SQL functions like vector_search() and text_search(). Because results are treated as tables, you can filter, join, and aggregate just like any SQL dataset.

    \n', }, { title: 'How is Spice.ai different from a vector database?', paragraph: '

    Traditional vector databases require you to pair a vector index with separate text and keyword search systems, all running on clusters you have to provision and maintain. Spice.ai unifies vector, text, and relational search in a single runtime that you can deploy locally, in your cloud, or fully managed.

    \n

    You can join vector results with structured data, apply SQL filters, and run inference on top of them, all without moving data or managing multiple systems. For developers, this means a single query layer that delivers the power of a vector database, the flexibility of SQL, and the speed of an accelerated cache.

    \n', }, { title: 'When should I use S3 Vectors?', paragraph: "

    Use S3 Vectors when you need to store and query embeddings at large scale. It's ideal for workloads with millions or billions of vectors that don't need always-on compute. By offloading storage and similarity search to S3 Vectors, you get the scalability and durability of S3 with sub-second queries via transient compute. Spice manages the entire lifecycle: embedding, indexing, filtering, and query orchestration.

    \n", }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> --- ## LLM Inference URL: https://spice.ai/platform/llm-inference Date: 2025-10-29T14:30:24 Description: Call LLMs directly from SQL. Generate, summarize, and enrich data inline using the SQL AI function or natural language queries. in one workflow', description: 'Avoid context switching and integrate AI with standard SQL operations. Chain model responses to filters, joins, or aggregations to build RAG pipelines.', cta: { title: 'Learn more', url: 'https://spiceai.org/docs/api/HTTP/post-nsql', target: '', }, }, { icon: { ID: 606, id: 606, title: 'Platform-LLM_Benefits_Maintain data governance and security', filename: 'Platform-LLM_Benefits_Maintain-data-governance-and-security.svg', filesize: 5586, url: '/website-assets/media/2025/11/Platform-LLM_Benefits_Maintain-data-governance-and-security.svg', link: '/platform/sql-federation-acceleration/attachment/platform-llm_benefits_maintain-data-governance-and-security/', alt: '', author: '6', description: '', caption: '', name: 'platform-llm_benefits_maintain-data-governance-and-security', status: 'inherit', uploaded_to: 543, date: '2025-11-18 19:39:16', modified: '2025-11-18 19:39:16', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Platform-LLM_Benefits_Maintain-data-governance-and-security.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Platform-LLM_Benefits_Maintain-data-governance-and-security.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Platform-LLM_Benefits_Maintain-data-governance-and-security.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Platform-LLM_Benefits_Maintain-data-governance-and-security.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Platform-LLM_Benefits_Maintain-data-governance-and-security.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Platform-LLM_Benefits_Maintain-data-governance-and-security.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'Maintain data governance
    & security', description: 'All AI-driven operations are performed within your governed SQL environment, so data never leaves your compliance boundaries and access is fully auditable.', cta: { title: 'Learn more', url: 'https://spiceai.org/docs/components/tools', target: '', }, }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> AI() is a built-in Spice function that lets you call large language models directly inside SQL queries. It takes a prompt (and optional data columns) as input and returns model completions as query results. This allows you to summarize, translate, generate, or classify text inline without additional code or API management.

    \n', }, { title: 'How does text-to-SQL work?', paragraph: '

    Spice uses your preferred LLM to convert prompts into executable SQL. Results are constrained to your connected datasets and subject to all existing SQL permissions and governance rules.

    \n', }, { title: 'Can I use different model providers?', paragraph: '

    Yes. Spice abstracts model providers behind a common interface; select OpenAI, Anthropic, Bedrock, or your custom model by name in each call. This keeps your SQL portable and futureproof.

    \n', }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> --- ## SQL Federation & Acceleration URL: https://spice.ai/platform/sql-federation-acceleration Date: 2025-11-14T14:40:16 Description: Query any data source with sub-second speed. Spice combines SQL federation and acceleration in a single runtime with zero ETL. data sources', description: 'Query across data lakes, operational databases, and analytical warehouses. Join, aggregate, and analyze without data movement.', cta: { title: 'Explore federated SQL query', url: 'https://docs.spice.ai/features/federated-sql-query', target: '', }, }, { icon: { ID: 603, id: 603, title: 'Platform-Query_Benefits_Deliver sub-second query performance', filename: 'Platform-Query_Benefits_Deliver-sub-second-query-performance.svg', filesize: 8658, url: '/website-assets/media/2025/11/Platform-Query_Benefits_Deliver-sub-second-query-performance.svg', link: '/platform/sql-federation-acceleration/attachment/platform-query_benefits_deliver-sub-second-query-performance/', alt: '', author: '6', description: '', caption: '', name: 'platform-query_benefits_deliver-sub-second-query-performance', status: 'inherit', uploaded_to: 543, date: '2025-11-18 19:39:14', modified: '2025-11-18 19:39:14', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Platform-Query_Benefits_Deliver-sub-second-query-performance.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Platform-Query_Benefits_Deliver-sub-second-query-performance.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Platform-Query_Benefits_Deliver-sub-second-query-performance.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Platform-Query_Benefits_Deliver-sub-second-query-performance.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Platform-Query_Benefits_Deliver-sub-second-query-performance.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Platform-Query_Benefits_Deliver-sub-second-query-performance.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'Deliver sub-second
    query performance', description: 'Accelerate frequently-accessed data by materializing and indexing hot tables with local engines like DuckDB and SQLite.', cta: { title: 'Explore data acceleration', url: 'https://docs.spice.ai/features/data-acceleration', target: '', }, }, { icon: { ID: 602, id: 602, title: 'Platform-Query_Benefits_Simplify your data stack', filename: 'Platform-Query_Benefits_Simplify-your-data-stack.svg', filesize: 2610, url: '/website-assets/media/2025/11/Platform-Query_Benefits_Simplify-your-data-stack.svg', link: '/platform/sql-federation-acceleration/attachment/platform-query_benefits_simplify-your-data-stack/', alt: '', author: '6', description: '', caption: '', name: 'platform-query_benefits_simplify-your-data-stack', status: 'inherit', uploaded_to: 543, date: '2025-11-18 19:39:14', modified: '2025-11-18 19:39:14', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Platform-Query_Benefits_Simplify-your-data-stack.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Platform-Query_Benefits_Simplify-your-data-stack.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Platform-Query_Benefits_Simplify-your-data-stack.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Platform-Query_Benefits_Simplify-your-data-stack.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Platform-Query_Benefits_Simplify-your-data-stack.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Platform-Query_Benefits_Simplify-your-data-stack.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'Simplify your data stack', description: 'Replace multiple engines, ETL jobs, and custom caches with one lightweight runtime that handles federation, acceleration, and hybrid search in a single environment.', cta: { title: 'Get started with Spice', url: 'https://spiceai.org/docs/getting-started', target: '', }, }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> SQL federation lets you query data across multiple sources as if it were one. With Spice, you can connect directly to systems like S3, PostgreSQL, or Snowflake and execute unified SQL queries. Spice handles source integration, query planning, and result merging automatically without ETL.

    \n', }, { title: 'How does acceleration in Spice work?', paragraph: '

    Spice materializes and indexes hot data locally using embedded engines such as DuckDB, PostgreSQL, and SQLite. Frequently-queried data is cached and optimized for sub-second responses, while changes from the source are synced through CDC. This approach delivers analytical performance for operational workloads-ideal for APIs, dashboards, and AI agents.

    \n', }, { title: 'How is Spice different from other query engines?', paragraph: '

    Traditional query engines focus on analytics and often require separate systems for federation, caching, and serving. Spice unifies these capabilities in a single runtime built for operational and AI workloads.

    \n

    What sets Spice apart from other query engines is its broader, application-focused feature set designed for modern data and AI workloads. Spice combines federation, hybrid search, and embedded LLM inference into a single runtime, enabling teams to build complete, end-to-end workflows without the management overhead and performance concessions of using multiple systems.

    \n', }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> --- ## Spice Cloud Plans URL: https://spice.ai/pricing/cloud Description: Flexible cloud pricing plans for teams of all sizes Serverless Compute Instances

    ' }, { text: '

    Single Instance
    2 vCPU / 4 GB

    ' }, { text: '

    Single Instance
    4 vCPU / 8 GB

    ' }, { text: '

    Multi-Instance
    Custom vCPU & Mem

    ' }, ], }, { cell: [ { text: '

    Cloud Hosting

    ' }, { text: '

    Shared, Multi-Tenant Cluster
    (us-east-1, us-west-2)

    ', }, { text: '

    Shared, Multi-Tenant Cluster
    (us-east-1, us-west-2)

    ', }, { text: '

    Dedicated AWS Cluster
    (us-east-1, us-west-2 + additional regions by request)

    ', }, ], }, { cell: [ { text: '

    Ephemeral Local Storage

    ' }, { text: '

    100 MB

    ' }, { text: '

    1.0 GB

    ' }, { text: '

    4.0+ GB

    ' }, ], }, { cell: [ { text: '

    Persistent Object Storage

    ' }, { text: '

    N/A

    ' }, { text: '

    N/A

    ' }, { text: '

    10.0+ GB

    ' }, ], }, { cell: [ { text: '

    Query Limits

    ' }, { text: '

    Up to 16 concurrent queries
    90-second timeout

    ' }, { text: '

    Up to 64 concurrent queries
    5-minute timeout

    ' }, { text: '

    Up to 1024 concurrent queries
    30-minute timeout

    ', }, ], }, { cell: [ { text: '

    APIs

    ' }, { text: '

    HTTP, Arrow Flight,
    Arrow Flight SQL, ADBC

    ' }, { text: '

    HTTP, Arrow Flight,
    Arrow Flight SQL, ADBC

    ' }, { text: '

    HTTP, Arrow Flight, Arrow Flight SQL,
    JDBC/ODBC/ADBC

    ', }, ], }, { cell: [ { text: '

    SDKs

    ' }, { text: '

    Python, Go, Node.js,
    Rust, C#, Java

    ' }, { text: '

    Python, Go, Node.js,
    Rust, C#, Java

    ' }, { text: '

    Python, Go, Node.js,
    Rust, C#, Java

    ' }, ], }, { cell: [ { text: '

    Availability

    ' }, { text: '

    Single Cloud,
    Single Region

    ' }, { text: '

    Single Cloud,
    Single Region

    ' }, { text: '

    Multi-Cloud, Multi-Region
    High-Availability

    ' }, ], }, { cell: [ { text: '

    Users

    ' }, { text: '

    1

    ' }, { text: '

    Unlimited

    ' }, { text: '

    Unlimited

    ' }, ], }, { cell: [ { text: '

    Apps

    ' }, { text: '

    5

    ' }, { text: '

    10

    ' }, { text: '

    1000

    ' }, ], }, { cell: [ { text: '

    Commercial License

    ' }, { text: '

    No

    ' }, { text: '

    Yes

    ', icon: 'check' }, { text: '

    Yes

    ', icon: 'check' }, ], }, { cell: [ { text: '

    Commercial Resale

    ' }, { text: '

    No

    ' }, { text: '

    No

    ' }, { text: '

    Yes

    ', icon: 'check' }, ], }, { cell: [ { text: '

    Support

    ' }, { text: '

    Community support

    ' }, { text: '

    Standard, 8/5 next-business day

    ' }, { text: '

    Premium, 24/7 on-call

    ' }, ], }, { cell: [ { text: '

    Support Channels

    ' }, { text: '

    Community Slack

    ' }, { text: '

    Private Slack channel, Email

    ' }, { text: '

    Private GitHub repo, Private Slack, Email, On-Call Pager

    ', }, ], }, { cell: [ { text: '

    SLA

    ' }, { text: '

    99.0+ SLA

    ' }, { text: '

    99.0+ SLA

    ' }, { text: '

    Enterprise 99.9+ SLA

    ' }, ], }, { cell: [ { text: '

    Compliance

    ' }, { text: '

    SOC 2 Type II

    ', icon: 'check' }, { text: '

    SOC 2 Type II

    ', icon: 'check' }, { text: '

    SOC 2 Type II

    ', icon: 'check' }, ], }, { cell: [ { text: '

    SSO

    ' }, { text: '

    Sign in with GitHub

    ' }, { text: '

    Sign in with GitHub

    ' }, { text: '

    Sign in with GitHub

    ' }, ], }, { cell: [ { text: '

    Trial

    ' }, { text: '

    Free 7-day Pro for Teams trial

    ' }, { text: '

    Free 7-day Pro for Teams trial

    ' }, { text: '

    Contact us

    ' }, ], }, ], }} /> Compute', description: 'Scale automatically with serverless compute instances. No infrastructure to manage - just deploy and go.', cta: { title: 'Get started', url: 'https://spice.ai/login', target: '_blank', }, }, { icon: { url: '/website-assets/svg/Pricing_Built-on-open-source.svg', alt: 'Enterprise Security', title: 'Enterprise Security', }, title: 'Enterprise
    Security', description: 'SOC 2 Type II compliant with enterprise-grade security controls and privacy protections built in.', cta: { title: 'Learn more', url: '/security/', target: '', }, }, { icon: { url: '/website-assets/svg/Pricing_Designed-for-performance-and-scale.svg', alt: 'High Availability', title: 'High Availability', }, title: 'High
    Availability', description: 'Enterprise plans include multi-region, high-availability deployments with 99.9%+ SLA.', cta: { title: 'Contact sales', url: '/contact/', target: '', }, }, ], }} /> All new accounts start with a free 7-day Pro for Teams trial. This gives you access to enhanced compute resources (4 vCPU / 8 GB), up to 64 concurrent queries, 5-minute query timeout, and 1.0 GB ephemeral storage. No credit card required to start.

    ', }, { title: 'Can I upgrade or downgrade my plan?', paragraph: '

    Yes, you can upgrade or downgrade your plan at any time. Changes take effect immediately and billing is prorated based on your usage.

    ', }, { title: 'What APIs and SDKs are supported?', paragraph: '

    All plans support HTTP, Apache Arrow Flight, Apache Arrow Flight SQL, and ADBC APIs. SDKs are available for Python, Go, Node.js, Rust, C#, and Java. Enterprise plans also include JDBC/ODBC support.

    ', }, { title: 'What is the difference between Developer and Pro for Teams?', paragraph: '

    Developer is designed for individual developers with a single user, 5 apps, and basic compute resources. Pro for Teams supports unlimited users, 10 apps, enhanced compute (4 vCPU / 8 GB), higher concurrency limits, commercial licensing, and standard support with private Slack and email channels.

    ', }, { title: 'What does Enterprise include?', paragraph: '

    Enterprise provides dedicated AWS clusters, multi-region high-availability, custom compute configurations, persistent object storage, up to 1024 concurrent queries, 30-minute query timeout, commercial resale rights, premium 24/7 on-call support, private GitHub repository access, and a 99.9%+ SLA.

    ', }, ], }} /> --- ## Pricing URL: https://spice.ai/pricing Date: 2025-11-19T12:16:23 Description: Start free and deploy anywhere: on your laptop, on-prem, at the edge, or in the cloud. Flexible pricing designed for teams building data-intensive applications & AI agents. Optimized For

    \n', }, { text: '

    Community

    \n', }, { text: '

    Managed Workloads

    \n', }, { text: '

    Self-Hosted Workloads

    \n', }, ], }, { cell: [ { text: '

    Scale

    \n', }, { text: '

    •  Single-Node
    \n•  Engine only

    \n', }, { text: '

    •  High-Availability
    \n•  Multi-Node with Clustering

    \n', }, { text: '

    •  High-Availability
    \n•  Multi-Node with Clustering

    \n', }, ], }, { cell: [ { text: '

    Control Plane

    \n', }, { text: '

    Static, configuration-driven only (YAML)

    \n', }, { text: '

    Dynamic, remote (Portal/API-managed)

    \n', }, { text: '

    Dynamic, remote/local (API/YAML)
    \nremote control in preview

    \n', }, ], }, { cell: [ { text: '

    Commercial License

    \n', }, { text: '

    Apache 2.0

    \n', }, { text: '

      Consumption-based TOS

    \n', }, { text: '

      Enterprise Software License

    \n', }, ], }, { cell: [ { text: '

    Code / Security Audited

    \n', }, { text: '

    No

    \n', }, { text: '

      Yes

    \n', }, { text: '

      Yes

    \n', }, ], }, { cell: [ { text: '

    Security Updates / Bugfixes

    \n', }, { text: '

    Latest minus-one release (last 6-8 weeks)

    \n', }, { text: '

    Rolling updates; automated patches; immediate fixes

    \n', }, { text: '

    Tiered up to 3 years; guaranteed patches, regular updates

    \n', }, ], }, { cell: [ { text: '

    24/7 Enterprise SLA

    \n', }, { text: '

    N/A

    \n

     

    \n', }, { text: '

      99.9% uptime, proactive failover

    \n', }, { text: '

      with 24/7 on-call

    \n', }, ], }, { cell: [ { text: '

    Support

    \n', }, { text: '

    Community (GitHub Issues, Discord)

    \n', }, { text: '

    Rolling updates; automated patches; immediate fixes

    \n', }, { text: '

    Tiered up to 3 years; guaranteed patches, regular updates

    \n', }, ], }, { cell: [ { text: '

    Distribution

    \n', }, { text: '

    OSS Docker Images; GitHub release binaries

    \n', }, { text: '

    Enterprise image; AWS Marketplace SaaS

    \n', }, { text: '

    Enterprise Image; AWS Marketplace ECR & AMI

    \n', }, ], }, { cell: [ { text: '

    Hosting

    \n', }, { text: '

    Self-Hosted

    \n', }, { text: '

    Self-hosted BYOL; Kubernetes, AWS AMI

    \n', }, { text: '

    Fully-managed, cloud-hosted; dedicated deployments (AWS)

    \n', }, ], }, { cell: [ { text: '

    Monitoring & Observability

    \n', }, { text: '

    DIY; OpenTelemetry (e.g. Grafana)

    \n', }, { text: '

    Real-time monitoring & observability; built-in dashboards

    \n

     

    \n', }, { text: '

    BYO (e.g., Datadog, New Relic, etc.) or Spice Cloud Connect

    \n

     

    \n', }, ], }, { cell: [ { text: '

    Compliance

    \n', }, { text: '

    N/A

    \n', }, { text: '

      SOC 2 Type II; audited security & privacy controls

    \n', }, { text: '

      SOC 2 Type II; audited security & privacy controls

    \n', }, ], }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> AI engine', description: 'Federate data, accelerate queries, perform hybrid search, and run AI models all from one portable runtime that can be deployed locally, on-prem, at the edge, or in the cloud.', cta: { title: 'Learn more', url: 'https://spiceai.org/docs/deployment', target: '_blank', }, }, { icon: { ID: 1136, id: 1136, title: 'Pricing_Built on open-source', filename: 'Pricing_Built-on-open-source.svg', filesize: 5035, url: '/website-assets/media/2025/11/Pricing_Built-on-open-source.svg', link: '/pricing/attachment/pricing_built-on-open-source/', alt: '', author: '6', description: '', caption: '', name: 'pricing_built-on-open-source', status: 'inherit', uploaded_to: 648, date: '2025-11-21 22:20:30', modified: '2025-11-21 22:20:30', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Pricing_Built-on-open-source.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Pricing_Built-on-open-source.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Pricing_Built-on-open-source.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Pricing_Built-on-open-source.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Pricing_Built-on-open-source.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Pricing_Built-on-open-source.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'Built on
    open-source', description: 'Leverage modern open-source technologies, including Arrow, DataFusion, DuckDB, SQLite, Iceberg, and more in one engine. ', cta: { title: 'Learn more', url: 'https://spiceai.org/docs', target: '_blank', }, }, { icon: { ID: 1137, id: 1137, title: 'Pricing_Designed for performance and scale', filename: 'Pricing_Designed-for-performance-and-scale.svg', filesize: 5289, url: '/website-assets/media/2025/11/Pricing_Designed-for-performance-and-scale.svg', link: '/pricing/attachment/pricing_designed-for-performance-and-scale/', alt: '', author: '6', description: '', caption: '', name: 'pricing_designed-for-performance-and-scale', status: 'inherit', uploaded_to: 648, date: '2025-11-21 22:20:31', modified: '2025-11-21 22:20:31', menu_order: 0, mime_type: 'image/svg+xml', type: 'image', subtype: 'svg+xml', icon: '/website-assets/media/default.png', width: 0, height: 0, sizes: { thumbnail: '/website-assets/media/2025/11/Pricing_Designed-for-performance-and-scale.svg', 'thumbnail-width': 1, 'thumbnail-height': 1, medium: '/website-assets/media/2025/11/Pricing_Designed-for-performance-and-scale.svg', 'medium-width': 1, 'medium-height': 1, medium_large: '/website-assets/media/2025/11/Pricing_Designed-for-performance-and-scale.svg', 'medium_large-width': 1, 'medium_large-height': 1, large: '/website-assets/media/2025/11/Pricing_Designed-for-performance-and-scale.svg', 'large-width': 1, 'large-height': 1, '1536x1536': '/website-assets/media/2025/11/Pricing_Designed-for-performance-and-scale.svg', '1536x1536-width': 1, '1536x1536-height': 1, '2048x2048': '/website-assets/media/2025/11/Pricing_Designed-for-performance-and-scale.svg', '2048x2048-width': 1, '2048x2048-height': 1, }, }, title: 'Designed for performance and scale', description: "Spice's architecture is optimized for low-latency data access. Deploy with single-node or distributed multi-node query execution.", cta: { title: 'Learn more', url: 'https://spiceai.org/docs/features/data-acceleration', target: '_blank', }, }, ], padding_top: 'unset', padding_bottom: 'unset', }} /> Yes. Spice.ai Enterprise is available on AWS Marketplace, allowing teams to purchase and deploy Spice through their existing AWS billing and procurement workflows. This includes support for Private Offers, consolidated billing, and fast onboarding. Visit the AWS Marketplace listing here.

    \n', }, { title: 'Is on-prem supported?', paragraph: '

    Yes. Spice is portable and can run on-prem in Kubernetes, VMs, or bare metal. Enterprises can also use private cloud deployments or hybrid models where acceleration and model serving run close to the application while governance is centralized.

    \n', }, { title: 'How is Spice Cloud Enterprise different from the other offerings?', paragraph: '

    Enterprise Cloud provides a dedicated, multi-region, high-availability cluster with significantly higher compute, storage, and concurrency limits, as well as enterprise-grade features. Unlike the Developer and Pro tiers, Enterprise includes custom vCPU/memory configurations, persistent object storage, JDBC/ODBC support, 1024+ concurrent queries, commercial licensing and resale rights, and Premium 24/7 on-call support with a 99.9% SLA.

    \n', }, ], padding_top: 'st-xl', padding_bottom: 'sb-xl', }} /> --- ## Privacy Policy URL: https://spice.ai/privacy-policy Date: 2025-10-23T00:58:38 Description: Your privacy matters. Read Spice AI's policy on data collection, usage, protection, and your rights to control your personal information. Large title si eros laoreet cui bitur mey socio' } /> Viverra volutpat varius gravida ultrices pulvinar. Hyperlink facilisis risus, quisque imperdiet pellentesque cursus etiam porttitor. Diam, feugiat facilisis congue lectus neque, risus. Integer id suscipit ut quis in hendrerit placerat nisi a. Volutpat at vitae vitae luctus ut odio. Felis vel risus elementum, sagittis. Mattis et faucibus diam quis risus. Odio vel viverra nulla consectetur varius tellus integer ultrices.

    ' } /> Small title si eros laoreet cui bitur mey socio' } /> Viverra volutpat varius gravida ultrices pulvinar. Adipiscing facilisis risus, quisque imperdiet pellentesque cursus etiam hyperlink hover. Diam, feugiat facilisis congue lectus neque, risus. Integer id suscipit ut quis in hendrerit placerat nisi a. Volutpat at vitae vitae luctus ut odio.
    Volutpat at vitae vitae luctus ut odio. Felis vel risus elementum, sagittis. Mattis et faucibus diam quis risus. Odio vel viverra nulla consectetur varius tellus integer ultrices.

    ' } /> Small title si eros laoreet cui bitur mey socio' } />
  • List volutpat varius gravida ultrices pulvinar.
  • Adipiscing facilisis risus, quisque imperdiet pellentesque cursus etiam porttitor.
  • Diam, feugiat facilisis congue lectus neque, risus.
  • Integer id suscipit ut quis in hendrerit placerat nisi a.
  • Volutpat at vitae vitae luctus ut odio.
  • ' } /> Small title si eros laoreet cui bitur mey socio' } />
  • List volutpat varius gravida ultrices pulvinar.
  • Adipiscing facilisis risus, quisque imperdiet pellentesque cursus etiam porttitor.
  • Diam, feugiat facilisis congue lectus neque, risus.
  • Integer id suscipit ut quis in hendrerit placerat nisi a.
  • Volutpat at vitae vitae luctus ut odio.
  • ' } /> Small title si eros laoreet cui bitur mey socio' } /> Viverra volutpat varius gravida ultrices pulvinar. Adipiscing facilisis risus, quisque imperdiet pellentesque cursus etiam hyperlink hover. Diam, feugiat facilisis congue lectus neque, risus. Integer id suscipit ut quis in hendrerit placerat nisi a. Volutpat at vitae vitae luctus ut odio.
    Volutpat at vitae vitae luctus ut odio. Felis vel risus elementum, sagittis. Mattis et faucibus diam quis risus. Odio vel viverra nulla consectetur varius tellus integer ultrices.

    ' } /> --- ## Security URL: https://spice.ai/security Date: 2025-11-21T00:42:01 Description: Learn how Spice AI protects your data with SOC 2 Type II compliance, strong access controls, encryption, secure coding, and a principled, defense-in-depth approach. Yes. Spice AI has achieved SOC 2 Type II compliance, independently audited by Prescient Assurance in accordance with AICPA standards. This certification validates our commitment to enterprise-grade security, availability, and process integrity. A copy of the audit report is available to customers on the Spice.ai Enterprise plan upon request.

    \n', }, { title: 'How is data protected in Spice?', paragraph: '

    Spice AI encrypts all sensitive data in transit and at rest. Corporate secrets are stored in an enterprise-grade password manager with SSO access, and service secrets are managed using platform-specific secure key vaults. TLS 1.2+ is enforced for all encrypted transmissions. Access is logged, auditable, and restricted using least-privilege and JIT access controls.

    \n', }, { title: 'How does Spice enforce access control?', paragraph: '

    Spice uses a combination of SSO, RBAC, strong authentication, and least-privilege policies to protect systems and environments. Access is granted only when required through just-in-time (JIT) workflows and automatically expires after a limited time. All access is logged, monitored, and auditable.

    \n', }, ], padding_top: 'st-xl', padding_bottom: 'sb-xl', }} /> --- ## Application Search URL: https://spice.ai/use-case/application-search Date: 2025-11-21T16:16:20 Description: Add fast, relevant search to your app with hybrid SQL search. Governed, low-latency, and easy to ship anywhere. --- ## Datalake Accelerator URL: https://spice.ai/use-case/datalake-accelerator Date: 2025-11-21T16:44:36 Description: Accelerate query performance in your data lake with Spice. Run SQL locally on federated datasets for up to 100x faster performance. --- ## Operational Data Lakehouse URL: https://spice.ai/use-case/operational-data-lakehouse Date: 2025-11-21T18:54:05 Description: Federate, accelerate, and serve data-intensive apps and AI agents directly from object storage with millisecond performance. --- ## Retrieval-Augmented Generation URL: https://spice.ai/use-case/retrieval-augmented-generation Date: 2025-11-21T18:37:26 Description: Build more accurate and trustworthy RAG systems. Spice unifies SQL federation, vector search, and model inference for data-grounded AI responses. --- ## Secure AI Agents URL: https://spice.ai/use-case/secure-ai-agents Date: 2025-11-21T19:01:05 Description: Build and deploy AI agents that are secure by design. Federate-governed context, enforce policy inline, and route to any model with full auditability. ---