JIRA adatok adattárházba töltése
🔄 Teljes folyamat áttekintése
1. Forrás rendszer: JIRA REST API
-
Feladat: Lekérni a kívánt adatokat a JIRA rendszerből (pl.
issues,projects,users, stb.) -
Technika: REST API hívásokat végzel, autentikációval (OAuth2 vagy token alapú).
-
Kimenet: JSON struktúrájú adatok
2. Mentés: JSON állományok naponta
-
Feladat: A REST API válaszokat fájlba menteni
-
Technika: Python/Powershell/shell script mentse a JSON-t strukturált fájlba (pl.
jira_issues_YYYYMMDD.json)
3. Adattárház STAGE betöltés (Oracle)
-
Feladat: A JSON állományt feldolgozni és Oracle STAGE táblákba betölteni
-
Technika: Külső tábla (External Table), SQL*Loader, vagy Python + cx_Oracle
4. Továbblépés DW-be
-
Feladat: A STAGE táblából minősített adat betöltése a cél DW-be (dimensionek, ténytábla)
-
Technika: PL/SQL eljárások, mapping szabályok, időbélyeg, változáskezelés (SCD)
🧱 Részletes lépések és tanácsok
1. JIRA REST API hívás
-
Autentikáció: token (Basic Auth – email + API token), pl.:
-
Figyelj a paginációra (limit pl. 100 találat/hívás):
startAt,maxResults -
Vedd ki az alábbi entitásokat:
-
issues(ticketek) -
projects -
users -
statuses,resolutions,custom fields
-
-
Mentés JSON-be:
-
Napi dátummal ellátott fájlok
-
Kódolj jól a
utf-8-re -
Például Pythonban:
-
2. Oracle STAGE betöltés – JSON kezelése
Opciók:
-
A. JSON fájl feldolgozása Pythonból → Oracle-be (pl.
cx_Oracle)-
Megnyitod a fájlt
-
Bejárod az elemeket (pl. issue-k)
-
INSERT vagy MERGE művelettel betöltöd
-
-
B. External Table JSON támogatással (Oracle 19c+)
-
Oracle képes JSON-t fájlból olvasni SQL lekérdezéssel (Oracle Directory kell!)
-
Példa:
-
3. Adatmodellezés – STAGE tábla
-
STAGE tábla mindig 1:1-ben tükrözze a JSON struktúrát
-
Javasolt mezők:
-
issue_id,key,summary,status,assignee,created,updated -
raw_jsonmező (eredeti teljes JSON, archiválás céljából)
-
-
Naplózás:
load_date,source_file,insert_ts
4. ETL DW-be: PL/SQL vagy ETL tool (ODI, Talend)
-
STAGE → DW mapping:
-
issues→ ténytábla (pl.fact_jira_issues) -
users,projects,statuses→ dimenziótáblák
-
-
Incrementális betöltés:
-
Kulcs mező pl.
issue_id,updatedmező alapján változáskezelés
-
-
Slowly Changing Dimension (SCD) ha pl. státusz vagy projekt neve változik
-
Data Quality ellenőrzés: kötelező mezők, enum értékek validálása
🛡️ Mire figyelj különösen oda
| Téma | Mire figyelj? |
|---|---|
| API limitek | Rate limit – túl sok lekérdezés tiltást okozhat |
| Custom Fields | Változhat a struktúra projektfüggően – kezeld dinamikusan |
| JSON nested mezők | Több szinten lehetnek, bontsd szét táblákra |
| Inkrementális letöltés | updated >= last_run_time használata a JQL-ben |
| Time zone kezelés | JIRA UTC-ban tárol, DW-ben lehet lokális időzóna |
| Adathibák kezelése | Hiányzó mezők, hibás karakterek logolása |
| Naprakész adatmodell | Verzióváltáskor ellenőrizd az API struktúraváltozásokat |
| Adatnaplózás | Melyik fájlból, mikor, ki futtatta az ETL-t |
-
Készíts próba API hívást és ments el néhány ticketet
-
Töltsd be kézzel a JSON-t egy STAGE táblába
-
Írj PL/SQL scriptet, ami a STAGE-ből a DW táblába tölt
-
Naplózd minden ETL lépést: siker/hiba, rekordszám, forrás fájl
-
Automatizáld (pl. CRON, Oracle Scheduler, Airflow)
📌 1. JIRA API hívás és JSON mentés (Python példa)
A cél, hogy napi mentéssel lekérjük az összes JIRA ticketet, és elmentsük .json fájlba.
🔑 Előfeltételek:
-
JIRA API token: generálható a JIRA profilodban
-
requestsmodul telepítve
📄 jira_download.py – lekérdezi és elmenti a ticketeket:
📌 2. Oracle STAGE tábla létrehozása (strukturált tábla JSON-hoz)
A JSON struktúrából bontsuk ki a szükséges mezőket:
🧱 Példa tábla: stg_jira_issues
📌 3. Python kód: JSON betöltése Oracle-be (cx_Oracle)
📄 jira_load_to_oracle.py:
📌 4. Oracle DW betöltés STAGE-ből
🎯 Cél: dw_fact_jira_issues (tényleges adattárház tábla)
🧠 PL/SQL: Inkrementális betöltés
📌 5. Automatizálás, ütemezés
-
Futtatási sorrend:
-
jira_download.py– letöltés JSON-ba -
jira_load_to_oracle.py– betöltés Oracle STAGE-be -
PL/SQL script – betöltés DW-be
-
-
Scheduler lehetőségek:
-
Linux:
cron -
Windows: Task Scheduler
-
Oracle:
DBMS_SCHEDULER -
Profi megoldás: Apache Airflow
-
📋 Összegzés
| Lépés | Eszköz | Feladat |
|---|---|---|
| 1. API hívás | Python + REST | Adatok lekérdezése JIRA-ból |
| 2. JSON fájl | Python | Naplózott mentés |
| 3. STAGE betöltés | Python + cx_Oracle | JSON feldolgozás és insert |
| 4. DW betöltés | PL/SQL | Inkrementális frissítés |
| 5. Automatizálás | Cron / Scheduler | Napi futás biztosítása |
📦 1. JIRA JSON struktúra elemzés (példa)
A JIRA REST API issues lekérdezés válaszának egy jellemző részlete:
👆 Fontos és gyakori JIRA mezők:
-
fields.summary,fields.status.name,fields.assignee.displayName -
fields.customfield_10021– ez projektfüggő egyedi mező lehet
🧰 2. Oracle JSON_TABLE használata
Ha Oracle 19c+ környezeted van, akkor közvetlenül JSON fájlból vagy CLOB mezőből lekérdezhetsz adatot SQL-ben.
📁 2.1. Külső fájl (External Table + JSON_TABLE)
A. Külső tábla JSON olvasáshoz:
B. JSON_TABLE SQL:
📌 Ha több JSON objektum van egy fájlban (listaként), akkor
NESTED PATH '$[*]'opciót kell használni aJSON_TABLE-ban!
🧪 3. PL/SQL eljárás naplózással
Cél: STAGE táblából DW-be betöltés + naplózva a beolvasott/hibás rekordok száma.
📄 pkg_jira_etl.p_load_jira_issues
📄 Log tábla:
🔁 4. Automatikus futtatás Oracle-ben (DBMS_SCHEDULER)
🕒 Napi egyszeri futtatás PL/SQL eljárásra:
🎁 EXTRA: Egyedi mezők (customfield_*) kezelése
JIRA-ban gyakran használnak "custom field"-eket:
👉 Célszerű ezeket egy külön táblába tenni:
Python feldolgozásnál:
✅ Összefoglalás
| Modul | Technika | Cél |
|---|---|---|
| JIRA API hívás | Python, REST, JSON | Letöltés |
| JSON parsing | Python vagy JSON_TABLE (SQL) | Betöltés |
| STAGE → DW | PL/SQL MERGE + naplózás | Inkrementális frissítés |
| Automatizálás | DBMS_SCHEDULER | Napi ütemezés |
| Egyedi mezők | customfield_* külön táblába | Rugalmas tárolás |
Megjegyzések
Megjegyzés küldése