<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>DataLane</title><description>Production-tested tutorials across the data engineering stack: orchestration, Spark and Flink, Kafka and CDC, dbt, warehouses, Iceberg, cloud platforms, SQL, Python, and the AI stack — written by a working data engineer, not recycled docs.</description><link>https://datalane-data.blog/</link><item><title>MLOps for Data Engineers: Feature Stores, Training Pipelines, and Where You Fit</title><link>https://datalane-data.blog/blog/mlops-for-data-engineers/</link><guid isPermaLink="true">https://datalane-data.blog/blog/mlops-for-data-engineers/</guid><description>The MLOps landscape explained through a data engineering lens: what feature stores actually solve, why training pipelines are just DAGs, and the skills that transfer.</description><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Airflow Deferrable Operators: Stop Burning Worker Slots on Sensors</title><link>https://datalane-data.blog/blog/airflow-deferrable-operators-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/airflow-deferrable-operators-guide/</guid><description>How the triggerer frees workers: why classic sensors sleep on a slot, FileSensor vs deferrable waits, and the operational habits that keep deferred tasks from sitting forever.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>ClickHouse MergeTree: ORDER BY Is the Index, Tiny Inserts Are the Outage</title><link>https://datalane-data.blog/blog/clickhouse-mergetree-and-inserts/</link><guid isPermaLink="true">https://datalane-data.blog/blog/clickhouse-mergetree-and-inserts/</guid><description>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.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Dagster Assets: Partitions, Checks, and Secrets That Do Not Live in Ops</title><link>https://datalane-data.blog/blog/dagster-assets-in-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dagster-assets-in-production/</guid><description>Software-defined assets vs Airflow tasks, how partitions change backfills, asset checks versus dbt tests, and why warehouse credentials belong in resources.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Data Contracts for Pipeline Teams: Fail the Producer, Not Just the Test</title><link>https://datalane-data.blog/blog/data-contracts-for-pipeline-teams/</link><guid isPermaLink="true">https://datalane-data.blog/blog/data-contracts-for-pipeline-teams/</guid><description>Schema plus SLAs as a contract owned by the producer — fail the write path when the grain or freshness breaks, instead of discovering it in a warehouse test after the fact.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>dbt Incremental Models in Production: unique_key, Merge, and Late Arrivals</title><link>https://datalane-data.blog/blog/dbt-incremental-models-in-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dbt-incremental-models-in-production/</guid><description>How incremental dbt models actually write: unique_key as merge grain, is_incremental filters, lookback windows, and the late-arrival cases that silently drop rows.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Docker Images: Pin Digests or Watch :latest Ship a Different Binary</title><link>https://datalane-data.blog/blog/docker-pinned-images-for-pipelines/</link><guid isPermaLink="true">https://datalane-data.blog/blog/docker-pinned-images-for-pipelines/</guid><description>A Friday CI green on python:3.11-slim:latest became a Saturday outage when prod pulled a new digest. Pin the bytes, promote the same image, and stop treating Compose as Kafka.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Using LLMs Inside Data Pipelines: 4 Patterns That Actually Work in Production</title><link>https://datalane-data.blog/blog/llms-in-data-pipelines/</link><guid isPermaLink="true">https://datalane-data.blog/blog/llms-in-data-pipelines/</guid><description>Beyond chatbots: how data engineers use LLMs for entity extraction, data classification, documentation generation, and pipeline triage — with cost controls.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>MCP for Data Engineers: A Tool Bus, Not a Warehouse Login</title><link>https://datalane-data.blog/blog/mcp-for-data-engineers/</link><guid isPermaLink="true">https://datalane-data.blog/blog/mcp-for-data-engineers/</guid><description>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.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Dynamic Tables: TARGET_LAG, Refresh Warehouses, and When to Keep dbt</title><link>https://datalane-data.blog/blog/snowflake-dynamic-tables-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-dynamic-tables-guide/</guid><description>How Dynamic Tables actually refresh: TARGET_LAG, the warehouse that pays for it, streams vs DT, and why I still keep dbt for gold.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Micro-Partitions and Pruning: Why Your Filter Still Scans the Table</title><link>https://datalane-data.blog/blog/snowflake-micro-partitions-pruning/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-micro-partitions-pruning/</guid><description>What a micropartition is, how clustering and sargable filters prune, why wrapping columns and SELECT * blow the scan, and how to read partitions_scanned.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Streams and Tasks: Incremental Apply, Schedules, and When Airflow Still Owns the Graph</title><link>https://datalane-data.blog/blog/snowflake-streams-and-tasks-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-streams-and-tasks-guide/</guid><description>CREATE STREAM on a table, consume it in a Task MERGE, SHOW STREAMS, stale offsets, and the cases where Airflow still orchestrates dbt and everything outside Snowflake.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Zero-Copy Clones: Storage After Writes, Time Travel, and CI Schemas</title><link>https://datalane-data.blog/blog/snowflake-zero-copy-clones-explained/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-zero-copy-clones-explained/</guid><description>CREATE … CLONE shares micropartitions until someone writes. How storage grows, how to clone at a timestamp, how I use clones in CI, and why I never mutate gold through a clone.</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The AI-Assisted Data Engineer: A Practical Daily Workflow</title><link>https://datalane-data.blog/blog/ai-assisted-data-engineering-workflow/</link><guid isPermaLink="true">https://datalane-data.blog/blog/ai-assisted-data-engineering-workflow/</guid><description>How to actually use AI coding assistants for pipeline work — SQL generation, dbt refactoring, debugging, and documentation — plus the failure modes to watch for.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Fabric OneLake and Capacity: Shortcuts First, Then Stop Starving Spark</title><link>https://datalane-data.blog/blog/fabric-onelake-and-capacity/</link><guid isPermaLink="true">https://datalane-data.blog/blog/fabric-onelake-and-capacity/</guid><description>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.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Polars LazyFrames: The Speedup Is the Plan, Not the Syntax</title><link>https://datalane-data.blog/blog/polars-lazy-frames-in-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/polars-lazy-frames-in-production/</guid><description>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.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Prefect Deployments: Flows, Work Pools, and the Green Run With Zero Rows</title><link>https://datalane-data.blog/blog/prefect-deployments-in-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/prefect-deployments-in-production/</guid><description>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.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Vector Databases Compared: pgvector, Pinecone, Chroma, and When You Need None</title><link>https://datalane-data.blog/blog/vector-databases-comparison/</link><guid isPermaLink="true">https://datalane-data.blog/blog/vector-databases-comparison/</guid><description>An honest comparison of vector storage options for AI workloads — and why the right answer is often the database you already run.</description><pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate></item><item><title>NiFi Backpressure and Provenance: Unbounded Queues, Disk Fill, and When Kafka Connect Wins</title><link>https://datalane-data.blog/blog/nifi-backpressure-and-provenance/</link><guid isPermaLink="true">https://datalane-data.blog/blog/nifi-backpressure-and-provenance/</guid><description>FlowFiles pile up when a downstream processor stalls. Provenance has its own disk. Set queue limits, watch both repositories, and do not use NiFi as a Kafka bus.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Scala Datasets: Read the Hot Path Even If You Ship PySpark</title><link>https://datalane-data.blog/blog/scala-datasets-for-spark-jobs/</link><guid isPermaLink="true">https://datalane-data.blog/blog/scala-datasets-for-spark-jobs/</guid><description>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.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate></item><item><title>How Teams Cut Warehouse Costs by 60% with Query Optimization (Sponsored Example)</title><link>https://datalane-data.blog/blog/sponsored-example-dataflow-cloud/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sponsored-example-dataflow-cloud/</guid><description>A template sponsored post showing how to feature a partner product: a realistic case study structure with a clear sponsored label.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Trino Federation: Query the Lake Without Melting Prod Postgres</title><link>https://datalane-data.blog/blog/trino-federation-without-killing-oltp/</link><guid isPermaLink="true">https://datalane-data.blog/blog/trino-federation-without-killing-oltp/</guid><description>Trino stores nothing. A federated SELECT * on prod Postgres is a database incident. Use Iceberg for the lake, and keep interactive SQL off OLTP.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Flink Event Time and Watermarks: Checkpoints, Savepoints, and the Sink Key You Still Need</title><link>https://datalane-data.blog/blog/flink-event-time-watermarks-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/flink-event-time-watermarks-production/</guid><description>Processing time lies after a restart. Watermarks drop late events on purpose. Checkpoints recover; savepoints migrate. Exactly-once to Kafka does not upsert Postgres.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Hudi COW vs MOR: Incremental Queries Need Compaction, Not Another Format</title><link>https://datalane-data.blog/blog/hudi-cow-mor-incremental/</link><guid isPermaLink="true">https://datalane-data.blog/blog/hudi-cow-mor-incremental/</guid><description>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.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Postgres: EXPLAIN ANALYZE, VACUUM, and Why BI Must Leave the Primary</title><link>https://datalane-data.blog/blog/postgres-explain-vacuum-cdc/</link><guid isPermaLink="true">https://datalane-data.blog/blog/postgres-explain-vacuum-cdc/</guid><description>A BI scan on the orders primary froze autovacuum, the replication slot kept WAL, and the disk hit 91%. Read the plan, manage bloat, and keep CDC from filling the volume.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate></item><item><title>RAG Pipelines for Data Engineers: You Already Know How to Build This</title><link>https://datalane-data.blog/blog/rag-pipelines-for-data-engineers/</link><guid isPermaLink="true">https://datalane-data.blog/blog/rag-pipelines-for-data-engineers/</guid><description>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.</description><pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Airbyte in Production: A Successful Sync of Zero Rows Is Still an Outage</title><link>https://datalane-data.blog/blog/airbyte-raw-layer-in-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/airbyte-raw-layer-in-production/</guid><description>Green sync, empty destination, raw JSON versus typed silver, self-host versus Cloud, and why Airbyte does not replace dbt.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Azure Data Engineering in 2026: Data Factory, Synapse, and Where Fabric Fits</title><link>https://datalane-data.blog/blog/azure-data-engineering-fabric-synapse/</link><guid isPermaLink="true">https://datalane-data.blog/blog/azure-data-engineering-fabric-synapse/</guid><description>A practical guide to the Azure data platform: when to use Data Factory, what happened to Synapse, and how Microsoft Fabric changes the picture.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Beam Runners and Dataflow Cost: Portability vs Workers That Never Scale to Zero</title><link>https://datalane-data.blog/blog/beam-runners-and-dataflow-cost/</link><guid isPermaLink="true">https://datalane-data.blog/blog/beam-runners-and-dataflow-cost/</guid><description>Write-once Beam is real. The Dataflow bill is vCPU-hours plus Shuffle plus Streaming Engine. Streaming jobs keep a worker all night. Spark is cheaper if the team already writes Spark.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate></item><item><title>MongoDB to Silver: Flatten Nested Arrays Before They Double Revenue</title><link>https://datalane-data.blog/blog/mongodb-documents-to-silver/</link><guid isPermaLink="true">https://datalane-data.blog/blog/mongodb-documents-to-silver/</guid><description>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.</description><pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The 5 Best Data Engineering Courses in 2026 (Honest Review)</title><link>https://datalane-data.blog/blog/best-data-engineering-courses/</link><guid isPermaLink="true">https://datalane-data.blog/blog/best-data-engineering-courses/</guid><description>We compared the most popular data engineering courses and certificates on price, depth, and job-readiness. Here are the five actually worth your money.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Cassandra: A New Query Is a New Table, Not a New Index Hope</title><link>https://datalane-data.blog/blog/cassandra-query-first-modeling/</link><guid isPermaLink="true">https://datalane-data.blog/blog/cassandra-query-first-modeling/</guid><description>ALLOW FILTERING timed out the coordinator and a &quot;quick report&quot; full-scanned the serving cluster. Model the query first, extract without a table scan, and keep Cassandra off the warehouse path.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Fivetran MAR: The Invoice That Doubled, and the Credits You Still Pay</title><link>https://datalane-data.blog/blog/fivetran-mar-and-destination-credits/</link><guid isPermaLink="true">https://datalane-data.blog/blog/fivetran-mar-and-destination-credits/</guid><description>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.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Hadoop Hive to Iceberg: Why Lift-and-Shift to S3 Fails and How Banks Actually Exit</title><link>https://datalane-data.blog/blog/hadoop-hive-to-iceberg-exit/</link><guid isPermaLink="true">https://datalane-data.blog/blog/hadoop-hive-to-iceberg-exit/</guid><description>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.</description><pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The AWS Data Engineering Stack: Which Service Does What (and What to Skip)</title><link>https://datalane-data.blog/blog/aws-data-engineering-stack-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/aws-data-engineering-stack-guide/</guid><description>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.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Data Quality: Fail the Job, Open a Ticket, or Ignore Red Forever</title><link>https://datalane-data.blog/blog/data-quality-fail-job-or-ticket/</link><guid isPermaLink="true">https://datalane-data.blog/blog/data-quality-fail-job-or-ticket/</guid><description>Four checks — freshness, volume, schema, uniqueness — plus a written fail-versus-ticket policy, why permanently red tests train people to ignore them, and dbt vs GX vs a vendor.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Pulsar Multi-Tenant Messaging: Brokers, BookKeeper, and When Not to Leave Kafka</title><link>https://datalane-data.blog/blog/pulsar-multi-tenant-messaging/</link><guid isPermaLink="true">https://datalane-data.blog/blog/pulsar-multi-tenant-messaging/</guid><description>Brokers are stateless. BookKeeper holds the log. Pulsar wins on tenant isolation and geo. A healthy Kafka cluster is not a fashion problem.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Redis Features: Cache the Online Path, Never the Source of Truth</title><link>https://datalane-data.blog/blog/redis-online-features-not-facts/</link><guid isPermaLink="true">https://datalane-data.blog/blog/redis-online-features-not-facts/</guid><description>We trained on warehouse snapshots and served from Redis. TTL eviction and a stampede later, the model looked broken. Online features are a cache, not a fact table.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Elasticsearch: Sync Documents, Stop Treating Aggregations as Facts</title><link>https://datalane-data.blog/blog/elasticsearch-sync-not-warehouse/</link><guid isPermaLink="true">https://datalane-data.blog/blog/elasticsearch-sync-not-warehouse/</guid><description>Dynamic mapping stored amount as text, a terms agg became the executive number, and nobody could replay the index. Idempotent ids, a reindex fallback, and leave warehouse math in the warehouse.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Cortex AI for Data Engineers: SQL Functions, Not Another Chatbot</title><link>https://datalane-data.blog/blog/snowflake-cortex-ai-for-data-engineers/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-cortex-ai-for-data-engineers/</guid><description>How to use Cortex LLM functions inside pipelines — COMPLETE, CLASSIFY, EMBED — with cost controls, schema checks, retries, and a warehouse-native RAG shape.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>SQLMesh Plans and Virtual Environments: What dbt State Cannot Isolate, and When to Stay</title><link>https://datalane-data.blog/blog/sqlmesh-plans-and-virtual-environments/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sqlmesh-plans-and-virtual-environments/</guid><description>A plan is a snapshot diff you apply. Virtual environments share unchanged physical tables. dbt defer is CI, not isolation. Do not migrate a healthy dbt estate. You still need an orchestrator.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Terraform for Data Platforms: Modules for Warehouses, Not Click-Ops Grants</title><link>https://datalane-data.blog/blog/terraform-modules-for-data-platforms/</link><guid isPermaLink="true">https://datalane-data.blog/blog/terraform-modules-for-data-platforms/</guid><description>Click-ops Snowflake grants will not exist in the next account. Modules for warehouse plus IAM, secrets out of state, UI to explore, Terraform for anything that must last.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Airflow vs Dagster vs Prefect in 2026: Which Orchestrator Should You Pick?</title><link>https://datalane-data.blog/blog/airflow-vs-dagster-vs-prefect/</link><guid isPermaLink="true">https://datalane-data.blog/blog/airflow-vs-dagster-vs-prefect/</guid><description>An honest comparison of the three major Python orchestrators: where each one shines, where each one hurts, and a simple decision rule.</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Kubernetes Operators for Data Jobs: Unbounded Pods, Then the Cluster Dies</title><link>https://datalane-data.blog/blog/kubernetes-operators-for-data-jobs/</link><guid isPermaLink="true">https://datalane-data.blog/blog/kubernetes-operators-for-data-jobs/</guid><description>Airflow and Spark can spawn unbounded pods, requests and limits are the difference between busy and evicted, crash loops hide in operators, and MWAA or Databricks is sometimes the right way to not run K8s.</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Redshift Sort Keys, WLM, and Spectrum: RA3 Tuning and the Concurrency Scaling Bill</title><link>https://datalane-data.blog/blog/redshift-sort-keys-wlm-spectrum/</link><guid isPermaLink="true">https://datalane-data.blog/blog/redshift-sort-keys-wlm-spectrum/</guid><description>COMPOUND sort keys and DISTKEY still decide scans on RA3. VACUUM and ANALYZE are not optional. Spectrum SELECT * is an S3 bill. Concurrency scaling will surprise you.</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Semantic Layer: One Revenue Definition, Not Three Tableau Workbooks</title><link>https://datalane-data.blog/blog/semantic-layer-metrics-not-workbooks/</link><guid isPermaLink="true">https://datalane-data.blog/blog/semantic-layer-metrics-not-workbooks/</guid><description>Q2 revenue was $14.2M, $13.8M, and $15.1M depending on the workbook. LookML, MetricFlow, or a Power BI dataset can hold the metric — they do not replace dbt or hide extract lag.</description><pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Time Travel: How It Works, What It Costs, and When It Is Not a Backup</title><link>https://datalane-data.blog/blog/snowflake-time-travel-explained/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-time-travel-explained/</guid><description>A practical guide to Snowflake Time Travel and Fail-safe: retention, UNDROP, cloning at a timestamp, storage cost, and a restore runbook you can test.</description><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Building Your First Data Pipeline with Python and Airflow</title><link>https://datalane-data.blog/blog/building-your-first-data-pipeline-with-airflow/</link><guid isPermaLink="true">https://datalane-data.blog/blog/building-your-first-data-pipeline-with-airflow/</guid><description>Extract from an API, transform with pandas, load to a warehouse — scheduled in Airflow with retries, idempotency, and a local Docker setup.</description><pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake-Managed Iceberg Tables: Open Storage without Losing Warehouse SQL</title><link>https://datalane-data.blog/blog/snowflake-iceberg-tables-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-iceberg-tables-guide/</guid><description>When to use Snowflake-managed Iceberg vs native tables: external volumes, catalogs, deletion vectors, and the interoperability jobs Iceberg actually wins.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate></item><item><title>SQL Window Functions: The 5 Patterns Every Data Engineer Uses Weekly</title><link>https://datalane-data.blog/blog/sql-window-functions-data-engineers/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sql-window-functions-data-engineers/</guid><description>Deduplication, running totals, sessionization, period-over-period comparisons, and top-N per group — plus frames, pitfalls, and live playground queries.</description><pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake vs Databricks in 2026: Pick the Workload, Not the Logo</title><link>https://datalane-data.blog/blog/snowflake-vs-databricks/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-vs-databricks/</guid><description>An honest head-to-head: SQL warehousing vs Spark lakehouse, Iceberg interoperability, Cortex vs Mosaic, and when you actually need both.</description><pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Data Quality Checks in Python: Catch Bad Data Before Your Users Do</title><link>https://datalane-data.blog/blog/python-data-quality-checks-pipelines/</link><guid isPermaLink="true">https://datalane-data.blog/blog/python-data-quality-checks-pipelines/</guid><description>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.</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake vs BigQuery: Credits vs Bytes Scanned</title><link>https://datalane-data.blog/blog/snowflake-vs-bigquery/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-vs-bigquery/</guid><description>The pricing models decide the architecture: warehouse-hours versus on-demand scans, plus multi-cloud vs GCP-native gravity.</description><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate></item><item><title>DuckDB: The Fastest Way to Build Local Data Pipelines in 2026</title><link>https://datalane-data.blog/blog/duckdb-local-data-pipelines/</link><guid isPermaLink="true">https://datalane-data.blog/blog/duckdb-local-data-pipelines/</guid><description>Why DuckDB replaced pandas in many pipelines: query Parquet and CSV files directly with SQL, at speeds that embarrass much bigger tools.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Kafka vs Amazon Kinesis: Control vs Less Ops</title><link>https://datalane-data.blog/blog/kafka-vs-kinesis/</link><guid isPermaLink="true">https://datalane-data.blog/blog/kafka-vs-kinesis/</guid><description>When to run Kafka (or MSK) versus Kinesis Data Streams: partitions vs shards, replay, multi-cloud, and the hidden cost of “managed.”</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate></item><item><title>BigQuery Partitioning and Clustering: Stop Paying for Full Table Scans</title><link>https://datalane-data.blog/blog/bigquery-partitioning-clustering-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/bigquery-partitioning-clustering-guide/</guid><description>BigQuery charges by bytes scanned. Learn how partitioning and clustering cut scan costs by 90%+, and the query patterns that silently bypass them.</description><pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Delta Lake vs Apache Iceberg: Default on Databricks vs Shared Lake</title><link>https://datalane-data.blog/blog/delta-lake-vs-iceberg/</link><guid isPermaLink="true">https://datalane-data.blog/blog/delta-lake-vs-iceberg/</guid><description>Table-format choice in 2026: deletion vectors, catalogs, and which engine you are willing to lock in.</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Databricks and Delta Lake: A Practical Introduction to the Lakehouse</title><link>https://datalane-data.blog/blog/databricks-delta-lake-lakehouse-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/databricks-delta-lake-lakehouse-guide/</guid><description>What the lakehouse actually is, how Delta Lake adds ACID transactions to cheap object storage, and the medallion architecture in practice.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Cost Optimization: 7 Techniques That Actually Cut the Bill</title><link>https://datalane-data.blog/blog/snowflake-cost-optimization-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-cost-optimization-guide/</guid><description>Warehouse sizing, auto-suspend, clustering, ACCOUNT_USAGE queries, and resource monitors — estimate the bill from usage before you change prod.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>dbt Tutorial: Build Your First Transformation Project the Right Way</title><link>https://datalane-data.blog/blog/dbt-tutorial-first-project/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dbt-tutorial-first-project/</guid><description>Set up a dbt project from scratch: staging models, marts, tests, and documentation — with the project structure conventions used by real teams.</description><pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Kafka Fundamentals: Topics, Partitions, and Consumer Groups Explained</title><link>https://datalane-data.blog/blog/kafka-fundamentals-for-data-engineers/</link><guid isPermaLink="true">https://datalane-data.blog/blog/kafka-fundamentals-for-data-engineers/</guid><description>The mental model every data engineer needs before touching Kafka: how topics, partitions, offsets, and consumer groups actually work together.</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate></item><item><title>PySpark for Data Engineers: From Zero to Your First Production Job</title><link>https://datalane-data.blog/blog/pyspark-tutorial-for-data-engineers/</link><guid isPermaLink="true">https://datalane-data.blog/blog/pyspark-tutorial-for-data-engineers/</guid><description>Learn the PySpark DataFrame API, understand lazy evaluation and partitions, and avoid the classic mistakes that make Spark jobs slow.</description><pubDate>Sat, 01 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Testing Airflow Locally: A Setup That Catches Bugs Before Production Does</title><link>https://datalane-data.blog/blog/airflow-testing-and-local-dev/</link><guid isPermaLink="true">https://datalane-data.blog/blog/airflow-testing-and-local-dev/</guid><description>A four-layer testing setup for Airflow: parse checks, DAG structure tests, task unit tests with mocked hooks, and dag.test() end-to-end runs against local infrastructure.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate></item><item><title>Cutting Memory in Python Data Jobs: Dtypes, Chunking, Arrow, and Streaming</title><link>https://datalane-data.blog/blog/python-memory-optimization-data/</link><guid isPermaLink="true">https://datalane-data.blog/blog/python-memory-optimization-data/</guid><description>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.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>Snowpipe vs Snowpipe Streaming: Latency, Cost Per Row, and Which One You Need</title><link>https://datalane-data.blog/blog/snowflake-snowpipe-streaming-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-snowpipe-streaming-guide/</guid><description>A practical comparison of Snowpipe file ingestion and Snowpipe Streaming, covering real latency ranges, the credit math per million rows, and how to pick without over-engineering.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>Airflow Dynamic Task Mapping: Fan-Out That Works, and Fan-Out That Melts the Scheduler</title><link>https://datalane-data.blog/blog/airflow-dynamic-task-mapping/</link><guid isPermaLink="true">https://datalane-data.blog/blog/airflow-dynamic-task-mapping/</guid><description>Practical patterns for expand, expand_kwargs, and partial in Airflow: how to size a fan-out, batch it safely, and avoid the mapped tasks that overwhelm your scheduler and metadata database.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate></item><item><title>Iceberg vs Delta Lake in 2026: Metadata Design, Catalog Options, and How to Actually Choose</title><link>https://datalane-data.blog/blog/iceberg-vs-delta-lake/</link><guid isPermaLink="true">https://datalane-data.blog/blog/iceberg-vs-delta-lake/</guid><description>The feature lists have converged. What still differs is metadata structure, catalog architecture, and engine support, and those are what decide which format fits your stack.</description><pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate></item><item><title>Testing Data Pipelines in Python: Fixtures, Warehouse Fakes, and Property-Based Transforms</title><link>https://datalane-data.blog/blog/python-pipeline-testing-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/python-pipeline-testing-guide/</guid><description>A layered testing strategy for Python data pipelines: pure transform tests, DuckDB as a warehouse fake, property-based invariants, and what belongs in CI versus production.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate></item><item><title>Slowly Changing Dimensions: Types 1 Through 6, and the Two You Will Actually Use</title><link>https://datalane-data.blog/blog/slowly-changing-dimensions-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/slowly-changing-dimensions-guide/</guid><description>Working SQL for every SCD type, the point-in-time join that most Type 2 implementations get wrong, and an honest account of which types are worth the maintenance.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Masking and Row Access Policies: Tag-Based Governance That Scales</title><link>https://datalane-data.blog/blog/snowflake-masking-and-row-access/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-masking-and-row-access/</guid><description>How to move from per-column masking policies to tag-based masking and mapping-table row access policies, including the performance traps and the audit queries that prove coverage.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate></item><item><title>Migrating from Synapse to Microsoft Fabric: What Maps Cleanly, What Does Not, and How to Sequence It</title><link>https://datalane-data.blog/blog/synapse-to-fabric-migration/</link><guid isPermaLink="true">https://datalane-data.blog/blog/synapse-to-fabric-migration/</guid><description>A component-by-component migration 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.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate></item><item><title>Debezium on Postgres: Replication Slots, Snapshots, and Applying Changes Idempotently</title><link>https://datalane-data.blog/blog/debezium-cdc-postgres-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/debezium-cdc-postgres-guide/</guid><description>A production walkthrough of Postgres CDC with Debezium: how the replication slot fills your disk, how to snapshot a large table without locking it, and how to apply changes so replays are safe.</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate></item><item><title>Airflow Datasets and Assets: Replacing Cron Guesswork With Data-Aware Scheduling</title><link>https://datalane-data.blog/blog/airflow-datasets-data-aware-scheduling/</link><guid isPermaLink="true">https://datalane-data.blog/blog/airflow-datasets-data-aware-scheduling/</guid><description>How to move cross-team DAG dependencies from padded cron offsets to dataset-driven triggers, including conditional scheduling, naming rules, and the failure modes nobody warns you about.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>Declarative Pipelines in Databricks: Expectations, Streaming Tables, and When the Abstraction Fights You</title><link>https://datalane-data.blog/blog/databricks-dlt-pipelines/</link><guid isPermaLink="true">https://datalane-data.blog/blog/databricks-dlt-pipelines/</guid><description>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.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>Dataflow vs Dataproc: The Beam Model, the Cost Profiles, and Which One Your Team Can Actually Run</title><link>https://datalane-data.blog/blog/dataflow-vs-dataproc/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dataflow-vs-dataproc/</guid><description>A production comparison of Dataflow and Dataproc on GCP: what Beam buys you, how the two billing models differ, and the team characteristics that decide the choice.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>ADF Pipeline Patterns That Scale: Parameterized Datasets, Metadata-Driven Ingestion, and Integration Runtime Sizing</title><link>https://datalane-data.blog/blog/azure-data-factory-patterns/</link><guid isPermaLink="true">https://datalane-data.blog/blog/azure-data-factory-patterns/</guid><description>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.</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate></item><item><title>Pandas to Polars: What Translates, What Does Not, and What Breaks Quietly</title><link>https://datalane-data.blog/blog/python-pandas-to-polars-migration/</link><guid isPermaLink="true">https://datalane-data.blog/blog/python-pandas-to-polars-migration/</guid><description>A production migration guide: the expression API, lazy frames and query optimization, null versus NaN semantics, and the pandas patterns with no polars equivalent.</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Data Sharing: Secure Shares, Reader Accounts, and the Marketplace Without Shipping Copies</title><link>https://datalane-data.blog/blog/snowflake-data-sharing-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-data-sharing-guide/</guid><description>How Snowflake secure data sharing works across accounts, regions, and clouds, when to use a reader account, and the governance patterns that keep a share from leaking more than you intended.</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate></item><item><title>Star Schema vs One Big Table: What Actually Costs Money on a Columnar Warehouse</title><link>https://datalane-data.blog/blog/star-schema-vs-one-big-table/</link><guid isPermaLink="true">https://datalane-data.blog/blog/star-schema-vs-one-big-table/</guid><description>Joins are not the expense they were in 2015. Here is what a wide denormalized table really costs in storage, rebuild time, and history, and the hybrid I ship instead of picking a side.</description><pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate></item><item><title>Airflow 3 for Pipeline Authors: What Actually Changed and What to Fix First</title><link>https://datalane-data.blog/blog/airflow-3-whats-new/</link><guid isPermaLink="true">https://datalane-data.blog/blog/airflow-3-whats-new/</guid><description>The Airflow 3 changes that break real DAGs: the Task SDK boundary, logical_date becoming optional, removed context keys, DAG versioning, and a pre-upgrade checklist.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>Kafka Connect in Production: Converters, Dead Letter Queues, and Worker Sizing</title><link>https://datalane-data.blog/blog/kafka-connect-in-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/kafka-connect-in-production/</guid><description>The Connect settings that decide whether your connectors survive contact with real data: converter choice, error tolerance with a DLQ, SMT limits, and how to size and scale workers.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>Cutting a Databricks Bill: Job Clusters, Spot, Photon, and Finding the Top Offenders in System Tables</title><link>https://datalane-data.blog/blog/databricks-job-cost-optimization/</link><guid isPermaLink="true">https://datalane-data.blog/blog/databricks-job-cost-optimization/</guid><description>How I take 30 percent off a Databricks bill in a week: kill all-purpose clusters for jobs, price spot properly, test Photon per workload, and rank spend with system.billing.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate></item><item><title>DuckDB vs Spark on One Node: Where the Crossover Actually Happens</title><link>https://datalane-data.blog/blog/duckdb-vs-spark-single-node/</link><guid isPermaLink="true">https://datalane-data.blog/blog/duckdb-vs-spark-single-node/</guid><description>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.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate></item><item><title>Snowpark vs SQL: When Python Wins and When It Is Just a Slower Way to Write SQL</title><link>https://datalane-data.blog/blog/snowpark-vs-sql/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowpark-vs-sql/</guid><description>A production comparison of Snowpark Python and plain SQL in Snowflake, covering lazy DataFrames, UDF serialization costs, and the four workloads where Python genuinely earns its place.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate></item><item><title>Six Ways to Deduplicate a Table: What Each Costs and Which Row Survives</title><link>https://datalane-data.blog/blog/sql-deduplication-strategies/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sql-deduplication-strategies/</guid><description>DISTINCT, GROUP BY, ROW_NUMBER, QUALIFY, MERGE, and stream-side dedup compared on cost and semantics, plus how to pick the survivor row deterministically.</description><pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate></item><item><title>dbt Performance at Scale: Threads, Materializations, and Per-Model Cost Attribution</title><link>https://datalane-data.blog/blog/dbt-performance-on-large-projects/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dbt-performance-on-large-projects/</guid><description>Cutting dbt run time and warehouse spend on a large project: how to find the real critical path, when threads stop helping, and how to attribute cost to individual models.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>Batch LLM Enrichment: Idempotency, Cost Per Row, and Knowing When the Output Is Wrong</title><link>https://datalane-data.blog/blog/llm-data-pipeline-patterns/</link><guid isPermaLink="true">https://datalane-data.blog/blog/llm-data-pipeline-patterns/</guid><description>Treating an LLM call as a transformation step in a batch pipeline. Content-hash idempotency, per-row cost budgets, retry semantics for a non-deterministic API, and how to test output you cannot diff.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>Step Functions vs Airflow for Data Orchestration: Cost, Observability, and the Point Where You Outgrow One</title><link>https://datalane-data.blog/blog/step-functions-vs-airflow/</link><guid isPermaLink="true">https://datalane-data.blog/blog/step-functions-vs-airflow/</guid><description>State transitions versus scheduler hours, execution history versus task logs, and the specific signals that tell you which orchestrator your pipeline has outgrown.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Time Travel and Cloning: What They Really Cost and How to Migrate Safely</title><link>https://datalane-data.blog/blog/snowflake-time-travel-and-cloning/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-time-travel-and-cloning/</guid><description>How Time Travel retention, fail-safe, and zero-copy clones bill against storage, plus the migration and recovery patterns that make the storage cost worth paying.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate></item><item><title>Structured Streaming in Production: Triggers, Checkpoints, Watermarks, and Exactly-Once Sinks</title><link>https://datalane-data.blog/blog/spark-structured-streaming-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/spark-structured-streaming-guide/</guid><description>The four things that decide whether a Spark stream survives a year in production: trigger choice, checkpoint discipline, watermark math, and what exactly-once really guarantees.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate></item><item><title>Recursive CTEs in Production: Org Charts, Bill of Materials, and Cycle Protection</title><link>https://datalane-data.blog/blog/sql-recursive-cte-hierarchies/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sql-recursive-cte-hierarchies/</guid><description>How WITH RECURSIVE actually executes, patterns for hierarchy traversal and BOM explosion, and the cycle guards that keep a bad edge from running forever.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate></item><item><title>Where Lambda Belongs in a Data Pipeline and Where It Quietly Becomes a Distributed System You Cannot Debug</title><link>https://datalane-data.blog/blog/aws-lambda-for-data-pipelines/</link><guid isPermaLink="true">https://datalane-data.blog/blog/aws-lambda-for-data-pipelines/</guid><description>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.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>DuckDB in Production: The Jobs It Genuinely Wins and the Single-Node Limits You Will Hit</title><link>https://datalane-data.blog/blog/duckdb-for-production-pipelines/</link><guid isPermaLink="true">https://datalane-data.blog/blog/duckdb-for-production-pipelines/</guid><description>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.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>Kafka Schema Registry: Evolving Event Schemas Without Breaking Consumers</title><link>https://datalane-data.blog/blog/kafka-schema-registry-evolution/</link><guid isPermaLink="true">https://datalane-data.blog/blog/kafka-schema-registry-evolution/</guid><description>Avro versus Protobuf, what each compatibility mode really allows, and the CI gate that stops a breaking schema change before it reaches a topic your consumers cannot read.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>dbt Macros and Jinja: The Patterns That Earn Their Keep, and the Clever Ones That Do Not</title><link>https://datalane-data.blog/blog/dbt-macros-and-jinja-patterns/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dbt-macros-and-jinja-patterns/</guid><description>Which Jinja patterns are worth the indirection in a production dbt project, how to test macros, and the metaprogramming that quietly makes a project unmaintainable.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate></item><item><title>Pivot and Unpivot in SQL: Patterns That Survive a Changing Column Set</title><link>https://datalane-data.blog/blog/sql-pivot-unpivot-patterns/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sql-pivot-unpivot-patterns/</guid><description>Conditional aggregation, native PIVOT syntax, unpivoting wide tables, and how to handle dynamic categories without generating SQL at runtime.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate></item><item><title>Vector Search in the Warehouse: When You Do Not Need a Vector Database</title><link>https://datalane-data.blog/blog/vector-search-in-the-warehouse/</link><guid isPermaLink="true">https://datalane-data.blog/blog/vector-search-in-the-warehouse/</guid><description>Native vector search in Snowflake, BigQuery, and pgvector has quietly become good enough for most RAG workloads. Here are the thresholds, the real costs, and when a dedicated store still wins.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate></item><item><title>Redshift Serverless vs Snowflake in 2026: Architecture, Concurrency, Cost Model, and Migration Friction</title><link>https://datalane-data.blog/blog/redshift-vs-snowflake/</link><guid isPermaLink="true">https://datalane-data.blog/blog/redshift-vs-snowflake/</guid><description>A production comparison of Redshift Serverless and Snowflake: how RPU-seconds differ from credits, where each one bends under concurrency, and what actually breaks in a migration.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake RBAC Design: A Role Hierarchy That Survives an Audit and a Reorg</title><link>https://datalane-data.blog/blog/snowflake-rbac-design/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-rbac-design/</guid><description>How to split functional roles from access roles, use future grants and managed access schemas, and build a Snowflake permission model that stays reviewable as teams change.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate></item><item><title>Spark Executor Memory: Spill, GC, and the OOM Errors That Are Really Partition-Sizing Errors</title><link>https://datalane-data.blog/blog/spark-memory-management-oom/</link><guid isPermaLink="true">https://datalane-data.blog/blog/spark-memory-management-oom/</guid><description>How Spark executor memory is actually divided, why most OOMs are one oversized partition rather than a small cluster, and the six failures I can now diagnose from the error text alone.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate></item><item><title>How BigQuery Pruning Actually Works: Partition Metadata, Block Statistics, and the Shapes That Defeat Both</title><link>https://datalane-data.blog/blog/bigquery-pruning-internals/</link><guid isPermaLink="true">https://datalane-data.blog/blog/bigquery-pruning-internals/</guid><description>What BigQuery reads before it reads your data: partition metadata, Capacitor block statistics, and the specific query shapes that silently turn a pruned scan into a full one.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate></item><item><title>dbt Snapshots for SCD Type 2: Check vs Timestamp, and When to Hand-Roll</title><link>https://datalane-data.blog/blog/dbt-snapshots-scd2/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dbt-snapshots-scd2/</guid><description>Choosing between check and timestamp snapshot strategies, what happens when a snapshot run is missed, and the cases where a hand-rolled SCD2 model beats dbt snapshot.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate></item><item><title>Kafka Exactly-Once Semantics: What Transactions Actually Guarantee</title><link>https://datalane-data.blog/blog/kafka-exactly-once-semantics/</link><guid isPermaLink="true">https://datalane-data.blog/blog/kafka-exactly-once-semantics/</guid><description>Idempotent producers, transactions, and read_committed give you exactly-once inside Kafka. The moment you write to a database, you still need an idempotent sink. Here is where the boundary sits.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Warehouse Sizing: The Spill and Queue Signals That Tell You Up or Out</title><link>https://datalane-data.blog/blog/snowflake-warehouse-sizing-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-warehouse-sizing-guide/</guid><description>How to pick a Snowflake warehouse size from evidence instead of intuition, using spilling, queueing, and scaling tests to decide between a bigger warehouse and more clusters.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate></item><item><title>Spark Data Skew: Diagnosing It Properly, Then Fixing It With Salting, AQE, and Broadcast</title><link>https://datalane-data.blog/blog/spark-data-skew-fixes/</link><guid isPermaLink="true">https://datalane-data.blog/blog/spark-data-skew-fixes/</guid><description>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.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate></item><item><title>CTE vs Subquery: When the WITH Clause Is a Materialization Barrier</title><link>https://datalane-data.blog/blog/sql-cte-vs-subquery-performance/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sql-cte-vs-subquery-performance/</guid><description>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.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate></item><item><title>Text-to-SQL in Production: Why the Demo Works and the Deployment Fails</title><link>https://datalane-data.blog/blog/text-to-sql-in-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/text-to-sql-in-production/</guid><description>The failure modes that only show up after launch — join paths, metric drift, runaway cost — and the semantic layer, constrained generation, and eval harness that make text-to-SQL survivable.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate></item><item><title>Making Athena Fast and Cheap: Partition Projection, Parquet Layout, CTAS, and Workgroup Byte Limits</title><link>https://datalane-data.blog/blog/athena-cost-and-performance/</link><guid isPermaLink="true">https://datalane-data.blog/blog/athena-cost-and-performance/</guid><description>Athena bills you for bytes scanned. Here is the partition projection, Parquet layout, CTAS compaction, and workgroup guardrails I use to cut that number by 90 percent.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate></item><item><title>Cutting a BigQuery Bill: Partitioning, Byte Limits, Materialized Views, and On-Demand vs Editions</title><link>https://datalane-data.blog/blog/bigquery-cost-optimization/</link><guid isPermaLink="true">https://datalane-data.blog/blog/bigquery-cost-optimization/</guid><description>How I take a runaway BigQuery invoice apart: find the top jobs, fix pruning, cap bytes billed, use materialized views honestly, and decide when Editions beats on-demand.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate></item><item><title>dbt Project Structure: A Layout That Survives Two Years and Forty Models</title><link>https://datalane-data.blog/blog/dbt-project-structure-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dbt-project-structure-guide/</guid><description>How I lay out staging, intermediate, and marts so a dbt project still makes sense after two years: naming rules, ref boundaries, and the folders that always rot.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate></item><item><title>Kafka Consumer Group Rebalancing: Why Your Consumers Stall and How to Stop It</title><link>https://datalane-data.blog/blog/kafka-consumer-group-rebalancing/</link><guid isPermaLink="true">https://datalane-data.blog/blog/kafka-consumer-group-rebalancing/</guid><description>Rebalances are the most common cause of Kafka consumer lag spikes. Here is the protocol, the four timeouts that matter, and the cooperative sticky config I ship by default.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate></item><item><title>The Snowflake Cost Optimization Playbook: Cut the Bill Without Anyone Noticing</title><link>https://datalane-data.blog/blog/snowflake-cost-optimization-playbook/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-cost-optimization-playbook/</guid><description>A ranked playbook for reducing Snowflake spend: auto-suspend defaults, right-sizing warehouses, resource monitors that actually fire, and the ACCOUNT_USAGE queries that name your top ten offenders.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate></item><item><title>Spark Shuffle Explained: What It Costs, How to Read It in the UI, and the Rewrites That Remove It</title><link>https://datalane-data.blog/blog/spark-shuffle-explained/</link><guid isPermaLink="true">https://datalane-data.blog/blog/spark-shuffle-explained/</guid><description>A shuffle is a disk write, a network fetch, and a sort you did not ask for. Here is what it costs, how to spot it in the Spark UI, and the query rewrites that delete it.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate></item><item><title>Window Frames Deep Dive: RANGE vs ROWS and the Patterns That Replace Self-Joins</title><link>https://datalane-data.blog/blog/sql-window-functions-deep-dive/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sql-window-functions-deep-dive/</guid><description>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.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate></item><item><title>Cortex Analyst and Cortex Search: Shipping Chat With Your Data That Answers Correctly</title><link>https://datalane-data.blog/blog/snowflake-cortex-analyst-search/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-cortex-analyst-search/</guid><description>How Cortex Analyst semantic models and Cortex Search hybrid retrieval fit together, what the YAML actually controls, and where the accuracy comes from.</description><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Kinesis Data Streams vs Firehose: Shards, On-Demand, and Landing Streams in S3</title><link>https://datalane-data.blog/blog/kinesis-streams-firehose-patterns/</link><guid isPermaLink="true">https://datalane-data.blog/blog/kinesis-streams-firehose-patterns/</guid><description>When Kinesis Data Streams earns its shards, when Firehose is enough, and the buffering and partitioning patterns that keep S3 landings queryable.</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Joins and the Fan-Out Bug: How Revenue Doubles Without an Error</title><link>https://datalane-data.blog/blog/sql-joins-explained-fan-out/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sql-joins-explained-fan-out/</guid><description>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.</description><pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Slim CI in dbt: state:modified+ and --defer on a 1,000-Model Project</title><link>https://datalane-data.blog/blog/dbt-slim-ci-state-defer/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dbt-slim-ci-state-defer/</guid><description>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.</description><pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Unity Catalog in Practice: Metastore Layout, Grants That Scale, and Leaving hive_metastore</title><link>https://datalane-data.blog/blog/databricks-unity-catalog-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/databricks-unity-catalog-guide/</guid><description>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.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Search Optimization Service: Point Lookups Without the Full Scan</title><link>https://datalane-data.blog/blog/snowflake-search-optimization-service/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-search-optimization-service/</guid><description>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.</description><pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Snowflake Clustering Keys: When They Pay for Themselves and When They Burn Credits</title><link>https://datalane-data.blog/blog/snowflake-clustering-keys-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-clustering-keys-guide/</guid><description>Clustering depth, what automatic reclustering actually costs, and a decision framework for clustering keys vs Search Optimization vs doing nothing.</description><pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate></item><item><title>RAG Over Warehouse Data: Text-to-SQL, Curated Marts, and the Guardrails Between Them</title><link>https://datalane-data.blog/blog/rag-over-warehouse-data/</link><guid isPermaLink="true">https://datalane-data.blog/blog/rag-over-warehouse-data/</guid><description>Why raw text-to-SQL fails on real schemas, when retrieval over curated marts wins, and the semantic model and guardrails that make either safe.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate></item><item><title>AWS Glue vs EMR for Spark: The Cost Model, the Cold Starts, and the Migration Point</title><link>https://datalane-data.blog/blog/aws-glue-vs-emr/</link><guid isPermaLink="true">https://datalane-data.blog/blog/aws-glue-vs-emr/</guid><description>Glue vs EMR for production Spark: DPU pricing vs instance pricing, cold starts, library control, and the job size where teams switch.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate></item><item><title>SQL Anti-Patterns That Quietly Multiply Your Warehouse Bill</title><link>https://datalane-data.blog/blog/sql-anti-patterns-performance/</link><guid isPermaLink="true">https://datalane-data.blog/blog/sql-anti-patterns-performance/</guid><description>Five SQL habits that scan more than they should: SELECT *, functions on filter columns, DISTINCT as a bug fix, OR-joins, and per-row UDF calls.</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate></item><item><title>A dbt Testing Strategy That Catches Regressions, Not 4,000 Warnings</title><link>https://datalane-data.blog/blog/dbt-testing-strategy-production/</link><guid isPermaLink="true">https://datalane-data.blog/blog/dbt-testing-strategy-production/</guid><description>How I structure dbt tests in production: generic tests on keys, unit tests on logic, dbt-expectations on shape, severity that means something.</description><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Delta Lake Internals: The Transaction Log, Checkpoints, and Why Small Files Happen</title><link>https://datalane-data.blog/blog/delta-lake-internals-transaction-log/</link><guid isPermaLink="true">https://datalane-data.blog/blog/delta-lake-internals-transaction-log/</guid><description>How the _delta_log actually works: JSON commits, optimistic concurrency, checkpoints, deletion vectors, and the small-file problem nobody escapes.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Reading the Snowflake Query Profile: Where the Credits Actually Go</title><link>https://datalane-data.blog/blog/snowflake-query-profile-guide/</link><guid isPermaLink="true">https://datalane-data.blog/blog/snowflake-query-profile-guide/</guid><description>How I read the operator tree: TableScan bytes, partition pruning, local and remote spilling, and the exchange steps that quietly dominate runtime.</description><pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate></item></channel></rss>