Fürtök közötti és adatbázisközi lekérdezések

A lekérdezések egy adott adatbázissal futnak, amely a kontextusban adatbázisként van megjelölve. Ez az adatbázis szolgál alapértelmezettként az engedély-ellenőrzéshez. Ha egy entitásra a fürt vagy az adatbázis megadása nélkül hivatkozik egy lekérdezésben, akkor az ezen az adatbázison lesz feloldva.

Ez a cikk azt ismerteti, hogyan hajthat végre olyan lekérdezéseket, amelyek az aktuális környezeti adatbázison kívül található entitásokat is magukban foglalják.

Előfeltételek

A fürt és az adatbázis azonosítása a környezetben

Az alábbi táblázat bemutatja, hogyan azonosíthatja az adatbázist a környezetben a lekérdezési környezet alapján.

Környezet Adatbázis a környezetben
Kusto Explorer Az alapértelmezett adatbázis a kapcsolatok panelen kijelölt adatbázis, az aktuális fürt pedig az az adatbázist tartalmazó fürt.
Azure Data Explorer webes felhasználói felület Az alapértelmezett adatbázis a kapcsolatpanelen kijelölt adatbázis, az aktuális fürt pedig az az adatbázist tartalmazó fürt.
Ügyfélkódtárak Az alapértelmezett adatbázist és fürtöt a Data SourceKusto kapcsolati sztringek és Initial Catalog tulajdonságai határozzák meg.

Fürtök közötti vagy adatbázisközi lekérdezések végrehajtása

Az adatbázison kívüli entitások kontextusban való eléréséhez használja a cluster() és database () függvényeket az entitás nevének minősítéséhez.

Egy másik adatbázis tábláihoz ugyanazon a fürtön belül:

database("<DatabaseName>").<TableName>

Távoli fürtben lévő tábla esetén:

cluster("<ClusterName>").database("<DatabaseName>").<TableName>

Megjegyzés

Lekérdezés végrehajtásához megtekintő engedéllyel kell rendelkeznie az alapértelmezett adatbázishoz és a lekérdezésben hivatkozott összes többi adatbázishoz. További információ: Kusto szerepköralapú hozzáférés-vezérlés.

Tipp

A lekérdezésből visszaadott rekordok száma alapértelmezés szerint korlátozott, még akkor is, ha az take operátor nincs konkrétan használva. A korlát feloldásához használja az notruncation ügyfélkérési lehetőséget. További információ: Lekérdezési korlátok.

Minősített nevek és az egyesítő operátor

Ha egy minősített név az egyesítő operátor operandusaként jelenik meg, akkor helyettesítő karakterek használatával több táblát és több adatbázist is megadhat. A fürtnevekben nem használhatók helyettesítő karakterek.

union withsource=TableName *, database("OtherDb*").*Table, cluster("OtherCluster").database("*").*

Megjegyzés

Az alapértelmezett adatbázis neve szintén potenciális egyezés, ezért database("*") az összes adatbázis összes tábláját megadja, beleértve az alapértelmezettet is.

Minősített nevek és hozzáférési utasítások korlátozása

A korlátozott hozzáférési utasításban minősített nevek és minták is szerepelhetnek. A fürtnevekben nem használhatók helyettesítő karakterek.

A következő lekérdezés korlátozza a lekérdezési hozzáférést a következő entitásokhoz:

  • Bármely entitásnév, amely az alapértelmezett adatbázisban a saját névvel kezdődik.
  • Az aktuális fürt myOther nevű adatbázisának bármely táblája.
  • Az összes my2 nevű adatbázis táblája a fürtben OtherCluster.kusto.windows.net.
restrict access to (my*, database("MyOther*").*, cluster("OtherCluster").database("my2*").*);

Távoli entitások sémaváltozásainak kezelése

A fürtök közötti lekérdezések feldolgozásához a kezdeti lekérdezésértelmezést végző fürtnek rendelkeznie kell a távoli fürtökön hivatkozott entitások sémával. Az információk lekéréséhez a rendszer egy parancsot küld a sémák lekéréséhez, amelyeket aztán a rendszer gyorsítótárban tárol.

A távoli fürt sémaváltozása esetén a gyorsítótárazott séma elavulttá válhat. Ez nem kívánt hatásokhoz vezethet, beleértve azokat a forgatókönyveket is, amelyekben az új vagy törölt oszlopok okoznak Partial query failure. Az ilyen problémák megoldásához frissítse manuálisan a sémát a .clear cache remote-schema paranccsal.

Függvények és nézetek

A függvények és nézetek (állandó és beágyazottan létrehozott) hivatkozhatnak táblákra az adatbázis- és fürthatárok között. Az alábbi kód érvényes.

let MyView = Table1 join database("OtherDb").Table2 on Key | join cluster("OtherCluster").database("SomeDb").Table3 on Key;
MyView | where ...

Az állandó függvények és nézetek ugyanazon fürt egy másik adatbázisából érhetők el.

Tegyük fel például, hogy a következő táblázatos függvényt (nézetet) hozza létre egy adatbázisban OtherDb:

.create function MyView(v:string) { Table1 | where Column1 has v ...  }  

Ezután a következő skaláris függvényt hozza létre egy adatbázisban OtherDb:

.create function MyCalc(a:double, b:double, c:double) { (a + b) / c }  

Az alapértelmezett adatbázisban ezekre az entitásokra a következőképpen lehet hivatkozni:

database("OtherDb").MyView("exception") | extend CalCol=database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10

A fürtök közötti függvényhívások korlátozásai

A táblázatos függvényekre vagy nézetekre a fürtök között lehet hivatkozni. Az alábbi korlátozások érvényesek:

  • A távoli függvények táblázatos sémát adnak vissza. A skaláris függvények csak ugyanabban a fürtben érhetők el.
  • A távoli függvények csak skaláris argumentumokat fogadnak el. Egy vagy több táblaargumentumot lekérő függvények csak ugyanabban a fürtben érhetők el.
  • A távoli függvények eredménysémát rögzíteni kell (előre ismert, a lekérdezés egyes részeinek végrehajtása nélkül). Ez kizárja az olyan lekérdezési szerkezetek használatát, mint a pivot beépülő modul. (Vegye figyelembe, hogy egyes beépülő modulok, például a bag_unpack beépülő modul, támogatják az eredményséma statikus jelzését, és ebben a formában használhatók fürtök közötti függvényhívásokban.)
  • Teljesítménybeli okokból a távoli entitások sémáját a hívó fürt gyorsítótárazza a kezdeti hívás után. Ezért a távoli entitás módosításai a gyorsítótárazott sémainformációkkal való eltérést eredményezhetnek, ami lekérdezési hibákhoz vezethet. További információ: Fürtök közötti lekérdezések és sémamódosítások.

Példák

A következő fürtök közötti hívás érvényes.

cluster("OtherCluster").database("SomeDb").MyView("exception") | count

Az alábbi lekérdezés egy távoli skaláris függvényt MyCalchív meg. Ez a hívás megsérti az 1. szabályt, ezért érvénytelen.

MyTable | extend CalCol=cluster("OtherCluster").database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10

Az alábbi lekérdezés meghívja a távoli függvényt MyCalc , és egy táblázatos paramétert biztosít. Ez a hívás megsérti a 2. szabályt, ezért érvénytelen.

cluster("OtherCluster").database("OtherDb").MyCalc(datatable(x:string, y:string)["x","y"] )

Az alábbi lekérdezés olyan távoli függvényt SomeTable hív meg, amely változó sémakimenettel rendelkezik a paraméter tablenamealapján. Ez a hívás megsérti a 3. szabályt, ezért érvénytelen.

Táblázatos függvény a következőben: OtherDb.

.create function SomeTable(tablename:string) { table(tablename)  }  

Az alapértelmezett adatbázisban.

cluster("OtherCluster").database("OtherDb").SomeTable("MyTable")

Az alábbi lekérdezés olyan távoli függvényt GetDataPivot hív meg, amely változó sémakimenettel rendelkezik az adatok (pivot() beépülő modulon alapuló dinamikus kimenettel). Ez a hívás megsérti a 3. szabályt, ezért érvénytelen.

Táblázatos függvény a következőben: OtherDb.

.create function GetDataPivot() { T | evaluate pivot(PivotColumn) }  

Táblázatos függvény az alapértelmezett adatbázisban.

cluster("OtherCluster").database("OtherDb").GetDataPivot()