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_json
mező (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
,updated
mező 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
-
requests
modul 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