Megosztás a következőn keresztül:


lookup operátor

Kiterjeszti egy ténytábla oszlopait egy dimenziótáblában felnézett értékekkel.

FactTable | lookup kind=leftouter (DimensionTable) on CommonColumn, $left.Col1 == $right.Col2

Az eredmény egy tábla, amely kiterjeszti a () táblát a FactTable ($left) táblából származó DimensionTable adatokkal (hivatkozással $right) úgy, hogy az előző táblából az egyes párokat (CommonColumn,Col) az utóbbi táblában lévő párokkal (CommonColumn1,Col2) megkeresi. A tény- és dimenziótáblák közötti különbségekért lásd: tény- és dimenziótáblák.

Az lookup operátor az illesztési operátorhoz hasonló műveletet hajt végre az alábbi különbségekkel:

  • Az eredmény nem ismétlődik a táblából az $right illesztési művelet alapjául szolgáló oszlopokkal.
  • Csak kétféle keresés támogatott, leftouter és innerleftouter az alapértelmezett.
  • A teljesítmény szempontjából a rendszer alapértelmezés szerint azt feltételezi, hogy a $left tábla a nagyobb (tények) táblázat, a $right tábla pedig a kisebb (dimenziók) táblázat. Ez pontosan ellentétes az operátor által használt feltételezéssel join .
  • Az lookup operátor automatikusan szórja a $right táblát a $left táblába (lényegében úgy viselkedik, mintha hint.broadcast meg lett volna adva). Ez korlátozza a tábla méretét $right .

Megjegyzés

Ha a keresés jobb oldala több tíz MB-nál nagyobb, a lekérdezés sikertelen lesz.

Az alábbi lekérdezés futtatásával megbecsülheti a jobb oldal méretét bájtban:

rightSide
| summarize sum(estimate_data_size(*))

Syntax

Bal oldali tábla|lookup [kind= (leftouter|inner)] (RightTable)onfeltételek

További információ a szintaxis konvenciókról.

Paraméterek

Név Típus Kötelező Leírás
Bal oldali tábla string ✔️ A keresés alapjául szolgáló táblázat vagy táblázatos kifejezés. A jelölése: $left.
RightTable string ✔️ A ténytábla új oszlopainak "feltöltéséhez" használt táblázat vagy táblázatos kifejezés. A jelölése: $right.
Attribútumok string ✔️ Egy vagy több szabály vesszővel tagolt listája, amely leírja, hogy a LeftTable sorai hogyan lesznek egyeztetve a RightTable soraival. Több szabály kiértékelése a and logikai operátor használatával történik. Lásd: Szabályok.
kind string Meghatározza, hogyan kezelhetők azok a sorok a LeftTable-ban , amelyeknek nincs egyezésük a RightTable-ban. Alapértelmezés szerint ez azt jelenti, leftouter hogy az összes sor megjelenik a kimenetben az operátor által hozzáadott RightTable oszlopok hiányzó értékeihez használt null értékekkel. Ha inner ezt használja, az ilyen sorok ki lesznek hagyva a kimenetből. Az operátor más típusú illesztéseket nem támogat lookup .

Szabályok

Szabály típusa Syntax Predikátum
Egyenlőség név szerint ColumnName whereLeftTable. ColumnName==RightTable. ColumnName
Egyenlőség érték szerint $left.LeftColumn==$right.RightColumn where$left.LeftColumn==$right.*RightColumn

Megjegyzés

Az "érték szerinti egyenlőség" esetén az oszlopneveket a megfelelő tulajdonosi táblával $left$right kell minősíteni, és jelölésekkel kell jelölni.

Válaszok

Táblázat a következőkkel:

  • Egy oszlop a két tábla minden oszlopához, beleértve az egyező kulcsokat is. Ha névütközések történnek, a jobb oldali oszlopok automatikusan átneveződnek.
  • Egy sor a bemeneti táblák közötti minden egyezéshez. Az egyezés egy olyan sor, amely az egyik táblából van kiválasztva, és az összes on mező értéke megegyezik a másik tábla sorával.
  • Az Attribútumok (keresési kulcsok) csak egyszer jelennek meg a kimeneti táblában.
  • Ha kind nincs meghatározva vagy kind=leftouter, akkor a belső egyezések mellett minden sornak van egy sora a bal oldalon (és/vagy jobbra), még akkor is, ha nincs egyezése. Ebben az esetben a nem egyező kimeneti cellák null értékeket tartalmaznak.
  • Ha kind=inner, akkor a kimenetben egy sor található a balról és a jobbról egyező sorok összes kombinációjához.

Példák

let FactTable=datatable(Row:string,Personal:string,Family:string) [
  "1", "Bill",   "Gates",
  "2", "Bill",   "Clinton",
  "3", "Bill",   "Clinton",
  "4", "Steve",  "Ballmer",
  "5", "Tim",    "Cook"
];
let DimTable=datatable(Personal:string,Family:string,Alias:string) [
  "Bill",  "Gates",   "billg",
  "Bill",  "Clinton", "billc",
  "Steve", "Ballmer", "steveb",
  "Tim",   "Cook",    "timc"
];
FactTable
| lookup kind=leftouter DimTable on Personal, Family
Sor Személyes Family (Család) Alias
1 Számla Gates billg
2 Számla Clinton billc
3 Számla Clinton billc
4 Steve Ballmer steveb
5 Tim Főzni timc