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 pipelineJeśli wolisz kontenery:
docker compose up --buildDocker 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 ===