🦆 Bolagshack

Bolagshack · fredag

Kom igång med DuckDB

Rått till rent på en timme. Läs in en CSV, städa den, och visa något du inte visste innan.

Fredag60 minuterEnsam eller i par

Välkommen

Välkommen till CoCreates första Bolagshack!

Vi kör en timme på fredagseftermiddagen direkt efter lunch, rakt in i kaklet (dvs fikat)!

Prepp

Det finns exempeldata från CoFinder, men roligast blir det om du tar med en egen data!

Fundera på vad som kan vara intressant att analysera och preppa en CSV-fil. Det kan vara vad som helst: loggar från din smarta hemautomation, träningsklocka eller elmätare, eller varför inte speltid från Steam, events från Kubernetes-loggen eller commits från din git-historik. Det finns också massor med öppna APIer som du kan skrapa. DuckDB läser CSV, JSON, Parquet och Excel direkt utan problem.

Som förberedelse innan fredag vill vi att du installerar uv (om du inte redan har det!) och DuckDB, samt klonar repot.

uv

Installera uv:

curl -LsSf https://astral.sh/uv/install.sh | sh

eller med din lokala pakethanterare (brew install uv, etc).

Verifiera att det fungerar:

uv --version

duckdb

Installera duckdb:

uv tool install duckdb-cli

Verifiera att det fungerar:

duckdb -c "SELECT 'ready' AS status, version()"

repot

Klona repot:

git clone git@github.com:knowit-solutions-cocreate/bolagshack.git

Gör din egen gren:

git switch -c $(whoami)

Uppgiften

Tre mål med dagen:

  1. Bli bekant med DuckDB. Ett nytt verktyg i verktygslådan. Efter idag ska du kunna öppna vilken CSV som helst och ha svar inom en minut.
  2. Rått till rent. Läs in rådata, städa och modellera till något användbart. En dataplattform i miniatyr, på din egen laptop.
  3. Läs in och visualisera valfri datakälla. CoFinder-datan i data/ eller den du tog med själv.

Jobba ensam eller i par. Vi har 60 minuter. När tiden är slut:

  1. Committa det du har till en egen gren i repot, committa och pusha. Oavsett hur långt det kom.
  2. Skriv en rad i #bolagshack på Slack om vad du gjorde och vad du lärde dig. En skärmdump eller en query räcker gott.

En timme är kort, så fokusera! Har du egen data med dig: börja med steg 1. Kör du på CoFinder-datan finns person_skill redan i example.py, så du kan hoppa direkt till steg 2.

Vad är en dataplattform nu igen?

Dataplattform: sources, ingestion, storage, transformation, serving

Så här ser en dataplattform ut i princip, fråga bara Gabriel!

DuckDB är den gröna kolumnen idag: read_csv är ingestion, en .db-fil är storage, SQL är transformation. Typ.

Sätt igång!

Datan

I data/ finns två CSV-filer (exempeldata från CoFinder):

Fil Innehåll
data/job_skills.csv ~3 400 konsultuppdrag från Verama, Cinode Market m.fl. En rad per uppdrag. Kolumnen skills är en kommaseparerad sträng: "python, sql, azure".
data/people_skills.csv 48 konsulter i teamet. skills är kommaseparerad, skills_detailed är JSON med nivå 1–5 per skill.

Börja med att skapa din egen databas av dessa:

duckdb hack.db

sql
CREATE TABLE jobs   AS SELECT * FROM 'data/job_skills.csv';
CREATE TABLE people AS SELECT * FROM 'data/people_skills.csv';

..and off you go!

Egen data

Byt ut sökvägarna ovan mot din egen fil.

DuckDB läser CSV, Parquet, JSON och Excel, lokalt eller via URL:

sh
duckdb -c "SELECT * FROM 'data.csv' LIMIT 5"
duckdb -c "SELECT * FROM 'https://example.com/data.parquet' LIMIT 5"

Krånglar CSV-inläsningen? read_csv('fil.csv', delim=';', header=true) ger dig kontroll över avgränsare, header, kodning osv.

Dokumentation: https://duckdb.org/docs/stable/

Steg 1: Rått till rent

En bra hjälp är att använda det inbyggda webgränssnittet:

duckdb -ui hack.db

Hitta det som är stökigt: kommaseparerade kolumner, JSON i strängar, inkonsekventa namn, datum som text.

Du kan använda DESCRIBE och SUMMARIZE som hjälp, eller inspektera okulärt.

Bygg sedan rena tabeller av rådatan.

För CoFinder-datan till exempel person_skill och job_skill (en rad per skill), och kanske en skill-tabell där "azure", "microsoft azure" och "azure devops" har fått ordning på sig.

Extra

Räcker inte SQL i en fil? dbt-duckdb eller SQLMesh ger dig lager, tester och beroenden mellan modeller. Lite extra avancerat!

Steg 2: Analysera och visualisera

Hitta något i den rena datan och visa det.

Frågor att börja med om du kör CoFinder-datan:

  • Vilka skills efterfrågas mest? Hur har det ändrats under året?
  • Var finns gapet mellan vad marknaden vill ha och vad teamet kan?
  • Vem i teamet matchar bäst mot ett givet uppdrag?

Skriv frågor direkt i SQL eller använda Python (eller vilket språk eller metod som du vill, ärligt talat).

Du kan levla upp genom att använda ett ramverk eller verktyg som du kanske inte använt förut:

  • Utforska datan i DuckDBs web-UI
  • Testa att göra notebooks i Marimo!
  • Be Claude generera en Streamlit-app åt dig!
  • Gå djupt med Pandas eller Polars

Bonus: Exponera datan

För den som blir klar snabbt eller gjort det här förut eller vill fortsätta längre.

Gör datan tillgänglig för någon eller något annat än dig själv.

  • HTTP-API. FastAPI + DuckDB. Endpoints som /skills/top, /people?skill=python. Bygg en liten frontend mot det om du vill (eller låt Claude göra det).
  • MCP-server. Exponera DuckDB som verktyg åt Claude, Copilot eller Cursor med FastMCP. Ett query(sql)-verktyg räcker för att kunna ställa frågor på svenska mot datan. Bonus: en resurs som beskriver schemat.
  • Parquet + publicering. Lägg dina Parquet-filer på Blob Storage eller S3 och läs dem från DuckDB via URL. Enklaste "data platform" som finns.