Sdílet prostřednictvím


Dotazy napříč clustery a mezi databázemi

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Dotazy se spouštějí s konkrétní databází určenou jako databáze v kontextu. Tato databáze funguje jako výchozí pro kontrolu oprávnění. Pokud se na entitu odkazuje v dotazu bez zadání clusteru nebo databáze, přeloží se na tuto databázi.

Dotazy se spouštějí s konkrétní databází určenou jako databáze v kontextu. Tato databáze funguje jako výchozí pro kontrolu oprávnění. Pokud se na entitu odkazuje v dotazu bez zadání kontextu, přeloží se proti této databázi.

Tento článek vysvětluje, jak spouštět dotazy, které zahrnují entity umístěné mimo aktuální kontextové databáze.

Požadavky

Identifikace clusteru a databáze v kontextu

Identifikace eventhouse a databáze v kontextu

Následující tabulka vysvětluje, jak identifikovat databázi v kontextu podle prostředí dotazu.

Prostředí Databáze v kontextu
Průzkumník Kusto Výchozí databáze je databáze vybraná na panelu připojení a aktuální cluster je cluster obsahující tuto databázi.
Webové uživatelské rozhraní Azure Data Exploreru Výchozí databáze je ta, která je vybraná v podokně připojení a aktuální cluster je cluster obsahující tuto databázi.
Klientské knihovny Zadejte výchozí databázi a cluster podle Data Source vlastností Initial Catalog připojovací řetězec Kusto.
Prostředí Databáze nebo eventhouse v kontextu
Průzkumník Kusto Výchozí databáze je databáze vybraná na panelu připojení a aktuální událostí je eventhouse obsahující tuto databázi.
Sada dotazů KQL inteligentního měřítka v reálném čase Výchozí databáze je aktuální databáze vybraná buď přímo , nebo prostřednictvím eventhouse.
Klientské knihovny Zadejte výchozí databázi s identifikátorem URI databáze, která se používá pro Data Source vlastnosti připojovací řetězec Kusto. Pro eventhouse použijte jeho identifikátor URI clusteru. Najdete ho tak , že vyberete Přehled systému v části Podrobnosti centra událostí pro vybraný eventhouse.

Provádění dotazů napříč clustery nebo mezi databázemi

Provádění dotazů napříč událostmi nebo mezi databázemi

Pokud chcete získat přístup k entitě mimo databázi v kontextu, použijte kvalifikovat název entity pomocí funkcí cluster() a database().

Pro tabulku v jiné databázi v rámci stejného clusteru:

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

Tabulka ve vzdáleném clusteru:

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

Pro tabulku v jiné databázi v rámci stejného centra událostí:

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

Tabulka ve vzdáleném clusteru událostí nebo vzdálené službě (například Azure Data Explorer):

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

Poznámka:

Pokud chcete spustit dotaz, musíte mít oprávnění prohlížeče k výchozí databázi a ke každé jiné databázi odkazované v dotazu. Další informace najdete v tématu Řízení přístupu na základě role Kusto.

Tip

Počet záznamů vrácených z dotazu je ve výchozím nastavení omezený, i když neexistuje žádné konkrétní použití operátoru take . Pokud chcete tento limit zrušit, použijte notruncation možnost žádosti klienta. Další informace najdete v tématu Omezení dotazů.

Kvalifikované názvy a operátor sjednocení

Pokud se kvalifikovaný název zobrazí jako operand sjednocovacího operátoru, lze k určení více tabulek a více databází použít zástupné cardy. Zástupné cardy nejsou v názvech clusterů povolené.

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

Pokud se kvalifikovaný název zobrazí jako operand sjednocovacího operátoru, lze k určení více tabulek a více databází použít zástupné cardy. Zástupné cardy nejsou povolené v názvech eventhouse.

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

Poznámka:

Název výchozí databáze je také potenciální shoda, takže database("*") určuje všechny tabulky všech databází, včetně výchozí.

Kvalifikované názvy a omezení přístupových příkazů

Kvalifikované názvy nebo vzory lze také zahrnout do příkazu omezit přístup . Zástupné cardy v názvech clusterů nejsou povolené.

Zástupné cardy v názvech eventhouse nejsou povolené.

Následující dotaz omezuje přístup k dotazům na následující entity:

  • Libovolný název entity začínající mým... ve výchozí databázi.
  • Libovolná tabulka ve všech databázích s názvem MyOther... aktuálního clusteru.
  • Všechny tabulky ve všech databázích s názvem my2... v clusteru OtherCluster.kusto.windows.net.
restrict access to (my*, database("MyOther*").*, cluster("OtherCluster").database("my2*").*);
  • Libovolný název entity začínající událostí ... ve výchozí databázi.
  • Libovolná tabulka ve všech databázích s názvem EventOther... aktuálního centra událostí.
  • Libovolná tabulka ve všech databázích s názvem event2... v OtherEventhouse.kusto.data.microsoft.com eventhouse.
restrict access to (event*, database("EventOther*").*, cluster("OtherEventhouseClusterURI").database("event2*").*);

Zpracování změn schématu vzdálených entit

Aby bylo možné zpracovat dotaz mezi clustery, musí mít cluster, který provádí počáteční interpretaci dotazu, schéma entit odkazovaných na vzdálených clusterech. K získání těchto informací se odešle příkaz, který načte schémata, která jsou pak uložena v mezipaměti.

Pokud ve vzdáleném clusteru dojde ke změně schématu, může být schéma v mezipaměti zastaralé. To může vést k nežádoucím efektům, včetně scénářů, kdy nové nebo odstraněné sloupce způsobují Partial query failure. Pokud chcete tyto problémy vyřešit, aktualizujte schéma ručně příkazem vzdáleného schématu mezipaměti .clear.

Aby bylo možné zpracovat dotaz clusteru mezi eventhousemi nebo eventhouse-to-ADX, musí mít objekt událostí, který provádí počáteční interpretaci dotazu, schéma entit odkazovaných na vzdálené objekty událostí nebo clustery. K získání těchto informací se odešle příkaz, který načte schémata, která jsou pak uložena v mezipaměti.

Pokud dojde ke změně vzdáleného schématu, může být schéma v mezipaměti zastaralé. To může vést k nežádoucím efektům, včetně scénářů, kdy nové nebo odstraněné sloupce způsobují Partial query failure. Pokud chcete tyto problémy vyřešit, aktualizujte schéma ručně příkazem vzdáleného schématu mezipaměti .clear.

Funkce a zobrazení

Funkce a zobrazení (trvalá a vytvořená vložená) můžou odkazovat na tabulky napříč hranicemi databáze a clusteru. Následující kód je platný.

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

K trvalým funkcím a zobrazením je možné přistupovat z jiné databáze ve stejném clusteru.

Řekněme například, že v databázi OtherDbvytvoříte následující tabulkovou funkci (zobrazení):

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

Pak v databázi OtherDbvytvoříte následující skalární funkci:

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

Ve výchozí databázi lze na tyto entity odkazovat následujícím způsobem:

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

Funkce a zobrazení (trvalá a vytvořená vložená) můžou odkazovat na tabulky napříč databázemi a hranicemi událostí. Následující kód je platný.

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

K trvalým funkcím a zobrazením je možné přistupovat z jiné databáze ve stejném objektu událostí.

Řekněme například, že v databázi OtherDbvytvoříte následující tabulkovou funkci (zobrazení):

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

Pak v databázi OtherDbvytvoříte následující skalární funkci:

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

Řekněme například, že v databázi OtherDbvytvoříte následující tabulkovou funkci (zobrazení):

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

Pak v databázi OtherDbvytvoříte následující skalární funkci:

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

Ve výchozí databázi lze na tyto entity odkazovat následujícím způsobem:

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

Omezení volání funkcí mezi clustery

Tabulkové funkce nebo zobrazení se dají odkazovat napříč clustery. Platí následující omezení:

  • Vzdálené funkce musí vracet tabulkové schéma. Ke skalárním funkcím je možné přistupovat pouze ve stejném clusteru.
  • Vzdálené funkce mohou přijímat pouze skalární argumenty. Funkce, které získají jeden nebo více argumentů tabulky, můžou být přístupné jenom ve stejném clusteru.
  • Schéma výsledků vzdálených funkcí musí být opravené (známé předem bez provádění částí dotazu). Proto nelze použít konstruktory dotazů, jako pivot je modul plug-in. Některé moduly plug-in, jako bag_unpack je například modul plug-in, podporují způsob, jak indikovat schéma výsledku staticky, a v tomto formátu je možné ho použít ve voláních funkcí mezi clustery.
  • Z důvodů výkonu ukládá volající cluster schéma vzdálených entit do mezipaměti po počátečním volání. Změny provedené ve vzdálené entitě proto můžou vést k neshodě s informacemi o schématu uloženém v mezipaměti, což může vést k selhání dotazů. Další informace najdete v tématu Dotazy napříč clustery a změny schématu.

Omezení volání funkce mezi událostmi

Tabulkové funkce nebo zobrazení lze odkazovat napříč eventhousemi. Platí následující omezení:

  • Vzdálené funkce musí vracet tabulkové schéma. Skalární funkce jsou přístupné pouze ve stejném centru událostí.
  • Vzdálené funkce mohou přijímat pouze skalární argumenty. Funkce, které získají jeden nebo více argumentů tabulky, jsou přístupné pouze ve stejném objektu událostí.
  • Schéma výsledků vzdálených funkcí musí být opravené (známé předem bez provádění částí dotazu). Proto nelze použít konstruktory dotazů, jako pivot je modul plug-in. Některé moduly plug-in, například modul bag_unpack plug-in, podporují způsob, jak indikovat schéma výsledku staticky, a v tomto formátu je možné ho použít ve voláních funkce mezi událostmi.
  • Z důvodů výkonu ukládá volající událost do mezipaměti schéma vzdálených entit po počátečním volání. Změny provedené ve vzdálené entitě proto můžou vést k neshodě s informacemi o schématu uloženém v mezipaměti, což může vést k selhání dotazů. Další informace najdete v tématu Dotazy napříč clustery a změny schématu.

Příklady

Následující volání mezi clustery je platné.

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

Následující dotaz volá vzdálenou skalární funkci MyCalc. Toto volání porušuje pravidlo č. 1, takže není platné.

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

Následující dotaz volá vzdálenou funkci MyCalc a poskytuje tabulkový parametr. Toto volání porušuje pravidlo č. 2, takže není platné.

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

Následující volání křížového centra je platné.

cluster("OtherEventhouseURI").database("SomeDb").EventView("exception") | count

Následující dotaz volá vzdálenou skalární funkci EventCalc. Toto volání porušuje pravidlo č. 1, takže není platné.

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

Následující dotaz volá vzdálenou funkci EventCalc a poskytuje tabulkový parametr. Toto volání porušuje pravidlo č. 2, takže není platné.

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

Následující dotaz volá vzdálenou funkci SomeTable , která má výstup schématu proměnných na základě parametru tablename. Toto volání porušuje pravidlo č. 3, takže není platné.

Tabulková funkce v OtherDb.

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

Ve výchozí databázi.

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

Následující dotaz volá vzdálenou funkciGetDataPivot, která má výstup schématu proměnných na základě modulu plug-in data (pivot() má dynamický výstup. Toto volání porušuje pravidlo č. 3, takže není platné.

Tabulková funkce v OtherDb.

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

Tabulková funkce ve výchozí databázi

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