<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DataLane weekly digest</title><description>New and revised entries in the DataLane manual, one post per week.</description><link>https://www.datalane-data.blog/</link><atom:link href="https://www.datalane-data.blog/digest.xml" rel="self" type="application/rss+xml"/><item><title>Week of Nov 2, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-11-02/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-11-02/</guid><description>11 changes in the manual for the week of Nov 2, 2026.</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Revised entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/aws-redshift-cost-optimization-guide/&quot;&gt;AWS Redshift Cost Optimization Guide: Serverless RPUs and WLM&lt;/a&gt;: Corrected the Redshift Serverless minimum base capacity from 8 RPUs to 4 RPUs.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-core-vs-dbt-cloud/&quot;&gt;dbt Core vs dbt Cloud: What You Are Actually Buying, and When to Stop Building It Yourself&lt;/a&gt;: Noted that dbt Labs renamed dbt Cloud to the dbt platform in May 2025.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/flink-vs-spark-streaming/&quot;&gt;Flink vs Spark Structured Streaming: State, Latency, and the Team You Actually Have&lt;/a&gt;: Credited the improved Spark stateful API to Spark 4.0 transformWithState rather than Spark 3.5.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/docker-pinned-images-for-pipelines/&quot;&gt;Docker Images: Pin Digests or Watch :latest Ship a Different Binary&lt;/a&gt;: Removed the ZooKeeper option from the local Kafka example; Kafka 4.0 is KRaft-only.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-fundamentals-for-data-engineers/&quot;&gt;Kafka Fundamentals: Topics, Partitions, and Consumer Groups Explained&lt;/a&gt;: Dropped ZooKeeper mode from the local setup; Kafka 4.0 runs only in KRaft mode.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/databricks-dlt-pipelines/&quot;&gt;Declarative Pipelines in Databricks: Expectations, Streaming Tables, and When the Abstraction Fights You&lt;/a&gt;: Updated the product name to Lakeflow pipelines and noted the recommended pyspark.pipelines (dp) module.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airflow-3-whats-new/&quot;&gt;Airflow 3 for Pipeline Authors: What Actually Changed and What to Fix First&lt;/a&gt;: Noted that Airflow 2 reached end of life on April 22, 2026.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/redshift-vs-snowflake/&quot;&gt;Redshift Serverless vs Snowflake in 2026: Architecture, Concurrency, Cost Model, and Migration Friction&lt;/a&gt;: Corrected the Redshift Serverless minimum base capacity from 8 RPUs to 4 RPUs.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-time-travel-explained/&quot;&gt;Snowflake Time Travel: How It Works, What It Costs, and When It Is Not a Backup&lt;/a&gt;: Snowflake Time Travel and Fail-safe in practice: retention, UNDROP, cloning at a timestamp, why storage follows churn, and a restore runbook you can test.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-cost-optimization-guide/&quot;&gt;Snowflake Cost Optimization: 7 Techniques That Actually Cut the Bill&lt;/a&gt;: Warehouse sizing, auto-suspend, clustering, ACCOUNT_USAGE queries, and resource monitors — estimate the bill from usage before you change prod.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/iceberg-vs-delta-lake/&quot;&gt;Iceberg vs Delta Lake in 2026: Metadata Design, Catalog Options, and How to Actually Choose&lt;/a&gt;: The feature lists have converged. What still differs is metadata structure, catalog architecture, and engine support, and those decide which format fits.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of Sep 21, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-09-21/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-09-21/</guid><description>3 changes in the manual for the week of Sep 21, 2026.</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/aws-redshift-cost-optimization-guide/&quot;&gt;AWS Redshift Cost Optimization Guide: Serverless RPUs and WLM&lt;/a&gt;: How to cut your AWS Redshift bill by optimizing Serverless base capacity, managing RPUs, leveraging RA3 instances, and tuning Workload Management (WLM).&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/cloud-data-warehouse-cost-comparison-guide/&quot;&gt;Cloud Data Warehouse Cost Comparison 2026: Snowflake, Databricks, BigQuery, and Redshift&lt;/a&gt;: A comprehensive TCO guide: pricing equations, real-world workload cost models, and how to use our interactive data stack cost estimator.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/databricks-vs-bigquery/&quot;&gt;Databricks vs Google BigQuery: Lakehouse vs Serverless Warehouse&lt;/a&gt;: A pragmatic comparison: Databricks for Lakehouse/Spark/ML vs BigQuery for Serverless/SQL-native analytical workflows on GCP.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of Aug 31, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-08-31/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-08-31/</guid><description>35 changes in the manual for the week of Aug 31, 2026.</description><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airbyte-vs-fivetran/&quot;&gt;Airbyte vs Fivetran: Connector Coverage, the Bill You Cannot Predict, and Who Fixes It at 2 a.m.&lt;/a&gt;: The ELT decision as it plays out: MAR pricing versus infrastructure you operate, what happens when a connector breaks, and when to write a custom extractor.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/clickhouse-vs-snowflake/&quot;&gt;ClickHouse vs Snowflake: Serving Latency, Concurrency, and Two Very Different Bills&lt;/a&gt;: Where a real-time OLAP engine beats a cloud warehouse and where it loses: latency at high concurrency, ingest patterns, joins at scale, and governance gaps.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-core-vs-dbt-cloud/&quot;&gt;dbt Core vs dbt Cloud: What You Are Actually Buying, and When to Stop Building It Yourself&lt;/a&gt;: The honest split between dbt Core and dbt Cloud: what Cloud adds over CI plus an orchestrator, what seats cost, and when self-hosting stops being cheaper.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/flink-vs-spark-streaming/&quot;&gt;Flink vs Spark Structured Streaming: State, Latency, and the Team You Actually Have&lt;/a&gt;: Flink vs Spark Structured Streaming in production: how each holds state, their real latency floors, and why your existing batch stack usually decides it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-vs-pulsar/&quot;&gt;Kafka vs Pulsar: Storage Architecture, Multi-Tenancy, and Why Most Teams Should Stay&lt;/a&gt;: The architecture differences that change operations: segment storage vs partition-as-log, tiered offload, tenant isolation, and when leaving Kafka is a mistake.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/parquet-vs-orc-vs-avro/&quot;&gt;Parquet vs ORC vs Avro: Pick by Access Pattern, Not by Benchmark&lt;/a&gt;: What each file format is built for: columnar analytics, Hive-native storage, and row-oriented streaming, plus the compression and small-file realities.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/polars-vs-pandas-data-pipelines/&quot;&gt;polars vs pandas for Data Pipelines: Where the Speedup Is Real and Where It Is Not&lt;/a&gt;: A decision guide, not a benchmark: what the expression API and lazy engine buy you, which pandas jobs will not get faster, and the gaps that remain.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/mlops-for-data-engineers/&quot;&gt;MLOps for Data Engineers: Feature Stores, Training Pipelines, and Where You Fit&lt;/a&gt;: MLOps through a data engineering lens: what feature stores actually solve, why training pipelines are just DAGs, and the skills that transfer.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Revised entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/clickhouse-mergetree-and-inserts/&quot;&gt;ClickHouse MergeTree: ORDER BY Is the Index, Tiny Inserts Are the Outage&lt;/a&gt;: ORDER BY is the only index that matters, one-row inserts explode parts, mutations rewrite data, and ClickHouse is not a warehouse stand-in. Batch the writes.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dagster-assets-in-production/&quot;&gt;Dagster Assets: Partitions, Checks, and Secrets That Do Not Live in Ops&lt;/a&gt;: Software-defined assets vs Airflow tasks, how partitions change backfills, asset checks versus dbt tests, and why warehouse credentials belong in resources.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/fabric-onelake-and-capacity/&quot;&gt;Fabric OneLake and Capacity: Shortcuts First, Then Stop Starving Spark&lt;/a&gt;: OneLake shortcuts are not a copy job, capacity units are shared, and a Power BI refresh can queue a Spark notebook. Fabric is not rebranded Synapse.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/polars-lazy-frames-in-production/&quot;&gt;Polars LazyFrames: The Speedup Is the Plan, Not the Syntax&lt;/a&gt;: Eager Polars still OOM’d a 12 GB box. Lazy scan, streaming collect, and leaving most pandas jobs alone — plus when DuckDB or Spark is the honest next step.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/prefect-deployments-in-production/&quot;&gt;Prefect Deployments: Flows, Work Pools, and the Green Run With Zero Rows&lt;/a&gt;: A flow is Python. A deployment is what actually runs. Work pools are where. Prefect will call an empty extract a success unless you raise.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/nifi-backpressure-and-provenance/&quot;&gt;NiFi Backpressure and Provenance: Unbounded Queues, Disk Fill, and When Kafka Connect Wins&lt;/a&gt;: FlowFiles pile up when a downstream processor stalls and provenance has its own disk. Set queue limits, watch both repositories, and skip NiFi as a Kafka bus.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/scala-datasets-for-spark-jobs/&quot;&gt;Scala Datasets: Read the Hot Path Even If You Ship PySpark&lt;/a&gt;: A typed Dataset[T] job caught a column I had been silently dropping in PySpark. You still have to read Scala; you do not have to write every job in it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/trino-federation-without-killing-oltp/&quot;&gt;Trino Federation: Query the Lake Without Melting Prod Postgres&lt;/a&gt;: Trino stores nothing. A federated SELECT * on prod Postgres is a database incident. Use Iceberg for the lake, and keep interactive SQL off OLTP.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/flink-event-time-watermarks-production/&quot;&gt;Flink Event Time and Watermarks: Checkpoints, Savepoints, and the Sink Key You Still Need&lt;/a&gt;: Processing time lies after a restart and watermarks drop late events on purpose. Checkpoints recover, savepoints migrate, Kafka EOS does not upsert Postgres.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/hudi-cow-mor-incremental/&quot;&gt;Hudi COW vs MOR: Incremental Queries Need Compaction, Not Another Format&lt;/a&gt;: Copy-on-write versus merge-on-read, incremental pulls versus snapshots, compaction as a job you schedule, and why one table gets one writer and one format.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/postgres-explain-vacuum-cdc/&quot;&gt;Postgres: EXPLAIN ANALYZE, VACUUM, and Why BI Must Leave the Primary&lt;/a&gt;: A BI scan froze autovacuum, the replication slot kept WAL, and the disk hit 91%. Read the plan, manage bloat, and keep CDC from filling the volume.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airbyte-raw-layer-in-production/&quot;&gt;Airbyte in Production: A Successful Sync of Zero Rows Is Still an Outage&lt;/a&gt;: Green sync, empty destination, raw JSON versus typed silver, self-host versus Cloud, and why Airbyte does not replace dbt.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/beam-runners-and-dataflow-cost/&quot;&gt;Beam Runners and Dataflow Cost: Portability vs Workers That Never Scale to Zero&lt;/a&gt;: Write-once Beam is real. The Dataflow bill is vCPU-hours plus Shuffle plus Streaming Engine, and Spark is cheaper if the team already writes Spark.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/mongodb-documents-to-silver/&quot;&gt;MongoDB to Silver: Flatten Nested Arrays Before They Double Revenue&lt;/a&gt;: A nested `items` array hit gold twice and finance saw 1.9x revenue. Land the document raw, explode once in silver, and do not pretend Mongo is the warehouse.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/cassandra-query-first-modeling/&quot;&gt;Cassandra: A New Query Is a New Table, Not a New Index Hope&lt;/a&gt;: ALLOW FILTERING timed out the coordinator and a quick report full-scanned the cluster. Model the query first and keep Cassandra off the warehouse path.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/fivetran-mar-and-destination-credits/&quot;&gt;Fivetran MAR: The Invoice That Doubled, and the Credits You Still Pay&lt;/a&gt;: Monthly active rows surprise you, warehouse writes have their own bill, a custom extractor can beat a connector, and Fivetran still does not replace dbt.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/hadoop-hive-to-iceberg-exit/&quot;&gt;Hadoop Hive to Iceberg: Why Lift-and-Shift to S3 Fails and How Banks Actually Exit&lt;/a&gt;: NameNode small-file pauses, the Hive metastore as the real lock-in, and why distcp-plus-EMR keeps the same tables. Iceberg is the exit, not a new cluster.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/data-quality-fail-job-or-ticket/&quot;&gt;Data Quality: Fail the Job, Open a Ticket, or Ignore Red Forever&lt;/a&gt;: Four checks (freshness, volume, schema, uniqueness), a written fail-versus-ticket policy, why always-red tests get ignored, and dbt vs GX vs a vendor.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/pulsar-multi-tenant-messaging/&quot;&gt;Pulsar Multi-Tenant Messaging: Brokers, BookKeeper, and When Not to Leave Kafka&lt;/a&gt;: Brokers are stateless. BookKeeper holds the log. Pulsar wins on tenant isolation and geo. A healthy Kafka cluster is not a fashion problem.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/redis-online-features-not-facts/&quot;&gt;Redis Features: Cache the Online Path, Never the Source of Truth&lt;/a&gt;: We trained on warehouse snapshots and served from Redis. After TTL eviction and a stampede the model looked broken. Online features are a cache.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/elasticsearch-sync-not-warehouse/&quot;&gt;Elasticsearch: Sync Documents, Stop Treating Aggregations as Facts&lt;/a&gt;: Dynamic mapping stored amount as text and a terms agg became the executive number. Idempotent ids, a reindex fallback, and warehouse math in the warehouse.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sqlmesh-plans-and-virtual-environments/&quot;&gt;SQLMesh Plans and Virtual Environments: What dbt State Cannot Isolate, and When to Stay&lt;/a&gt;: A SQLMesh plan is a snapshot diff you apply and virtual environments share unchanged tables. dbt defer is CI, not isolation, and you still need an orchestrator.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/terraform-modules-for-data-platforms/&quot;&gt;Terraform for Data Platforms: Modules for Warehouses, Not Click-Ops Grants&lt;/a&gt;: Click-ops Snowflake grants will not exist in the next account. Modules for warehouse plus IAM, secrets out of state, and Terraform for anything that lasts.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kubernetes-operators-for-data-jobs/&quot;&gt;Kubernetes Operators for Data Jobs: Unbounded Pods, Then the Cluster Dies&lt;/a&gt;: Airflow and Spark can spawn unbounded pods, requests and limits decide eviction, and MWAA or Databricks is sometimes the right way to not run K8s.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/redshift-sort-keys-wlm-spectrum/&quot;&gt;Redshift Sort Keys, WLM, and Spectrum: RA3 Tuning and the Concurrency Scaling Bill&lt;/a&gt;: COMPOUND sort keys and DISTKEY still decide scans on RA3, VACUUM and ANALYZE are not optional, and Spectrum SELECT * is an S3 bill.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/semantic-layer-metrics-not-workbooks/&quot;&gt;Semantic Layer: One Revenue Definition, Not Three Tableau Workbooks&lt;/a&gt;: Q2 revenue had three values depending on the workbook. LookML, MetricFlow, or a Power BI dataset can hold the metric, but they do not replace dbt.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-tutorial-first-project/&quot;&gt;dbt Tutorial: Build Your First Transformation Project the Right Way&lt;/a&gt;: Set up a dbt project from scratch: staging models, marts, tests, and documentation — with the project structure conventions used by real teams.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of Aug 24, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-08-24/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-08-24/</guid><description>55 changes in the manual for the week of Aug 24, 2026.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airflow-deferrable-operators-guide/&quot;&gt;Airflow Deferrable Operators: Stop Burning Worker Slots on Sensors&lt;/a&gt;: How the triggerer frees workers: why classic sensors hold a slot, FileSensor vs deferrable waits, and the habits that keep deferred tasks from sitting forever.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/clickhouse-mergetree-and-inserts/&quot;&gt;ClickHouse MergeTree: ORDER BY Is the Index, Tiny Inserts Are the Outage&lt;/a&gt;: ORDER BY is the only index that matters, one-row inserts explode parts, mutations rewrite data, and ClickHouse is not a warehouse stand-in. Batch the writes.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dagster-assets-in-production/&quot;&gt;Dagster Assets: Partitions, Checks, and Secrets That Do Not Live in Ops&lt;/a&gt;: Software-defined assets vs Airflow tasks, how partitions change backfills, asset checks versus dbt tests, and why warehouse credentials belong in resources.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/data-contracts-for-pipeline-teams/&quot;&gt;Data Contracts for Pipeline Teams: Fail the Producer, Not Just the Test&lt;/a&gt;: Schema plus SLAs as a producer-owned contract: fail the write path when grain or freshness breaks, instead of finding out in a warehouse test afterwards.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-incremental-models-in-production/&quot;&gt;dbt Incremental Models in Production: unique_key, Merge, and Late Arrivals&lt;/a&gt;: How incremental dbt models actually write: unique_key as merge grain, is_incremental filters, lookback windows, and late arrivals that silently drop rows.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/docker-pinned-images-for-pipelines/&quot;&gt;Docker Images: Pin Digests or Watch :latest Ship a Different Binary&lt;/a&gt;: A green CI build on python:3.11-slim:latest became a Saturday outage when prod pulled a new digest. Pin the bytes and promote the same image.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/llms-in-data-pipelines/&quot;&gt;Using LLMs Inside Data Pipelines: 4 Patterns That Actually Work in Production&lt;/a&gt;: Beyond chatbots: how data engineers use LLMs for entity extraction, data classification, documentation generation, and pipeline triage — with cost controls.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/mcp-for-data-engineers/&quot;&gt;MCP for Data Engineers: A Tool Bus, Not a Warehouse Login&lt;/a&gt;: Model Context Protocol as a tool bus for warehouse and pipeline context — read-only roles, no DROP, and prompt injection that hides in table comments.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-dynamic-tables-guide/&quot;&gt;Snowflake Dynamic Tables: TARGET_LAG, Refresh Warehouses, and When to Keep dbt&lt;/a&gt;: How Dynamic Tables actually refresh: TARGET_LAG, the warehouse that pays for it, streams vs DT, and why I still keep dbt for gold.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-micro-partitions-pruning/&quot;&gt;Snowflake Micro-Partitions and Pruning: Why Your Filter Still Scans the Table&lt;/a&gt;: What a micropartition is, how clustering and sargable filters prune, why wrapping columns and SELECT * blow the scan, and how to read partitions_scanned.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-streams-and-tasks-guide/&quot;&gt;Snowflake Streams and Tasks: Incremental Apply, Schedules, and When Airflow Still Owns the Graph&lt;/a&gt;: CREATE STREAM, consume it in a Task MERGE, handle stale offsets, and know when Airflow should still orchestrate dbt and everything outside Snowflake.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-zero-copy-clones-explained/&quot;&gt;Snowflake Zero-Copy Clones: Storage After Writes, Time Travel, and CI Schemas&lt;/a&gt;: CREATE … CLONE shares micropartitions until someone writes. How storage grows, cloning at a timestamp, clones in CI, and why gold is never mutated via a clone.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/ai-assisted-data-engineering-workflow/&quot;&gt;The AI-Assisted Data Engineer: A Practical Daily Workflow&lt;/a&gt;: How to actually use AI coding assistants for pipeline work: SQL generation, dbt refactoring, debugging, and docs, plus the failure modes to watch for.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/fabric-onelake-and-capacity/&quot;&gt;Fabric OneLake and Capacity: Shortcuts First, Then Stop Starving Spark&lt;/a&gt;: OneLake shortcuts are not a copy job, capacity units are shared, and a Power BI refresh can queue a Spark notebook. Fabric is not rebranded Synapse.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/polars-lazy-frames-in-production/&quot;&gt;Polars LazyFrames: The Speedup Is the Plan, Not the Syntax&lt;/a&gt;: Eager Polars still OOM’d a 12 GB box. Lazy scan, streaming collect, and leaving most pandas jobs alone — plus when DuckDB or Spark is the honest next step.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/prefect-deployments-in-production/&quot;&gt;Prefect Deployments: Flows, Work Pools, and the Green Run With Zero Rows&lt;/a&gt;: A flow is Python. A deployment is what actually runs. Work pools are where. Prefect will call an empty extract a success unless you raise.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/vector-databases-comparison/&quot;&gt;Vector Databases Compared: pgvector, Pinecone, Chroma, and When You Need None&lt;/a&gt;: An honest comparison of vector storage options for AI workloads — and why the right answer is often the database you already run.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/nifi-backpressure-and-provenance/&quot;&gt;NiFi Backpressure and Provenance: Unbounded Queues, Disk Fill, and When Kafka Connect Wins&lt;/a&gt;: FlowFiles pile up when a downstream processor stalls and provenance has its own disk. Set queue limits, watch both repositories, and skip NiFi as a Kafka bus.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/scala-datasets-for-spark-jobs/&quot;&gt;Scala Datasets: Read the Hot Path Even If You Ship PySpark&lt;/a&gt;: A typed Dataset[T] job caught a column I had been silently dropping in PySpark. You still have to read Scala; you do not have to write every job in it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/trino-federation-without-killing-oltp/&quot;&gt;Trino Federation: Query the Lake Without Melting Prod Postgres&lt;/a&gt;: Trino stores nothing. A federated SELECT * on prod Postgres is a database incident. Use Iceberg for the lake, and keep interactive SQL off OLTP.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/flink-event-time-watermarks-production/&quot;&gt;Flink Event Time and Watermarks: Checkpoints, Savepoints, and the Sink Key You Still Need&lt;/a&gt;: Processing time lies after a restart and watermarks drop late events on purpose. Checkpoints recover, savepoints migrate, Kafka EOS does not upsert Postgres.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/hudi-cow-mor-incremental/&quot;&gt;Hudi COW vs MOR: Incremental Queries Need Compaction, Not Another Format&lt;/a&gt;: Copy-on-write versus merge-on-read, incremental pulls versus snapshots, compaction as a job you schedule, and why one table gets one writer and one format.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/postgres-explain-vacuum-cdc/&quot;&gt;Postgres: EXPLAIN ANALYZE, VACUUM, and Why BI Must Leave the Primary&lt;/a&gt;: A BI scan froze autovacuum, the replication slot kept WAL, and the disk hit 91%. Read the plan, manage bloat, and keep CDC from filling the volume.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/rag-pipelines-for-data-engineers/&quot;&gt;RAG Pipelines for Data Engineers: You Already Know How to Build This&lt;/a&gt;: Retrieval-augmented generation is an ETL problem wearing an AI costume. How to build a production RAG ingestion pipeline with the skills you already have.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airbyte-raw-layer-in-production/&quot;&gt;Airbyte in Production: A Successful Sync of Zero Rows Is Still an Outage&lt;/a&gt;: Green sync, empty destination, raw JSON versus typed silver, self-host versus Cloud, and why Airbyte does not replace dbt.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/azure-data-engineering-fabric-synapse/&quot;&gt;Azure Data Engineering in 2026: Data Factory, Synapse, and Where Fabric Fits&lt;/a&gt;: A practical guide to the Azure data platform: when to use Data Factory, what happened to Synapse, and how Microsoft Fabric changes the picture.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/beam-runners-and-dataflow-cost/&quot;&gt;Beam Runners and Dataflow Cost: Portability vs Workers That Never Scale to Zero&lt;/a&gt;: Write-once Beam is real. The Dataflow bill is vCPU-hours plus Shuffle plus Streaming Engine, and Spark is cheaper if the team already writes Spark.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/mongodb-documents-to-silver/&quot;&gt;MongoDB to Silver: Flatten Nested Arrays Before They Double Revenue&lt;/a&gt;: A nested `items` array hit gold twice and finance saw 1.9x revenue. Land the document raw, explode once in silver, and do not pretend Mongo is the warehouse.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/best-data-engineering-courses/&quot;&gt;The 5 Best Data Engineering Courses in 2026 (Honest Review)&lt;/a&gt;: We compared the most popular data engineering courses and certificates on price, depth, and job-readiness. Here are the five actually worth your money.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/cassandra-query-first-modeling/&quot;&gt;Cassandra: A New Query Is a New Table, Not a New Index Hope&lt;/a&gt;: ALLOW FILTERING timed out the coordinator and a quick report full-scanned the cluster. Model the query first and keep Cassandra off the warehouse path.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/fivetran-mar-and-destination-credits/&quot;&gt;Fivetran MAR: The Invoice That Doubled, and the Credits You Still Pay&lt;/a&gt;: Monthly active rows surprise you, warehouse writes have their own bill, a custom extractor can beat a connector, and Fivetran still does not replace dbt.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/hadoop-hive-to-iceberg-exit/&quot;&gt;Hadoop Hive to Iceberg: Why Lift-and-Shift to S3 Fails and How Banks Actually Exit&lt;/a&gt;: NameNode small-file pauses, the Hive metastore as the real lock-in, and why distcp-plus-EMR keeps the same tables. Iceberg is the exit, not a new cluster.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/aws-data-engineering-stack-guide/&quot;&gt;The AWS Data Engineering Stack: Which Service Does What (and What to Skip)&lt;/a&gt;: S3, Glue, Kinesis, Redshift, Athena, EMR, Lambda — a map of the AWS data services, what each is actually for, and the combinations that work in practice.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/data-quality-fail-job-or-ticket/&quot;&gt;Data Quality: Fail the Job, Open a Ticket, or Ignore Red Forever&lt;/a&gt;: Four checks (freshness, volume, schema, uniqueness), a written fail-versus-ticket policy, why always-red tests get ignored, and dbt vs GX vs a vendor.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/pulsar-multi-tenant-messaging/&quot;&gt;Pulsar Multi-Tenant Messaging: Brokers, BookKeeper, and When Not to Leave Kafka&lt;/a&gt;: Brokers are stateless. BookKeeper holds the log. Pulsar wins on tenant isolation and geo. A healthy Kafka cluster is not a fashion problem.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/redis-online-features-not-facts/&quot;&gt;Redis Features: Cache the Online Path, Never the Source of Truth&lt;/a&gt;: We trained on warehouse snapshots and served from Redis. After TTL eviction and a stampede the model looked broken. Online features are a cache.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Revised entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/ai-assisted-data-engineering-workflow/&quot;&gt;The AI-Assisted Data Engineer: A Practical Daily Workflow&lt;/a&gt;: How to actually use AI coding assistants for pipeline work: SQL generation, dbt refactoring, debugging, and docs, plus the failure modes to watch for.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/vector-databases-comparison/&quot;&gt;Vector Databases Compared: pgvector, Pinecone, Chroma, and When You Need None&lt;/a&gt;: An honest comparison of vector storage options for AI workloads — and why the right answer is often the database you already run.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/rag-pipelines-for-data-engineers/&quot;&gt;RAG Pipelines for Data Engineers: You Already Know How to Build This&lt;/a&gt;: Retrieval-augmented generation is an ETL problem wearing an AI costume. How to build a production RAG ingestion pipeline with the skills you already have.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/azure-data-engineering-fabric-synapse/&quot;&gt;Azure Data Engineering in 2026: Data Factory, Synapse, and Where Fabric Fits&lt;/a&gt;: A practical guide to the Azure data platform: when to use Data Factory, what happened to Synapse, and how Microsoft Fabric changes the picture.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/best-data-engineering-courses/&quot;&gt;The 5 Best Data Engineering Courses in 2026 (Honest Review)&lt;/a&gt;: We compared the most popular data engineering courses and certificates on price, depth, and job-readiness. Here are the five actually worth your money.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/aws-data-engineering-stack-guide/&quot;&gt;The AWS Data Engineering Stack: Which Service Does What (and What to Skip)&lt;/a&gt;: S3, Glue, Kinesis, Redshift, Athena, EMR, Lambda — a map of the AWS data services, what each is actually for, and the combinations that work in practice.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-cortex-ai-for-data-engineers/&quot;&gt;Snowflake Cortex AI for Data Engineers: SQL Functions, Not Another Chatbot&lt;/a&gt;: How to use Cortex LLM functions inside pipelines — COMPLETE, CLASSIFY, EMBED — with cost controls, schema checks, retries, and a warehouse-native RAG shape.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airflow-vs-dagster-vs-prefect/&quot;&gt;Airflow vs Dagster vs Prefect in 2026: Which Orchestrator Should You Pick?&lt;/a&gt;: An honest comparison of the three major Python orchestrators: where each one shines, where each one hurts, and a simple decision rule.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/building-your-first-data-pipeline-with-airflow/&quot;&gt;Building Your First Data Pipeline with Python and Airflow&lt;/a&gt;: A beginner-friendly guide to your first ETL pipeline: extract from an API, transform with pandas, and load into a database, scheduled with Apache Airflow.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-iceberg-tables-guide/&quot;&gt;Snowflake-Managed Iceberg Tables: Open Storage without Losing Warehouse SQL&lt;/a&gt;: When to use Snowflake-managed Iceberg vs native tables: external volumes, catalogs, deletion vectors, and the interoperability jobs Iceberg actually wins.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sql-window-functions-data-engineers/&quot;&gt;SQL Window Functions: The 5 Patterns Every Data Engineer Uses Weekly&lt;/a&gt;: Deduplication, running totals, sessionization, period-over-period comparisons, and top-N per group — plus frames, pitfalls, and live playground queries.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-vs-databricks/&quot;&gt;Snowflake vs Databricks in 2026: Pick the Workload, Not the Logo&lt;/a&gt;: An honest head-to-head: SQL warehousing vs Spark lakehouse, Iceberg interoperability, Cortex vs Mosaic, and when you actually need both.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/python-data-quality-checks-pipelines/&quot;&gt;Data Quality Checks in Python: Catch Bad Data Before Your Users Do&lt;/a&gt;: A practical framework for adding data quality checks to Python pipelines: what to check, where to check it, and when to fail loudly vs quarantine.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-vs-bigquery/&quot;&gt;Snowflake vs BigQuery: Credits vs Bytes Scanned&lt;/a&gt;: The pricing models decide the architecture: warehouse-hours versus on-demand scans, plus multi-cloud vs GCP-native gravity.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/duckdb-local-data-pipelines/&quot;&gt;DuckDB: The Fastest Way to Build Local Data Pipelines in 2026&lt;/a&gt;: Why DuckDB replaced pandas in many pipelines: query Parquet and CSV files directly with SQL, at speeds that embarrass much bigger tools.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-vs-kinesis/&quot;&gt;Kafka vs Amazon Kinesis: Control vs Less Ops&lt;/a&gt;: When to run Kafka (or MSK) versus Kinesis Data Streams: partitions vs shards, replay, multi-cloud, and the hidden cost of “managed.”&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/bigquery-partitioning-clustering-guide/&quot;&gt;BigQuery Partitioning and Clustering: Stop Paying for Full Table Scans&lt;/a&gt;: BigQuery charges by bytes scanned. Learn how partitioning and clustering cut scan costs by 90%+, and the query patterns that silently bypass them.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/databricks-delta-lake-lakehouse-guide/&quot;&gt;Databricks and Delta Lake: A Practical Introduction to the Lakehouse&lt;/a&gt;: What the lakehouse actually is, how Delta Lake adds ACID transactions to cheap object storage, and the medallion architecture in practice.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/pyspark-tutorial-for-data-engineers/&quot;&gt;PySpark for Data Engineers: From Zero to Your First Production Job&lt;/a&gt;: Learn the PySpark DataFrame API, understand lazy evaluation and partitions, and avoid the classic mistakes that make Spark jobs slow.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of Aug 17, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-08-17/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-08-17/</guid><description>13 changes in the manual for the week of Aug 17, 2026.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/elasticsearch-sync-not-warehouse/&quot;&gt;Elasticsearch: Sync Documents, Stop Treating Aggregations as Facts&lt;/a&gt;: Dynamic mapping stored amount as text and a terms agg became the executive number. Idempotent ids, a reindex fallback, and warehouse math in the warehouse.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-cortex-ai-for-data-engineers/&quot;&gt;Snowflake Cortex AI for Data Engineers: SQL Functions, Not Another Chatbot&lt;/a&gt;: How to use Cortex LLM functions inside pipelines — COMPLETE, CLASSIFY, EMBED — with cost controls, schema checks, retries, and a warehouse-native RAG shape.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sqlmesh-plans-and-virtual-environments/&quot;&gt;SQLMesh Plans and Virtual Environments: What dbt State Cannot Isolate, and When to Stay&lt;/a&gt;: A SQLMesh plan is a snapshot diff you apply and virtual environments share unchanged tables. dbt defer is CI, not isolation, and you still need an orchestrator.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/terraform-modules-for-data-platforms/&quot;&gt;Terraform for Data Platforms: Modules for Warehouses, Not Click-Ops Grants&lt;/a&gt;: Click-ops Snowflake grants will not exist in the next account. Modules for warehouse plus IAM, secrets out of state, and Terraform for anything that lasts.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airflow-vs-dagster-vs-prefect/&quot;&gt;Airflow vs Dagster vs Prefect in 2026: Which Orchestrator Should You Pick?&lt;/a&gt;: An honest comparison of the three major Python orchestrators: where each one shines, where each one hurts, and a simple decision rule.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kubernetes-operators-for-data-jobs/&quot;&gt;Kubernetes Operators for Data Jobs: Unbounded Pods, Then the Cluster Dies&lt;/a&gt;: Airflow and Spark can spawn unbounded pods, requests and limits decide eviction, and MWAA or Databricks is sometimes the right way to not run K8s.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/redshift-sort-keys-wlm-spectrum/&quot;&gt;Redshift Sort Keys, WLM, and Spectrum: RA3 Tuning and the Concurrency Scaling Bill&lt;/a&gt;: COMPOUND sort keys and DISTKEY still decide scans on RA3, VACUUM and ANALYZE are not optional, and Spectrum SELECT * is an S3 bill.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/semantic-layer-metrics-not-workbooks/&quot;&gt;Semantic Layer: One Revenue Definition, Not Three Tableau Workbooks&lt;/a&gt;: Q2 revenue had three values depending on the workbook. LookML, MetricFlow, or a Power BI dataset can hold the metric, but they do not replace dbt.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-time-travel-explained/&quot;&gt;Snowflake Time Travel: How It Works, What It Costs, and When It Is Not a Backup&lt;/a&gt;: Snowflake Time Travel and Fail-safe in practice: retention, UNDROP, cloning at a timestamp, why storage follows churn, and a restore runbook you can test.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/building-your-first-data-pipeline-with-airflow/&quot;&gt;Building Your First Data Pipeline with Python and Airflow&lt;/a&gt;: A beginner-friendly guide to your first ETL pipeline: extract from an API, transform with pandas, and load into a database, scheduled with Apache Airflow.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-iceberg-tables-guide/&quot;&gt;Snowflake-Managed Iceberg Tables: Open Storage without Losing Warehouse SQL&lt;/a&gt;: When to use Snowflake-managed Iceberg vs native tables: external volumes, catalogs, deletion vectors, and the interoperability jobs Iceberg actually wins.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sql-window-functions-data-engineers/&quot;&gt;SQL Window Functions: The 5 Patterns Every Data Engineer Uses Weekly&lt;/a&gt;: Deduplication, running totals, sessionization, period-over-period comparisons, and top-N per group — plus frames, pitfalls, and live playground queries.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-vs-databricks/&quot;&gt;Snowflake vs Databricks in 2026: Pick the Workload, Not the Logo&lt;/a&gt;: An honest head-to-head: SQL warehousing vs Spark lakehouse, Iceberg interoperability, Cortex vs Mosaic, and when you actually need both.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of Aug 10, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-08-10/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-08-10/</guid><description>6 changes in the manual for the week of Aug 10, 2026.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/python-data-quality-checks-pipelines/&quot;&gt;Data Quality Checks in Python: Catch Bad Data Before Your Users Do&lt;/a&gt;: A practical framework for adding data quality checks to Python pipelines: what to check, where to check it, and when to fail loudly vs quarantine.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-vs-bigquery/&quot;&gt;Snowflake vs BigQuery: Credits vs Bytes Scanned&lt;/a&gt;: The pricing models decide the architecture: warehouse-hours versus on-demand scans, plus multi-cloud vs GCP-native gravity.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/duckdb-local-data-pipelines/&quot;&gt;DuckDB: The Fastest Way to Build Local Data Pipelines in 2026&lt;/a&gt;: Why DuckDB replaced pandas in many pipelines: query Parquet and CSV files directly with SQL, at speeds that embarrass much bigger tools.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-vs-kinesis/&quot;&gt;Kafka vs Amazon Kinesis: Control vs Less Ops&lt;/a&gt;: When to run Kafka (or MSK) versus Kinesis Data Streams: partitions vs shards, replay, multi-cloud, and the hidden cost of “managed.”&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/bigquery-partitioning-clustering-guide/&quot;&gt;BigQuery Partitioning and Clustering: Stop Paying for Full Table Scans&lt;/a&gt;: BigQuery charges by bytes scanned. Learn how partitioning and clustering cut scan costs by 90%+, and the query patterns that silently bypass them.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/databricks-delta-lake-lakehouse-guide/&quot;&gt;Databricks and Delta Lake: A Practical Introduction to the Lakehouse&lt;/a&gt;: What the lakehouse actually is, how Delta Lake adds ACID transactions to cheap object storage, and the medallion architecture in practice.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of Aug 3, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-08-03/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-08-03/</guid><description>3 changes in the manual for the week of Aug 3, 2026.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-cost-optimization-guide/&quot;&gt;Snowflake Cost Optimization: 7 Techniques That Actually Cut the Bill&lt;/a&gt;: Warehouse sizing, auto-suspend, clustering, ACCOUNT_USAGE queries, and resource monitors — estimate the bill from usage before you change prod.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-tutorial-first-project/&quot;&gt;dbt Tutorial: Build Your First Transformation Project the Right Way&lt;/a&gt;: Set up a dbt project from scratch: staging models, marts, tests, and documentation — with the project structure conventions used by real teams.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-fundamentals-for-data-engineers/&quot;&gt;Kafka Fundamentals: Topics, Partitions, and Consumer Groups Explained&lt;/a&gt;: The mental model every data engineer needs before touching Kafka: how topics, partitions, offsets, and consumer groups actually work together.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of Jul 27, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-07-27/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-07-27/</guid><description>1 changes in the manual for the week of Jul 27, 2026.</description><pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/pyspark-tutorial-for-data-engineers/&quot;&gt;PySpark for Data Engineers: From Zero to Your First Production Job&lt;/a&gt;: Learn the PySpark DataFrame API, understand lazy evaluation and partitions, and avoid the classic mistakes that make Spark jobs slow.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of May 18, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-05-18/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-05-18/</guid><description>9 changes in the manual for the week of May 18, 2026.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airflow-testing-and-local-dev/&quot;&gt;Testing Airflow Locally: A Setup That Catches Bugs Before Production Does&lt;/a&gt;: A four-layer Airflow testing setup: parse checks, DAG structure tests, task unit tests with mocked hooks, and dag.test() runs against local infrastructure.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/python-memory-optimization-data/&quot;&gt;Cutting Memory in Python Data Jobs: Dtypes, Chunking, Arrow, and Streaming&lt;/a&gt;: Where the memory actually goes in a pandas job, how much dtype selection and Arrow-backed strings really save, and when to stop loading and start streaming.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-snowpipe-streaming-guide/&quot;&gt;Snowpipe vs Snowpipe Streaming: Latency, Cost Per Row, and Which One You Need&lt;/a&gt;: Snowpipe file ingestion vs Snowpipe Streaming: real latency ranges, the credit math per million rows, and how to pick without over-engineering.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airflow-dynamic-task-mapping/&quot;&gt;Airflow Dynamic Task Mapping: Fan-Out That Works, and Fan-Out That Melts the Scheduler&lt;/a&gt;: Practical patterns for expand, expand_kwargs, and partial in Airflow: size and batch a fan-out safely without overwhelming the scheduler and metadata DB.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/iceberg-vs-delta-lake/&quot;&gt;Iceberg vs Delta Lake in 2026: Metadata Design, Catalog Options, and How to Actually Choose&lt;/a&gt;: The feature lists have converged. What still differs is metadata structure, catalog architecture, and engine support, and those decide which format fits.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/python-pipeline-testing-guide/&quot;&gt;Testing Data Pipelines in Python: Fixtures, Warehouse Fakes, and Property-Based Transforms&lt;/a&gt;: Layered testing for Python data pipelines: pure transform tests, DuckDB as a warehouse fake, property-based invariants, and what runs in CI vs production.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/slowly-changing-dimensions-guide/&quot;&gt;Slowly Changing Dimensions: Types 1 Through 6, and the Two You Will Actually Use&lt;/a&gt;: Working SQL for every SCD type, the point-in-time join most Type 2 builds get wrong, and an honest account of which types are worth the maintenance.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-masking-and-row-access/&quot;&gt;Snowflake Masking and Row Access Policies: Tag-Based Governance That Scales&lt;/a&gt;: Moving from per-column masking to tag-based masking and mapping-table row access policies, with the performance traps and audit queries that prove coverage.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/synapse-to-fabric-migration/&quot;&gt;Migrating from Synapse to Microsoft Fabric: What Maps Cleanly, What Does Not, and How to Sequence It&lt;/a&gt;: A component-by-component map from Synapse to Fabric, the T-SQL and workload management gaps that bite, and the order I move things in to keep risk low.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of May 11, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-05-11/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-05-11/</guid><description>19 changes in the manual for the week of May 11, 2026.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/debezium-cdc-postgres-guide/&quot;&gt;Debezium on Postgres: Replication Slots, Snapshots, and Applying Changes Idempotently&lt;/a&gt;: Postgres CDC with Debezium in production: how the replication slot fills your disk, snapshotting a large table without locks, and replay-safe change apply.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airflow-datasets-data-aware-scheduling/&quot;&gt;Airflow Datasets and Assets: Replacing Cron Guesswork With Data-Aware Scheduling&lt;/a&gt;: Move cross-team DAG dependencies from padded cron offsets to dataset triggers, with conditional scheduling, naming rules, and the failure modes to expect.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/databricks-dlt-pipelines/&quot;&gt;Declarative Pipelines in Databricks: Expectations, Streaming Tables, and When the Abstraction Fights You&lt;/a&gt;: What DLT genuinely buys you, how expectations and streaming tables behave in production, and the four situations where I still write plain Spark jobs instead.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dataflow-vs-dataproc/&quot;&gt;Dataflow vs Dataproc: The Beam Model, the Cost Profiles, and Which One Your Team Can Actually Run&lt;/a&gt;: Dataflow vs Dataproc on GCP in production: what Beam buys you, how the two billing models differ, and the team traits that decide the choice.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/azure-data-factory-patterns/&quot;&gt;ADF Pipeline Patterns That Scale: Parameterized Datasets, Metadata-Driven Ingestion, and Integration Runtime Sizing&lt;/a&gt;: How to build one Data Factory pipeline that ingests 300 tables instead of 300 pipelines, and how to size integration runtimes so the bill and the SLA both work.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/python-pandas-to-polars-migration/&quot;&gt;Pandas to Polars: What Translates, What Does Not, and What Breaks Quietly&lt;/a&gt;: A production migration guide: the expression API, lazy frames and query optimization, null versus NaN semantics, and pandas patterns with no polars twin.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-data-sharing-guide/&quot;&gt;Snowflake Data Sharing: Secure Shares, Reader Accounts, and the Marketplace Without Shipping Copies&lt;/a&gt;: How Snowflake secure data sharing works across accounts, regions, and clouds, when to use a reader account, and governance that keeps a share from leaking.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/star-schema-vs-one-big-table/&quot;&gt;Star Schema vs One Big Table: What Actually Costs Money on a Columnar Warehouse&lt;/a&gt;: Joins are not the expense they were in 2015. What a wide denormalized table really costs in storage, rebuild time, and history, and the hybrid I ship instead.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/airflow-3-whats-new/&quot;&gt;Airflow 3 for Pipeline Authors: What Actually Changed and What to Fix First&lt;/a&gt;: The Airflow 3 changes that break real DAGs: the Task SDK boundary, optional logical_date, removed context keys, DAG versioning, and an upgrade checklist.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-connect-in-production/&quot;&gt;Kafka Connect in Production: Converters, Dead Letter Queues, and Worker Sizing&lt;/a&gt;: The Connect settings that decide whether connectors survive real data: converter choice, error tolerance with a DLQ, SMT limits, and sizing workers.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/databricks-job-cost-optimization/&quot;&gt;Cutting a Databricks Bill: Job Clusters, Spot, Photon, and Finding the Top Offenders in System Tables&lt;/a&gt;: Taking 30 percent off a Databricks bill in a week: drop all-purpose clusters for jobs, price spot properly, test Photon per workload, rank system.billing.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/duckdb-vs-spark-single-node/&quot;&gt;DuckDB vs Spark on One Node: Where the Crossover Actually Happens&lt;/a&gt;: Real timings and costs comparing single-node DuckDB against a Spark cluster, and why the crossover point is decided by shuffle volume rather than raw data size.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowpark-vs-sql/&quot;&gt;Snowpark vs SQL: When Python Wins and When It Is Just a Slower Way to Write SQL&lt;/a&gt;: Snowpark Python vs plain SQL in Snowflake: lazy DataFrames, UDF serialization costs, and the four workloads where Python genuinely earns its place.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sql-deduplication-strategies/&quot;&gt;Six Ways to Deduplicate a Table: What Each Costs and Which Row Survives&lt;/a&gt;: DISTINCT, GROUP BY, ROW_NUMBER, QUALIFY, MERGE, and stream-side dedup compared on cost and semantics, plus how to pick the survivor row deterministically.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-performance-on-large-projects/&quot;&gt;dbt Performance at Scale: Threads, Materializations, and Per-Model Cost Attribution&lt;/a&gt;: Cutting dbt run time and warehouse spend on a large project: find the real critical path, see when threads stop helping, and attribute cost per model.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/llm-data-pipeline-patterns/&quot;&gt;Batch LLM Enrichment: Idempotency, Cost Per Row, and Knowing When the Output Is Wrong&lt;/a&gt;: An LLM call as a batch transformation step: content-hash idempotency, per-row cost budgets, retries for a non-deterministic API, and testing fuzzy output.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/step-functions-vs-airflow/&quot;&gt;Step Functions vs Airflow for Data Orchestration: Cost, Observability, and the Point Where You Outgrow One&lt;/a&gt;: State transitions vs scheduler hours, execution history vs task logs, and the signals that tell you which orchestrator your pipeline has outgrown.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/spark-structured-streaming-guide/&quot;&gt;Structured Streaming in Production: Triggers, Checkpoints, Watermarks, and Exactly-Once Sinks&lt;/a&gt;: What decides whether a Spark stream survives a year in production: trigger choice, checkpoint discipline, watermark math, and what exactly-once guarantees.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sql-recursive-cte-hierarchies/&quot;&gt;Recursive CTEs in Production: Org Charts, Bill of Materials, and Cycle Protection&lt;/a&gt;: How WITH RECURSIVE actually executes, patterns for hierarchy traversal and BOM explosion, and the cycle guards that keep a bad edge from running forever.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of May 4, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-05-04/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-05-04/</guid><description>22 changes in the manual for the week of May 4, 2026.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/aws-lambda-for-data-pipelines/&quot;&gt;Where Lambda Belongs in a Data Pipeline and Where It Quietly Becomes a Distributed System You Cannot Debug&lt;/a&gt;: Lambda is excellent glue and a terrible framework. Here are the limits that shape every design, the idempotency you must build yourself, and the point to stop.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/duckdb-for-production-pipelines/&quot;&gt;DuckDB in Production: The Jobs It Genuinely Wins and the Single-Node Limits You Will Hit&lt;/a&gt;: Where DuckDB belongs in a real pipeline, how far out-of-core execution gets you on one machine, and the concurrency and memory walls that decide when to stop.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-schema-registry-evolution/&quot;&gt;Kafka Schema Registry: Evolving Event Schemas Without Breaking Consumers&lt;/a&gt;: Avro versus Protobuf, what each compatibility mode really allows, and the CI gate that stops a breaking schema change before it reaches a topic.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-macros-and-jinja-patterns/&quot;&gt;dbt Macros and Jinja: The Patterns That Earn Their Keep, and the Clever Ones That Do Not&lt;/a&gt;: Which Jinja patterns earn their indirection in a production dbt project, how to test macros, and the metaprogramming that makes a project unmaintainable.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sql-pivot-unpivot-patterns/&quot;&gt;Pivot and Unpivot in SQL: Patterns That Survive a Changing Column Set&lt;/a&gt;: Conditional aggregation, native PIVOT syntax, unpivoting wide tables, and how to handle dynamic categories without generating SQL at runtime.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/vector-search-in-the-warehouse/&quot;&gt;Vector Search in the Warehouse: When You Do Not Need a Vector Database&lt;/a&gt;: Native vector search in Snowflake, BigQuery, and pgvector is now good enough for most RAG workloads. Thresholds, real costs, and when a dedicated store wins.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/redshift-vs-snowflake/&quot;&gt;Redshift Serverless vs Snowflake in 2026: Architecture, Concurrency, Cost Model, and Migration Friction&lt;/a&gt;: Redshift Serverless vs Snowflake in production: how RPU-seconds differ from credits, where each bends under concurrency, and what breaks in a migration.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-rbac-design/&quot;&gt;Snowflake RBAC Design: A Role Hierarchy That Survives an Audit and a Reorg&lt;/a&gt;: Split functional roles from access roles, use future grants and managed access schemas, and build a Snowflake permission model that stays reviewable.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/spark-memory-management-oom/&quot;&gt;Spark Executor Memory: Spill, GC, and the OOM Errors That Are Really Partition-Sizing Errors&lt;/a&gt;: How Spark executor memory is divided, why most OOMs are one oversized partition rather than a small cluster, and six failures you can read from the error.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/bigquery-pruning-internals/&quot;&gt;How BigQuery Pruning Actually Works: Partition Metadata, Block Statistics, and the Shapes That Defeat Both&lt;/a&gt;: What BigQuery reads before your data: partition metadata, Capacitor block statistics, and the query shapes that silently turn a pruned scan into a full one.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-snapshots-scd2/&quot;&gt;dbt Snapshots for SCD Type 2: Check vs Timestamp, and When to Hand-Roll&lt;/a&gt;: Choosing check or timestamp snapshot strategies, what happens when a snapshot run is missed, and when a hand-rolled SCD2 model beats dbt snapshot.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-exactly-once-semantics/&quot;&gt;Kafka Exactly-Once Semantics: What Transactions Actually Guarantee&lt;/a&gt;: Idempotent producers, transactions, and read_committed give exactly-once inside Kafka. Write to a database and you still need an idempotent sink.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-warehouse-sizing-guide/&quot;&gt;Snowflake Warehouse Sizing: The Spill and Queue Signals That Tell You Up or Out&lt;/a&gt;: Pick a Snowflake warehouse size from evidence, not intuition, using spilling, queueing, and scaling tests to choose a bigger warehouse or more clusters.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/spark-data-skew-fixes/&quot;&gt;Spark Data Skew: Diagnosing It Properly, Then Fixing It With Salting, AQE, and Broadcast&lt;/a&gt;: One task at 40 minutes while 399 finished in 20 seconds is skew. Here is how I find the offending key, and the four fixes ranked by how much they cost me.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sql-cte-vs-subquery-performance/&quot;&gt;CTE vs Subquery: When the WITH Clause Is a Materialization Barrier&lt;/a&gt;: What actually happens to a CTE in Postgres, Snowflake, and BigQuery, when it blocks predicate pushdown, and when referencing it twice costs you two scans.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/text-to-sql-in-production/&quot;&gt;Text-to-SQL in Production: Why the Demo Works and the Deployment Fails&lt;/a&gt;: The failure modes that appear after launch (join paths, metric drift, runaway cost) and the semantic layer, constraints, and evals that make text-to-SQL work.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/athena-cost-and-performance/&quot;&gt;Making Athena Fast and Cheap: Partition Projection, Parquet Layout, CTAS, and Workgroup Byte Limits&lt;/a&gt;: Athena bills for bytes scanned. The partition projection, Parquet layout, CTAS compaction, and workgroup guardrails I use to cut that number by 90 percent.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/bigquery-cost-optimization/&quot;&gt;Cutting a BigQuery Bill: Partitioning, Byte Limits, Materialized Views, and On-Demand vs Editions&lt;/a&gt;: Taking a runaway BigQuery invoice apart: find the top jobs, fix pruning, cap bytes billed, use materialized views honestly, and know when Editions wins.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-project-structure-guide/&quot;&gt;dbt Project Structure: A Layout That Survives Two Years and Forty Models&lt;/a&gt;: How I lay out staging, intermediate, and marts so a dbt project still makes sense after two years: naming rules, ref boundaries, and folders that rot.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kafka-consumer-group-rebalancing/&quot;&gt;Kafka Consumer Group Rebalancing: Why Your Consumers Stall and How to Stop It&lt;/a&gt;: Rebalances are the most common cause of Kafka consumer lag spikes. The protocol, the four timeouts that matter, and the cooperative sticky config I ship.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/spark-shuffle-explained/&quot;&gt;Spark Shuffle Explained: What It Costs, How to Read It in the UI, and the Rewrites That Remove It&lt;/a&gt;: A shuffle is a disk write, a network fetch, and a sort you did not ask for. What it costs, how to spot it in the Spark UI, and the rewrites that remove it.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sql-window-functions-deep-dive/&quot;&gt;Window Frames Deep Dive: RANGE vs ROWS and the Patterns That Replace Self-Joins&lt;/a&gt;: How window frames actually evaluate, why RANGE and ROWS give different answers on ties, and six window patterns that delete self-joins from your models.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Week of Apr 20, 2026</title><link>https://www.datalane-data.blog/changelog/#week-2026-04-20/</link><guid isPermaLink="true">https://www.datalane-data.blog/changelog/#week-2026-04-20/</guid><description>6 changes in the manual for the week of Apr 20, 2026.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;New entries&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-cortex-analyst-search/&quot;&gt;Cortex Analyst and Cortex Search: Shipping Chat With Your Data That Answers Correctly&lt;/a&gt;: How Cortex Analyst semantic models and Cortex Search hybrid retrieval fit together, what the YAML actually controls, and where the accuracy comes from.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/kinesis-streams-firehose-patterns/&quot;&gt;Kinesis Data Streams vs Firehose: Shards, On-Demand, and Landing Streams in S3&lt;/a&gt;: When Kinesis Data Streams earns its shards, when Firehose is enough, and the buffering and partitioning patterns that keep S3 landings queryable.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/sql-joins-explained-fan-out/&quot;&gt;Joins and the Fan-Out Bug: How Revenue Doubles Without an Error&lt;/a&gt;: The join fan-out failure class: grain checks before and after every join, EXISTS for semi-joins, anti-joins done right, and the postmortem pattern.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/dbt-slim-ci-state-defer/&quot;&gt;Slim CI in dbt: state:modified+ and --defer on a 1,000-Model Project&lt;/a&gt;: How to get dbt CI from 50 minutes to 4 with state comparison and defer: manifest artifacts, GitHub Actions wiring, and the edge cases that bite.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/databricks-unity-catalog-guide/&quot;&gt;Unity Catalog in Practice: Metastore Layout, Grants That Scale, and Leaving hive_metastore&lt;/a&gt;: How I structure Unity Catalog for real teams: three-level namespace design, group-based grants, lineage that works, and a hive_metastore migration that ships.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.datalane-data.blog/blog/snowflake-search-optimization-service/&quot;&gt;Snowflake Search Optimization Service: Point Lookups Without the Full Scan&lt;/a&gt;: How the search access path works, what it costs to build and maintain, which predicates it serves, and when clustering keys are the better buy.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item></channel></rss>