Dotazy napříč clustery a mezi databázemi
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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
- Pokud jsou clustery v různých tenantech, postupujte podle pokynů v tématu Povolit dotazy a příkazy mezi tenanty.
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 OtherDb
vytvoříte následující tabulkovou funkci (zobrazení):
.create function MyView(v:string) { Table1 | where Column1 has v ... }
Pak v databázi OtherDb
vytvoří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 OtherDb
vytvoříte následující tabulkovou funkci (zobrazení):
.create function EventView(v:string) { Table1 | where Column1 has v ... }
Pak v databázi OtherDb
vytvoří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 OtherDb
vytvoříte následující tabulkovou funkci (zobrazení):
.create function EventView(v:string) { Table1 | where Column1 has v ... }
Pak v databázi OtherDb
vytvoří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, jakobag_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 modulbag_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()