<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Schema-Free Data Ingestion with Zerobus and Variant Type in Technical Blog</title>
    <link>https://community.databricks.com/t5/technical-blog/schema-free-data-ingestion-with-zerobus-and-variant-type/ba-p/148399</link>
    <description>&lt;P&gt;&lt;SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/ingestion/zerobus-overview" target="_blank" rel="noopener"&gt;Zerobus Ingest&lt;/A&gt; now supports Databricks Variant type via &lt;A href="https://docs.databricks.com/aws/en/ingestion/zerobus-ingest" target="_self"&gt;REST API&lt;/A&gt; (Beta), enabling schema-free JSON ingestion. No more schema definitions, no more ETL headaches—just send your data and query it.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;The Schema Management Problem&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;If you've worked with data ingestion pipelines, you know the drill: define a schema, update it when your data structure changes, redeploy your pipeline, and hope nothing breaks. This cycle becomes especially painful when ingesting semi-structured data from APIs, logs, or IoT devices, where data schema evolution is frequent.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Traditional approaches force you to choose between:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Rigid schemas&lt;/STRONG&gt;&lt;SPAN&gt; that break when data structures change&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;String/JSON columns&lt;/STRONG&gt;&lt;SPAN&gt; that sacrifice query performance and type safety&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Complex ETL&lt;/STRONG&gt;&lt;SPAN&gt; to normalize everything into fixed tables&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Variant-type-blog-post.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/24623iAA0B67EB9C3A1831/image-size/large?v=v2&amp;amp;px=999" role="button" title="Variant-type-blog-post.png" alt="Variant-type-blog-post.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;&lt;BR /&gt;Enter Variant Type Support in Zerobus Ingest&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Databricks Variant type provides a native way to store and query semi-structured data without predefined schemas. With Zerobus Ingest's REST API support for Variant, you can now ingest JSON directly while maintaining query-performant reads.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Three Key Benefits&lt;/SPAN&gt;&lt;/H2&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Limited Schema Definitions Required: &lt;/STRONG&gt;&lt;SPAN&gt;Send your JSON data as-is. Add new fields tomorrow without updating schemas or redeploying pipelines.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Native Performance&lt;/STRONG&gt;&lt;SPAN&gt;: Unlike storing JSON as strings, Variant types are stored in an optimized format, where “Predictive Optimization” can apply &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/delta/variant-shredding" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;shredding&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; to enhance read performance.&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Simplified Pipelines&lt;/STRONG&gt;&lt;SPAN&gt;: Reduce your ETL code significantly. No more:&lt;/SPAN&gt;&lt;/LI&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Manual schema inference logic&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;JSON parsing and flattening steps&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Schema evolution tracking&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="2"&gt;&lt;SPAN&gt;Data type conversion errors&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;/OL&gt;
&lt;P&gt;&lt;SPAN&gt;The Zerobus Ingest REST API endpoint becomes your ingestion pipeline. Focus on business logic instead of data plumbing.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Getting Started&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;To enable Variant support in your Zerobus Ingest workflow:&lt;/SPAN&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Create a target table with a Variant column&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;Start ingesting JSON data without schema definitions&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;H2&gt;&lt;SPAN&gt;Step 1: Creating Your Target Table&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Before ingesting data, create a target table with a Variant column. Zerobus Ingest requires the table to exist beforehand—it will not auto-create tables for you.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Here's a simple table definition:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;CREATE TABLE main.default.events (
  event_id STRING,
  data VARIANT,
  ingested_at TIMESTAMP
);&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;This minimal schema gives you:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;An identifier field for tracking events.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;A &lt;/SPAN&gt;&lt;SPAN&gt;VARIANT&lt;/SPAN&gt;&lt;SPAN&gt; column to store your entire JSON payload.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;A timestamp for ingestion tracking.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;You can also use a single-column approach if you don't need additional metadata:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;CREATE TABLE main.default.events (
  data VARIANT
);&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;The beauty of Variant is that all your JSON structure lives in that one column, queryable without further schema definitions.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Step 2: Ingest Data&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Using the Zerobus Ingest REST API with Variant is straightforward. Here's a simple example:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;curl -X POST https://&amp;lt;databricks-workspace&amp;gt;.cloud.databricks.com/zerobus/v1/tables/main.default.events/insert \
  -H "Authorization: Bearer &amp;lt;token&amp;gt;" \
  -H "Content-Type: application/json" \
  -d '[
      {
        "event_id": "evt_123",
        "data": {
          "id": "usr_456",
          "email": "user@example.com",
          "preferences": {
            "notifications": true,
            "theme": "dark"
          }
        },
        "timestamp": "2026-02-13T10:30:00Z",
      },
      ...
    ]'&lt;/LI-CODE&gt;
&lt;P&gt;&lt;SPAN&gt;Once ingested, query your data with standard SQL and &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/semi-structured/variant#sql-shorthand-for-variant_get" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Variant shorthand SQL&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;SELECT
  event_id,
  data:id as user_id,
  data:preferences.theme as theme,
  data:email as email
FROM events
WHERE data:preferences.notifications = true;&lt;/LI-CODE&gt;
&lt;H2&gt;&lt;SPAN&gt;Real-World Use Cases&lt;/SPAN&gt;&lt;/H2&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;API Data Lakes&lt;/STRONG&gt;&lt;SPAN&gt;: Ingest webhook payloads without mapping every possible field upfront.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;Log Aggregation&lt;/STRONG&gt;&lt;SPAN&gt;: Collect application logs with varying structures from different services in a single table.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;STRONG&gt;IoT Telemetry&lt;/STRONG&gt;&lt;SPAN&gt;: Store sensor data where device capabilities and metrics evolve over time.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;H2&gt;&lt;SPAN&gt;Conclusion&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Zerobus Ingest with Variant type support removes the friction from semi-structured data ingestion. By combining the flexibility of schema-free JSON with the performance of native Databricks storage, you can build more resilient data pipelines with less code and less maintenance for maximum flexibility.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Ready to simplify your data ingestion? Check out the &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/aws/en/ingestion/zerobus-overview" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Zerobus Ingest documentation&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; and start sending data today.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;&lt;SPAN&gt;Have questions or want to share your Variant use cases? Join the discussion below!&lt;/SPAN&gt;&lt;/I&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 06 Mar 2026 23:11:29 GMT</pubDate>
    <dc:creator>Vicky_Bukta_DB</dc:creator>
    <dc:date>2026-03-06T23:11:29Z</dc:date>
    <item>
      <title>Schema-Free Data Ingestion with Zerobus and Variant Type</title>
      <link>https://community.databricks.com/t5/technical-blog/schema-free-data-ingestion-with-zerobus-and-variant-type/ba-p/148399</link>
      <description>&lt;P&gt;&lt;SPAN&gt;No more schema definitions, no more ETL headaches—just send your data and query it.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 06 Mar 2026 23:11:29 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/schema-free-data-ingestion-with-zerobus-and-variant-type/ba-p/148399</guid>
      <dc:creator>Vicky_Bukta_DB</dc:creator>
      <dc:date>2026-03-06T23:11:29Z</dc:date>
    </item>
    <item>
      <title>Re: Schema-Free Data Ingestion with Zerobus and Variant Type</title>
      <link>https://community.databricks.com/t5/technical-blog/schema-free-data-ingestion-with-zerobus-and-variant-type/bc-p/149102#M929</link>
      <description>&lt;P&gt;This really a great feature!&lt;BR /&gt;Having that option years ago would have made my life so much easier.&lt;BR /&gt;Thank for sharing.&lt;/P&gt;&lt;P&gt;I see from the &lt;A href="https://docs.databricks.com/aws/en/delta/variant-shredding" target="_self"&gt;documentation&lt;/A&gt;:&lt;/P&gt;&lt;P class="lia-indent-padding-left-30px"&gt;&lt;SPAN&gt;Shredding improves the query performance of&amp;nbsp;&lt;/SPAN&gt;VARIANT&lt;SPAN&gt;&amp;nbsp;data by storing commonly occurring fields as separate columns in the Parquet files. This process reduces the I/O required to read fields and improves compression using a columnar format instead of a binary blob.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Is there any&lt;STRONG&gt; known limit&lt;/STRONG&gt; on how many fields are shreded? Also, what is the logic that define '&lt;STRONG&gt;commonly occurring fields'&lt;/STRONG&gt;?&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Feb 2026 20:05:08 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/schema-free-data-ingestion-with-zerobus-and-variant-type/bc-p/149102#M929</guid>
      <dc:creator>wesleyfelipe</dc:creator>
      <dc:date>2026-02-23T20:05:08Z</dc:date>
    </item>
    <item>
      <title>Re: Schema-Free Data Ingestion with Zerobus and Variant Type</title>
      <link>https://community.databricks.com/t5/technical-blog/schema-free-data-ingestion-with-zerobus-and-variant-type/bc-p/149490#M942</link>
      <description>&lt;P&gt;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/209480"&gt;@wesleyfelipe&lt;/a&gt;&amp;nbsp;- thanks for the comment.&lt;/P&gt;&lt;P&gt;We don't publicly state the max field limit because it's subject to change, but think about 100+.&lt;/P&gt;&lt;P&gt;The *commonly occurring fields* decision is a heuristic based on write sampling, historical write data, and query history. Ie, whether the given value is common in a current batch, whether it is historically common for a given column, and whether it is frequently used in filters.&lt;/P&gt;</description>
      <pubDate>Fri, 27 Feb 2026 10:06:08 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/schema-free-data-ingestion-with-zerobus-and-variant-type/bc-p/149490#M942</guid>
      <dc:creator>atomic</dc:creator>
      <dc:date>2026-02-27T10:06:08Z</dc:date>
    </item>
  </channel>
</rss>

