Amakuru.net

David Morel — Staff Data Platform Engineer & Digital Garden

9 to 5 & After Hours.

Data pipelines by day, Mac apps and Python tools by night — I write from Amsterdam (sometimes Lyon) about what I build on either side of the working day. Data platforms that have to scale and weekend tools that only have to please one person; the story behind each one — why it exists, what shaped it, what it taught me.

9 to 5 Nº 029
Nº 029 When there is no Terraform provider: a Power BI integration that would not go quietly
May 2026
Nº 029 — Lead

A Power BI ↔ Databricks integration shipped in 2025 with no Terraform provider, a half-documented REST API, and the kind of resources I am not proud of — but which were in production a year before Microsoft's GA provider arrived. A lesson in realism: ship the ugly thing now, or have nothing for a year.

Some infrastructure-as-code projects are clean. The provider exists, the API is well-documented, the resources line up neatly, the deployment is uneventful. You finish, you move on, you write the article about the elegant abstraction you came up with.

This is not one of those articles.

This is the article about a Power BI ↔ Databricks integration where, when I built it in mid-2025, Microsoft had no Terraform provider for the relevant API surface, the API itself was partially documented in places where it wasn't outright wrong, and the only honest path between "I want a Power BI connection to my Databricks SQL warehouse" and "I have one, in code, repeatable, with rotating credentials" ran through a number of design choices that would make a Hashicorp engineer wince. I'm writing it a year later because the patterns are useful, the limits are instructive, and the workaround — for all its

· Read the whole story →

The rest of the archive
  1. Nº 023 A CLI for Cloudflare email routing, because the dashboard does not scale
  2. Nº 022 MailAvatars: putting faces on the people who actually email you
  3. Nº 021 Stateful services on AWS: parameter groups, audit logging, and a backup you actually trust
  4. Nº 020 Tabs Exposé: a macOS-style overview for Chrome and Brave
  5. Nº 019 Where's My Money: a local-first personal finance tracker
  6. Nº 018 A serious data warehouse on GitHub Actions and dbt — without an orchestrator
  7. Nº 017 A high-throughput JSON ingestion pipeline, built one bottleneck at a time
  8. Nº 016 A reproducible Claude Code dev container
  9. Nº 015 A cronjob framework on GitHub Actions: turning 150-line workflows into 10-line specs
  10. Nº 014 A CPAN module written entirely by Claude — and the test suite that proves it
  11. Nº 013 Reorganising a Lightroom catalog from the command line
  12. Nº 012 Async ML inference under three hostile constraints
  13. Nº 011 Captioning and tagging my Lightroom catalog with local vision models
  14. Nº 010 Photo Metadata Viewer: a small, fast EXIF inspector for macOS
  15. Nº 009 A whole Auth0 tenant in Pulumi: importing the live system, then making it portable
  16. Nº 008 NearbyDevices: a menu-bar map of everything on your network
  17. Nº 007 Git Remote Open: a Finder Quick Action that gets you to the file on the web
  18. Nº 006 Git-aware AWS resource tagging in 370 lines of Python
  19. Nº 005 Algorithm::TimelinePacking: arranging overlapping intervals into lanes
  20. Nº 004 Pulling every PDF out of a Gmail label, one folder per month
  21. Nº 003 CloudWatch to Loki via Lambda: cutting log spend without losing fidelity
  22. Nº 002 Parquet Viewer: a small DuckDB-powered Mac app for inspecting Parquet files
  23. Nº 001 A menu bar app for the VPNs macOS forgot
} }