JIRA adatok adattárházba töltése Custom Field kezelés
🔧 1. Custom Field kezelés – JIRA saját mezők rugalmas tárolása
🎯 Probléma
A JIRA REST API „fields” objektuma gyakran tartalmaz egyedi mezőket ilyen néven:
Ezek:
-
projektfüggőek
-
JSON típusuk változó lehet (string, object, list)
-
nem fix struktúrájúak
✅ Javasolt modell
Külön „kulcs-érték” alapú tábla:
🐍 Python kód – egyedi mezők kinyerése:
👉 A field_value értéket akár Oracle-ben is tovább feldolgozhatod JSON_TABLE segítségével.
📥 2. JSON Parsing Oracle oldalon – JSON_TABLE mély strukturákhoz
Ha Pythonban csak betöltöd a teljes JSON-t az stg_jira_raw_json táblába, Oracle SQL-ben is feldolgozhatod.
📘 Táblastruktúra
🧩 Példa – egy customfield_10200.value kinyerése SQL-ben:
Ha customfield_10200 egy komplex objektum, így lehet objektum teljes értékét lekérni:
🧪 3. Unit tesztelés – Python + Oracle PL/SQL ETL-hez
🎯 Miért fontos?
-
biztosítja a JSON → SQL konverzió helyességét
-
segít elkapni változásokat (pl. új JIRA mező struktúra)
✅ Python oldal – pytest + mock JSON
A. Tesztelhető függvény:
B. Unit teszt:
🧪 PL/SQL oldalon – tesztelhető betöltő eljárások
Javasolt: külön betöltő, ellenőrző és naplózó modulok PL/SQL-ben
Egyszerű teszt PL/SQL-ből:
🧠 1. Mi az a custom field a JIRA-ban?
A JIRA alapértelmezett mezői: summary, status, assignee, created, stb.
A custom mezők (pl. customfield_10021) viszont:
-
adminisztrátor által hozzáadott extra mezők,
-
lehetnek szöveg, szám, lista, felhasználó, dátum, választó mezők,
-
gyakran projektenként más-más értelmet hordoznak,
-
a REST API-ban
customfield_*néven jelennek meg.
Példák:
🧬 2. Custom field típusok és specialitások
| Típus | API példa | Feldolgozás típusa |
|---|---|---|
| Text (string) | "customfield_10021": "Kritikus" | STRING |
| Select list | "customfield_10112": {"value": "Magas"} | OBJECT |
| Multi-select | "customfield_10500": [{"value":"IT"},...] | ARRAY of OBJECT |
| Number | "customfield_10900": 7 | NUMBER |
| Date | "customfield_11000": "2024-12-01T00:00:00.000Z" | DATE |
| User | "customfield_11111": {"displayName": "Anna"} | OBJECT |
| Cascading | "customfield_11200": {"parent":{"value":"A"},"value":"B"} | OBJECT (nested) |
🧰 3. Táblamodellezés Oracle-ben
🔸 A rugalmas, jövőálló modell:
stg_jira_custom_fields
dw_jira_custom_fields
dw_jira_custom_fields: akár SCD (Slowly Changing Dimension) modellben is megvalósítható, ha változáskövetés kell.
🐍 4. Python feldolgozás – custom mezők dinamikus szedése
Python kódrészlet:
🔁 Insertálás Oracle-be:
🔍 5. Oracle oldali feldolgozás JSON_TABLE-lel
Példa: customfield_10112.value kiszedése SQL-ben:
Tömbös mezők (pl. több választás):
🧩 6. Értelmező tábla – jelentésekhez
Mivel a customfield_10021 jelentése projektfüggő, célszerű fenntartani egy értelmező táblát:
Ebben tárolhatod:
-
hogy mi a mező valódi neve,
-
milyen jelentést hordoz (pl. "Ügyfél prioritás"),
-
mely projekt(ek)ben aktív
✅ 7. Legjobb gyakorlatok – Custom Field kezelése
| Téma | Gyakorlat |
|---|---|
| Ismeretlen mezők | Naplózd és figyeld az új customfield_* megjelenését |
| Mezőtípusok | Tárold a típust (STRING/OBJECT/ARRAY) |
| Dokumentáció | Vezess jira_custom_field_dictionary táblát |
| Változások kezelése | Archiváld a korábbi értékeket (valid_from / valid_to) |
| Tömb kezelés | Több sorba szedd szét a JSON listákat |
🎯 Cél
Példa: a customfield_10021 nevű mezőt szeretnénk az adattárházban egy konkrét oszlopba pl. customer_priority nevű oszlopba leképezni.
🧰 Megközelítések
🔹 1. Statikus leképezés (hardcoded)
Használható, ha a JIRA mezőstruktúra stabil és kevés mezőt kell leképezni.
Példa: staging → DW tábla leképezés
📝 Megjegyzés:
-
cf.field_valueitt egyszerű szövegként van elmentve. -
Ha JSON objektum, használj
JSON_VALUE()vagyJSON_TABLE().
🔹 2. Dinamikus értelmezés dictionary tábla alapján
jira_custom_field_mapping – leképezési metaadat
Példatartalom:
| field_key | dw_column_name | extract_json_path | expected_type | default_value |
|---|---|---|---|---|
| customfield_10021 | customer_priority | $.value | OBJECT | Unknown |
🧠 3. Feldolgozó PL/SQL eljárás – dinamikus JSON parsing
JSON → oszlop leképezés betöltés
💡 Tipp:
JSON_TABLEsegítségével bármilyen custom mezőt kinyerhetsz precízen, különösen, hafield_type = 'OBJECT'.
🧪 4. Validáció: típus és értékellenőrzés
Ha a mező típusa nem az elvárt (pl. ARRAY jön STRING helyett), akkor logold hibának:
🗃️ 5. Hasznos: leképező nézet (view)
Készíthetsz egy nézetet, amely előfeldolgozott custom mezőket mutat normál mezőként:
Így egyszerűbb lesz riportokat vagy betöltést írni.
📌 Összefoglalva
| Lépés | Leírás |
|---|---|
| 1. | Azonosítsd a customfield_xxxx mező jelentését |
| 2. | Döntsd el: statikus vagy dinamikus leképezést használsz |
| 3. | Tárold a típust (STRING/OBJECT), és ha kell, JSON path-t |
| 4. | Használj JSON_TABLE / JSON_VALUE függvényt a pontos kivételhez |
| 5. | Készíts nézetet vagy ETL eljárást, ami leképezi a DW oszlopokat |
🧭 Cél
-
A
customfield_10021mező"Magas"értéke az adattárházban jelenjen meg pl."Customer Critical"néven. -
A JIRA-ban szereplő értékek gyakran lokalizáltak vagy informálisak, de az adattárház standardizált kódokat vár (pl.
CRITICAL,MEDIUM,LOW).
🧱 1. Értelmező dictionary tábla létrehozása
📌 Ez a tábla azt mondja meg:
customfield_10021 = "Magas" → CRITICAL / "Customer Critical"
🧪 2. Minta adat
| field_key | jira_value | dw_code | dw_description |
|---|---|---|---|
| customfield_10021 | Alacsony | LOW | Customer Low Risk |
| customfield_10021 | Közepes | MEDIUM | Customer Medium |
| customfield_10021 | Magas | CRITICAL | Customer Critical |
| customfield_10021 | Üres | NULL | No Priority Set |
🔄 3. Betöltés értelmezéssel (Oracle SQL)
🔹 Adattárház tábla célstruktúrája:
🔹 Betöltés dictionary alapján:
✅ A JSON-ből kihámozott
"Magas"érték itt"CRITICAL"-ra van leképezve.
🧩 4. Python oldalon is megvalósítható
Ha Pythonban szeretnéd értelmezni JSON alapján, készíthetsz egy dictionary mappinget:
📈 5. Alternatíva: Nézet (view) dictionary csatlakoztatással
🧠 Tipp: Dictionary fenntartása
-
Szkripttel naponta ellenőrizheted, ha új
jira_valueérték jelenik meg, amit nem tudtok még leképezni. -
Példa:
✅ Összefoglalás
| Lépés | Leírás |
|---|---|
| 1. | Hozz létre dictionary táblát, ami leképezi a jira_value-t DW kódra |
| 2. | A staging mezőből (customfield_x) JSON segítségével vedd ki az értéket |
| 3. | Csatlakoztasd a jira_custom_field_dictionary táblát |
| 4. | Töltsd az adattárházat a leképezett dw_code és dw_description értékekkel |
| 5. | Monitorozd az új, nem leképezett értékek megjelenését naponta |
🧩 Példa üzleti mező: customfield_10021 – "Ügyfél prioritás"
A JIRA REST API JSON mezője így néz ki:
🔶 1. Python: JSON parsing és CSV staging export
🔽 Ez a CSV-t állítja elő a staging betöltéshez (Oracle external table vagy SQL*Loader segítségével).
🔶 2. Oracle staging tábla
🔶 3. Oracle dictionary tábla
🔶 4. Oracle adattárház cél tábla
🔶 5. Oracle betöltés stagingből dictionary-vel
📊 Eredmény
| issue_id | summary | customer_priority_cd | customer_priority_tx |
|---|---|---|---|
| 10001 | Email bug | CRITICAL | Customer Critical |
| 10002 | Login failure | MEDIUM | Customer Medium |
🧪 További javaslat: automatizált validáció (ellenőrzés)
Ezzel kiszűröd azokat az új értékeket, amelyeket még nem map-peltél le.
✅ Összefoglalás
| Lépés | Eszköz | Mit csinálunk? |
|---|---|---|
| 1. | Python | JSON API fájlt parse-olunk és CSV staging állományt írunk |
| 2. | Oracle | staging tábla létrehozása |
| 3. | Oracle | dictionary tábla létrehozása (üzleti jelentés) |
| 4. | Oracle | cél DW tábla létrehozása |
| 5. | Oracle | stagingből betöltés + értelmezés (MERGE vagy INSERT SELECT) |
| 6. | Oracle | ellenőrzés új, nem leképezett értékekre |
Megjegyzések
Megjegyzés küldése