Skip to content

Python ETL pipeline for fetching fiat rates from NBP & crypto prices from CoinGecko, transforming & loading into PostgreSQL

Notifications You must be signed in to change notification settings

SculptTechProject/BigCurrencyETL

Repository files navigation

BigCurrencyETL

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. 


Spis treści

  1. Wymagania
  2. Konfiguracja
  3. Szybki start
  4. Uruchomienie w Docker Compose
  5. Kroki ETL
  6. Przykładowe logi
  7. Autor

Wymagania  

  • Python ≥ 3.10
  • PostgreSQL ≥ 14
  • (Opcjonalnie) Docker + Docker Compose

Konfiguracja  

  1. Skuduj przykładowy plik konfiguracyjny i uzupełnij dane dostępu do bazy:

    cp config.example.yaml config.yaml
  2. 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.


Szybki start  

python -m venv .venv && source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python main.py                                      # uruchamia cały pipeline

Docker Compose  

Jeśli wolisz kontenery:

docker compose up --build

Docker Compose postawi Postgresa i odpali pipeline w osobnym kontenerze. Logi pojawią się w konsoli.


Kroki ETL  

  1. Extract – pobranie kursów NBP oraz cen krypto z CoinGecko
  2. Transform – ujednolicenie danych, dodanie timestampu fetched_at
  3. Load – zapis do tabeli currency_rates w PostgreSQL

Mini‑diagram

graph TD
    NBP_API[NBP API] --> T(Transform)
    CG_API[CoinGecko API] --> T
    T --> PG[(PostgreSQL)]
Loading

Przykładowe logi  

=== 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 ===

Autor  

Mateusz Dalke · GitHub · LinkedIn

About

Python ETL pipeline for fetching fiat rates from NBP & crypto prices from CoinGecko, transforming & loading into PostgreSQL

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published