Adatok egyesítése és optimalizálása

Befejeződött

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

Diagram showing query join kinds.

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, , antileftantisemi 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.