Cluster- und datenbankübergreifende Abfragen
Abfragen werden mit einer bestimmten Datenbank ausgeführt, die als Datenbank im Kontext festgelegt ist. Diese Datenbank fungiert als Standard für die Berechtigungsüberprüfung. Wenn in einer Abfrage ohne Angabe des Clusters oder der Datenbank auf eine Entität verwiesen wird, wird sie für diese Datenbank aufgelöst.
In diesem Artikel wird erläutert, wie Abfragen ausgeführt werden, die Entitäten betreffen, die sich außerhalb der aktuellen Kontextdatenbank befinden.
Voraussetzungen
- Wenn sich die Cluster in unterschiedlichen Mandanten befinden, befolgen Sie die Anweisungen unter Zulassen mandantenübergreifender Abfragen und Befehle.
Identifizieren des Clusters und der Datenbank im Kontext
In der folgenden Tabelle wird erläutert, wie Sie die Datenbank im Kontext nach Abfrageumgebung identifizieren.
Environment | Datenbank im Kontext |
---|---|
Kusto-Explorer | Die Standarddatenbank ist die im Bereich Verbindungen ausgewählte Datenbank, und der aktuelle Cluster ist der Cluster, der diese Datenbank enthält. |
Webbenutzeroberfläche von Azure Data Explorer | Die Standarddatenbank ist die im Verbindungsbereich ausgewählte Datenbank, und der aktuelle Cluster ist der Cluster, der diese Datenbank enthält. |
Clientbibliotheken | Die Standarddatenbank und der Cluster werden durch die Data Source Eigenschaften und Initial Catalog der Kusto-Verbindungszeichenfolgen angegeben. |
Durchführen cluster- oder datenbankübergreifender Abfragen
Um im Kontext auf Entitäten außerhalb der Datenbank zuzugreifen, verwenden Sie die Funktionen cluster() und database(), um den Entitätsnamen zu qualifizieren.
Für eine Tabelle in einer anderen Datenbank innerhalb desselben Clusters:
database("<DatabaseName>").<TableName>
Für eine Tabelle in einem Remotecluster:
cluster("<ClusterName>").database("<DatabaseName>").<TableName>
Hinweis
Zum Ausführen einer Abfrage müssen Sie über die Viewerberechtigung für die Standarddatenbank und für jede andere Datenbank verfügen, auf die in der Abfrage verwiesen wird. Weitere Informationen finden Sie unter Rollenbasierte Zugriffssteuerung in Kusto.
Tipp
Die Anzahl der von einer Abfrage zurückgegebenen Datensätze ist standardmäßig begrenzt, auch wenn der take
Operator nicht speziell verwendet wird. Um diese Begrenzung aufzuheben, verwenden Sie die Clientanforderungsoption notruncation
. Weitere Informationen finden Sie unter Abfragegrenzwerte.
Qualifizierte Namen und der Union-Operator
Wenn ein qualifizierter Name als Operand des Union-Operator angezeigt wird, können Platzhalter verwendet werden, um mehrere Tabellen und mehrere Datenbanken anzugeben. In Clusternamen sind Dies ist nicht zulässig.
union withsource=TableName *, database("OtherDb*").*Table, cluster("OtherCluster").database("*").*
Hinweis
Der Name der Standarddatenbank ist auch eine potenzielle Übereinstimmung, sodass database("*")
alle Tabellen aller Datenbanken einschließlich der Standarddatenbank angegeben werden.
Qualifizierte Namen und Einschränken von Zugriffsanweisungen
Qualifizierte Namen oder Muster können auch in die Einschränkung des Zugriffs eingeschlossen werden. Wildcards in Clusternamen sind nicht zulässig.
Die folgende Abfrage schränkt den Abfragezugriff auf die folgenden Entitäten ein:
- Ein beliebiger Entitätsname, der mit my... in der Standarddatenbank beginnt.
- Jede Tabelle in allen Datenbanken mit dem Namen MyOther... des aktuellen Clusters.
- Jede Tabelle in allen Datenbanken mit dem Namen my2... im Cluster OtherCluster.kusto.windows.net.
restrict access to (my*, database("MyOther*").*, cluster("OtherCluster").database("my2*").*);
Behandeln von Schemaänderungen von Remoteentitäten
Zum Verarbeiten einer clusterübergreifenden Abfrage muss für den Cluster, der die anfängliche Abfrageinterpretation ausführt, das Schema der Entitäten in Remoteclustern referenziert werden. Um diese Informationen abzurufen, wird ein Befehl gesendet, um die Schemas abzurufen, die dann in einem Cache gespeichert werden.
Im Fall einer Schemaänderung im Remotecluster kann ein zwischengespeichertes Schema veraltet sein. Dies kann zu unerwünschten Auswirkungen führen, einschließlich Szenarien, in denen neue oder gelöschte Spalten einen Partial query failure
verursachen. Um solche Probleme zu beheben, aktualisieren Sie das Schema manuell mit dem Befehl ".clear cache remote-schema ".
Funktionen und Sichten
Funktionen und Ansichten (persistent und inline erstellt) können über Datenbank- und Clustergrenzen hinweg auf Tabellen verweisen. Der folgende Code ist gültig.
let MyView = Table1 join database("OtherDb").Table2 on Key | join cluster("OtherCluster").database("SomeDb").Table3 on Key;
MyView | where ...
Auf persistente Funktionen und Ansichten kann von einer anderen Datenbank im selben Cluster zugegriffen werden.
Angenommen, Sie erstellen die folgende tabellarische Funktion (Ansicht) in einer Datenbank OtherDb
:
.create function MyView(v:string) { Table1 | where Column1 has v ... }
Anschließend erstellen Sie die folgende skalare Funktion in einer Datenbank OtherDb
:
.create function MyCalc(a:double, b:double, c:double) { (a + b) / c }
In der Standarddatenbank kann wie folgt auf diese Entitäten verwiesen werden:
database("OtherDb").MyView("exception") | extend CalCol=database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10
Einschränkungen clusterübergreifender Funktionsaufrufe
Tabellenfunktionen oder Ansichten können clusterübergreifend referenziert werden. Es gelten die folgenden Einschränkungen:
- Remotefunktionen müssen ein tabellarisches Schema zurückgeben. Auf skalare Funktionen kann nur im gleichen Cluster zugegriffen werden.
- Remotefunktionen können nur skalare Argumente akzeptieren. Auf Funktionen, die mindestens ein Tabellenargument erhalten, kann nur im selben Cluster zugegriffen werden.
- Das Ergebnisschema von Remotefunktionen muss korrigiert werden (im Voraus bekannt, ohne Teile der Abfrage auszuführen).
Dies schließt die Verwendung von Abfragekonstrukten wie dem
pivot
Plug-In aus. (Beachten Sie, dass einige Plug-Ins, z. B. dasbag_unpack
Plug-In, eine Möglichkeit unterstützen, das Ergebnisschema statisch anzugeben, und in dieser Form in clusterübergreifenden Funktionsaufrufen verwendet werden kann .) - Aus Leistungsgründen wird das Schema der Remoteentitäten nach dem ersten Aufruf vom aufrufenden Cluster zwischengespeichert. Daher können Änderungen an der Remoteentität zu einem Konflikt mit den zwischengespeicherten Schemainformationen führen, was zu Abfragefehlern führen kann. Weitere Informationen finden Sie unter Clusterübergreifende Abfragen und Schemaänderungen.
Beispiele
Der folgende clusterübergreifende Aufruf ist gültig.
cluster("OtherCluster").database("SomeDb").MyView("exception") | count
Die folgende Abfrage ruft eine skalare Remotefunktion MyCalc
auf.
Dieser Aufruf verstößt gegen Regel #1, daher ist er ungültig.
MyTable | extend CalCol=cluster("OtherCluster").database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10
Die folgende Abfrage ruft die Remotefunktion MyCalc
auf und stellt einen tabellarischen Parameter bereit.
Dieser Aufruf verstößt gegen Regel #2, daher ist er ungültig.
cluster("OtherCluster").database("OtherDb").MyCalc(datatable(x:string, y:string)["x","y"] )
Die folgende Abfrage ruft eine Remotefunktion SomeTable
auf, die eine Variablenschemaausgabe basierend auf dem Parameter tablename
aufweist.
Dieser Aufruf verstößt gegen Regel 3, daher ist er ungültig.
Tabellarische Funktion in OtherDb
.
.create function SomeTable(tablename:string) { table(tablename) }
In der Standarddatenbank.
cluster("OtherCluster").database("OtherDb").SomeTable("MyTable")
Die folgende Abfrage ruft eine Remotefunktion GetDataPivot
auf, die eine Variablenschemaausgabe basierend auf dem Daten (pivot()-Plug-In mit dynamischer Ausgabe aufweist.
Dieser Aufruf verstößt gegen Regel 3, daher ist er ungültig.
Tabellarische Funktion in OtherDb
.
.create function GetDataPivot() { T | evaluate pivot(PivotColumn) }
Tabellarische Funktion in der Standarddatenbank.
cluster("OtherCluster").database("OtherDb").GetDataPivot()
Verwandte Inhalte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für