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_value
itt 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_TABLE
segí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_10021
mező"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