Lekki pipeline ETL w Pythonie, który raz dziennie pobiera kursy walut z NBP oraz ceny Bitcoina i Etheru z CoinGecko, łączy je w jeden zbiór danych i zapisuje do PostgreSQL.
- Python ≥ 3.10
- PostgreSQL ≥ 14
- (Opcjonalnie) Docker + Docker Compose
-
Skuduj przykładowy plik konfiguracyjny i uzupełnij dane dostępu do bazy:
cp config.example.yaml config.yaml
-
Edytuj
config.yaml:postgres: host: db # nazwa usługi / host port: 5432 db: etl user: etl password: etl sslmode: disable # lokalnie "disable", w chmurze np. "require" sources: nbp_api: "http://api.nbp.pl/api/exchangerates/tables/A?format=json" crypto_api: "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd"
Pliki z danymi wrażliwymi (
config.yaml,.env) są ignorowane przez Git → patrz.gitignore.
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt python main.py # uruchamia cały pipeline
Jeśli wolisz kontenery:
docker compose up --build
Docker Compose postawi Postgresa i odpali pipeline w osobnym kontenerze. Logi pojawią się w konsoli.
- Extract – pobranie kursów NBP oraz cen krypto z CoinGecko
- Transform – ujednolicenie danych, dodanie timestampu
fetched_at - Load – zapis do tabeli
currency_ratesw PostgreSQL
graph TD
NBP_API[NBP API] --> T(Transform)
CG_API[CoinGecko API] --> T
T --> PG[(PostgreSQL)]
=== BigCurrencyETL START ===
[1/4] Extracting NBP rates...
[2/4] Extracting Crypto prices...
[3/4] Transforming data...
→ Combined 30 fiat + 2 crypto rows
[4/4] Loading into PostgreSQL...
✓ Load complete.
=== BigCurrencyETL FINISHED ===