Adatok egyesítése és optimalizálása
A szervezetek gyakran különböző típusú információkat rendeznek különböző forrásokból. Az információk nagy számú táblában találhatók. Esetenként előfordulhat, hogy a táblákat logikai kapcsolatok alapján kell összekapcsolnia, hogy mélyebb elemzést vagy jelentést készíthessenek. A kiskereskedelmi vállalati forgatókönyvben táblákat használ az ügyfelek, a termékek és az értékesítési információk számára.
Ebben a modulban megismerheti a Kusto-lekérdezések adatainak kombinálásának különböző módjait, hogy a csapattagok megkapják azokat az információkat, amelyekre szükségük van a terméktudatosság növeléséhez és az értékesítés növeléséhez.
Az adatok értelmezése
Mielőtt elkezdené olyan lekérdezések írását, amelyek a táblákból származó információkat egyesítik, ismernie kell az adatokat. Amikor Kusto-lekérdezésekkel dolgozik, a táblákat a két kategória egyikéhez tartozónak tekintheti:
- Ténytáblák: Olyan táblák, amelyek rekordjai nem módosíthatók, például a SalesFact tábla a kiskereskedelmi vállalati forgatókönyvben. Ezekben a táblákban a rekordok fokozatosan, streamelési módon vagy nagy adattömbökben vannak hozzáfűzve. A rekordok mindaddig a táblában maradnak, amíg el nem távolítják őket, és nem frissülnek.
- Dimenziótáblák: Olyan táblák, amelyek rekordjai módosítható dimenziók, például a kiskereskedelmi vállalati forgatókönyv Ügyfelek és Termékek táblái. Ezek a táblák referenciaadatokat, például keresési táblákat tárolnak egy entitásazonosítótól a tulajdonságaikig. A dimenziótáblák nem frissülnek rendszeresen új adatokkal.
Kiskereskedelmi vállalati forgatókönyvünkben dimenziótáblákkal bővíti a SalesFact táblát további információkkal, vagy további lehetőségeket biztosít a lekérdezések adatainak szűrésére.
Azt is tudni szeretné, hogy milyen mennyiségű adattal dolgozik, és milyen struktúrával vagy sémával (oszlopnevekkel és -típusokkal) dolgozik. Az alábbi lekérdezések futtatásával lekérheti ezeket az információkat úgy, hogy lecseréli a TABLE_NAME a vizsgált tábla nevére:
A táblák rekordjainak számának lekéréséhez használja az operátort
count
:TABLE_NAME | count
Egy tábla sémájának lekéréséhez használja az operátort
getschema
:TABLE_NAME | getschema
Ezeket a lekérdezéseket a kiskereskedelmi vállalati forgatókönyv tény- és dimenziótábláiban futtatva az alábbi példához hasonló információkat kaphat:
Tábla | Rekordok | Schema |
---|---|---|
SalesFact | 2,832,193 | - SalesAmount (valós) - TotalCost (valós) - DateKey (datetime) - ProductKey (hosszú) - CustomerKey (hosszú) |
Customers | 18,484 | - CityName (sztring) - CompanyName (sztring) - ContinentName (sztring) - CustomerKey (hosszú) - Oktatás (sztring) - FirstName (sztring) - Nem (sztring) - Vezetéknév (sztring) - MaritalStatus (sztring) - Foglalkozás (sztring) - RegionCountryName (sztring) - StateProvinceName (sztring) |
Termékek | 2,517 | - ProductName (sztring) - Gyártó (sztring) - ColorName (sztring) - ClassName (sztring) - ProductCategoryName (sztring) - ProductSubcategoryName (sztring) - ProductKey (hosszú) |
A táblázatban kiemeltük a CustomerKey és a ProductKey egyedi azonosítóit, amelyek a rekordok táblák közötti kombinálására szolgálnak.
Többtáblás lekérdezések ismertetése
Az adatok elemzése után tisztában kell lenni azzal, hogyan kombinálhatja a táblákat a szükséges információk biztosításához. A Kusto-lekérdezések több operátort biztosítanak, amelyekkel több táblából származó adatokat egyesíthet, köztük a , join
és union
operátorokatlookup
.
Az join
operátor két tábla sorait egyesíti az egyes táblák megadott oszlopainak megfelelő értékekkel. Az eredményként kapott tábla a használt illesztés típusától függ. Ha például belső illesztést használ, a táblázatnak ugyanazok az oszlopai vannak, mint a bal oldali táblázatnak (más néven külső táblázatnak), valamint a jobb oldali táblázat oszlopainak (más néven belső táblázatnak). A következő szakaszban további tudnivalókat olvashat az illesztés típusairól. A legjobb teljesítmény érdekében, ha az egyik tábla mindig kisebb, mint a másik, használja az operátor bal oldalán join
.
Az lookup
operátor egy join
olyan operátor speciális implementációja, amely optimalizálja a lekérdezések teljesítményét, ha egy ténytábla dimenziótáblából származó adatokkal bővül. Kibővíti a ténytáblát egy dimenziótáblában felnézett értékekkel. A legjobb teljesítmény érdekében a rendszer alapértelmezés szerint azt feltételezi, hogy a bal oldali tábla a nagyobb (tény) tábla, a jobb oldali tábla pedig a kisebb (dimenzió) tábla. Ez a feltételezés pontosan az operátor által használt feltételezés ellentéte join
.
Az union
operátor két vagy több tábla összes sorát visszaadja. Ez akkor hasznos, ha több táblából szeretne adatokat egyesíteni.
A materialize()
függvény gyorsítótárazza az eredményeket egy lekérdezés végrehajtásán belül a lekérdezés későbbi újrafelhasználása érdekében. Ez olyan, mintha pillanatképet készítenek egy részkérés eredményeiről, és többször is felhasználják a lekérdezésen belül. Ez a függvény hasznos az olyan helyzetek lekérdezéseinek optimalizálásához, ahol az eredmények:
- A számítás költséges
- Nemdeterminista
Rövidesen többet is megtudhat a különböző táblázategyesítési operátorokról és a materialize()
függvényről, valamint azok használatáról.
Illesztés típusai
Számos különböző típusú illesztés végezhető el, amelyek befolyásolják az eredményül kapott tábla sémáját és sorait. Az alábbi táblázat az általuk visszaadott Kusto lekérdezésnyelv és séma és sorok által támogatott illesztések típusait mutatja be:
Összekapcsolás típusa | Leírás | Illusztráció |
---|---|---|
innerunique (alapértelmezett) |
Belső illesztés bal oldali deduplikációval Séma: Mindkét tábla összes oszlopa, beleértve a megfelelő kulcsokat is Sorok: A bal oldali táblából származó összes deduplikált sor, amely megfelel a jobb oldali táblázat sorainak |
|
inner |
Standard belső illesztés Séma: Mindkét tábla összes oszlopa, beleértve a megfelelő kulcsokat is Sorok: Csak egyező sorok mindkét táblából |
|
leftouter |
Bal oldali külső illesztés Séma: Mindkét tábla összes oszlopa, beleértve a megfelelő kulcsokat is Sorok: A bal oldali tábla összes rekordja, és csak a jobb oldali táblázat egyező sorai |
|
rightouter |
Jobb külső illesztés Séma: Mindkét tábla összes oszlopa, beleértve a megfelelő kulcsokat is Sorok: A jobb oldali táblázat összes rekordja és csak a bal oldali táblázat egyező sorai |
|
fullouter |
Teljes külső illesztés Séma: Mindkét tábla összes oszlopa, beleértve a megfelelő kulcsokat is Sorok: Mindkét tábla összes rekordja null értékkel kitöltött nem egyező cellákkal |
|
leftsemi |
Bal oldali félillesztés Séma: A bal oldali táblázat összes oszlopa Sorok: A bal oldali tábla összes olyan rekordja, amely megfelel a jobb oldali táblázat rekordjainak |
|
leftanti , , anti leftantisemi |
Bal oldali illesztés és félvariáns Séma: A bal oldali táblázat összes oszlopa Sorok: A bal oldali tábla összes olyan rekordja, amely nem egyezik a jobb oldali táblázat rekordjaival |
|
rightsemi |
Jobb oldali félillesztés Séma: A jobb oldali táblázat összes oszlopa Sorok: A jobb oldali tábla összes olyan rekordja, amely megfelel a bal oldali tábla rekordjainak |
|
rightanti , rightantisemi |
Jobb oldali illesztés és félvariáns Séma: A jobb oldali táblázat összes oszlopa Sorok: A jobb oldali tábla összes olyan rekordja, amely nem egyezik a bal oldali táblában lévő rekordokkal |
Figyelje meg, hogy az alapértelmezett illesztéstípus, innerunique
és nem kell megadni. Ennek ellenére ajánlott mindig explicit módon megadni az illesztés típusát az egyértelműség érdekében.
A modul előrehaladása során megismerheti az arg_min()
összesítő arg_max()
függvényeket, az as
operátort, mint az let
utasítás alternatívát, valamint azt a startofmonth()
függvényt, amely segít az adatok hónap szerinti csoportosításában.