<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>data-engineering on S Anand</title>
    <link>https://www.s-anand.net/blog/tag/data-engineering/</link>
    <description>Recent content in data-engineering on S Anand</description>
    <generator>Hugo -- 0.164.0</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 29 Jun 2026 18:00:00 +0800</lastBuildDate>
    <atom:link href="https://www.s-anand.net/blog/tag/data-engineering/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>When Data is for Agents Not Humans Workshop</title>
      <link>https://www.s-anand.net/blog/when-data-is-for-agents-not-humans-workshop/</link>
      <pubDate>Mon, 29 Jun 2026 18:00:00 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/when-data-is-for-agents-not-humans-workshop/</guid>
      <description>&lt;p&gt;For thirty years, we cleaned data for humans.
Now, agents are reading it.
What do we do differently?&lt;/p&gt;
&lt;p&gt;On &lt;strong&gt;Tue 𝟳 Jul 𝟮𝟬𝟮𝟲, 𝟮-𝟲pm IST&lt;/strong&gt;, I&amp;rsquo;m running a &lt;a href=&#34;https://hasgeek.com/fifthelephant/when-data-is-for-agents-workshop/&#34;&gt;Fifth Elephant workshop: &amp;ldquo;&lt;strong&gt;When Data is for Agents, Not Humans&lt;/strong&gt;&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have a few theories we&amp;rsquo;ll be testing on your data. Like:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tools beat tables&lt;/strong&gt;. Agents prefers functions over tables they can read.&lt;br&gt;
&lt;strong&gt;Logs beat docs&lt;/strong&gt;. Logs show actual usage - not how we&amp;rsquo;re supposed to use it.&lt;br&gt;
&lt;strong&gt;Messy beats clean&lt;/strong&gt;. Agents can do clean &amp;amp; join data. You just need descriptions.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not fully sure how much of this is right. That&amp;rsquo;s the point. We&amp;rsquo;ll work it out together, on &lt;em&gt;your&lt;/em&gt; data.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll do two things.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;See how one dataset looks to a human vs an agent - then &lt;strong&gt;rebuild it for the agent&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use agents to rebuild&lt;/strong&gt; the data. They&amp;rsquo;re good at it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;For&lt;/strong&gt;: data/AI engineers, BI folks, anyone publishing schemas, docs or APIs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bring&lt;/strong&gt;: a laptop, a &lt;strong&gt;paid&lt;/strong&gt; ChatGPT/Claude account, and a dataset you have and like.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s both online and in-person. 30 seats.&lt;/p&gt;
&lt;p&gt;Register at &lt;a href=&#34;https://hasgeek.com/fifthelephant/when-data-is-for-agents-workshop/&#34;&gt;https://hasgeek.com/fifthelephant/when-data-is-for-agents-workshop/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll share the recording.&lt;br&gt;
Attend only if you want to actually &lt;em&gt;do&lt;/em&gt; stuff live.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>RIP, Data Engineers</title>
      <link>https://www.s-anand.net/blog/rip-data-engineers/</link>
      <pubDate>Wed, 04 Feb 2026 19:22:13 +0800</pubDate>
      <guid>https://www.s-anand.net/blog/rip-data-engineers/</guid>
      <description>&lt;p&gt;As AI marches along, another role at risk is the data engineer / database administrator.&lt;/p&gt;
&lt;p&gt;(&lt;a href=&#34;https://sanand0.github.io/talks/2025-08-21-rip-data-scientists/&#34;&gt;Data scientists&lt;/a&gt; are already feeling the heat.)&lt;/p&gt;
&lt;p&gt;A common task for data engineers is to analyze SQL queries - to optimize and standardize.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/pavankumart18/&#34;&gt;Pavan&lt;/a&gt; used &lt;a href=&#34;https://antigravity.google/&#34;&gt;Antigravity&lt;/a&gt; to analyze 1,500 SQL queries and found:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;30% of queries are purely headcount / volume related. Much more than revenue (25%) or engagement (15%). That&amp;rsquo;s sign of a &lt;strong&gt;tactical culture&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;70% of the queries are about &lt;em&gt;What happened yesterday?&lt;/em&gt; rather than &lt;em&gt;What will happen tomorrow?&lt;/em&gt; - again, &lt;strong&gt;tactical culture&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://pavankumart18.github.io/sql-analysis/&#34;&gt;Here&amp;rsquo;s the analysis.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As a next step, he built a &amp;ldquo;Middle Layer&amp;rdquo; - intermediate tables that standardize and optimize queries. Instead of 50 fragile tables, the user can query just 3 robust tables that cover 98% of the SQL queries.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;net_revenue&lt;/code&gt; field that standardizes net revenue after adjustments, i.e. &lt;code&gt;SUM(face_value - discount)&lt;/code&gt;, which is used in 58% of queries. That ensures that Finance (which used to see the GAAP Revenue) and Sales (which used to see the Booked Revenue) are now aligned.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;tickets_sold&lt;/code&gt; field that standardizes distinct count of tickets sold, used in 85% of queries, and is a slow computation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NOTE: Season ticket buyers often bought merchandise as guests (for convenience). Marketing saw these as new customers and spammed them - annoying VIP customers. This standardization created an identity graph - so they can offer discounts instead.&lt;/p&gt;
&lt;p&gt;The process, which Antigravity figured out mostly by itself, was to parse the SQL into an abstract syntax tree (AST), extract a set of features, map them into clusters (archetypes), and analyze them to create the middle layer tables.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pavankumart18.github.io/sql-analysis/&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://files.s-anand.net/images/2026-02-04-sql-analysis-feature-table.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;SQL queries can reveal organizational culture and misalignment - which is cool! But also:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This took a few hours.&lt;/li&gt;
&lt;li&gt;Pavan has no data engineering experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RIP, Data Engineers.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Embeddings in DuckDB</title>
      <link>https://www.s-anand.net/blog/embeddings-in-duckdb/</link>
      <pubDate>Sun, 16 Jun 2024 13:06:44 +0000</pubDate>
      <guid>https://www.s-anand.net/blog/embeddings-in-duckdb/</guid>
      <description>&lt;p&gt;This article on &lt;a href=&#34;https://blog.brunk.io/posts/similarity-search-with-duckdb/&#34;&gt;Using DuckDB for Embeddings and Vector Search&lt;/a&gt; by Sören Brunk shows a number of DuckDB features I wasn&amp;rsquo;t aware of.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DuckDB can read directly from &lt;a href=&#34;https://huggingface.co/docs/hub/datasets-duckdb&#34;&gt;Huggingface datasets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DuckDB can read &lt;a href=&#34;https://duckdb.org/docs/data/parquet/overview#partial-reading&#34;&gt;just the parts of a .parquet file it needs&lt;/a&gt;, even &lt;a href=&#34;https://duckdb.org/2021/06/25/querying-parquet.html&#34;&gt;over HTTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DuckDB lets you &lt;a href=&#34;https://duckdb.org/docs/api/python/function&#34;&gt;write custom functions in Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DuckDB now has a &lt;a href=&#34;https://duckdb.org/2024/05/03/vector-similarity-search-vss.html&#34;&gt;vector similarity search extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve recently become a DuckDB fan and continue to be impressed.&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
