Registrieren und Verwenden von gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen in Azure Cosmos DB
Artikel
GILT FÜR: NoSQL
Die API für NoSQL in Azure Cosmos DB unterstützt das Registrieren und Aufrufen von gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen (User-Defined Functions, UDFs), die in JavaScript geschrieben wurden. Nachdem Sie gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen definiert haben, können Sie diese laden und im Azure-Portal mit dem Daten-Explorer anzeigen.
Sie können das SDK API for NoSQL auf mehreren Plattformen verwenden, einschließlich auf .NET v2 (Legacy),.NET v3, Java, JavaScript oder Python, um diese Aufgaben auszuführen. Wenn Sie noch nicht mit einem dieser SDKs gearbeitet haben, lesen Sie den Schnellstartartikel für das entsprechende SDK:
In den folgenden Codebeispielen wird davon ausgegangen, dass Sie bereits über client- und container-Variablen verfügen. Wenn Sie diese Variablen erstellen müssen, lesen Sie die entsprechende Schnellstartanleitung für Ihre Plattform.
Ausführen gespeicherter Prozeduren
Gespeicherte Prozeduren werden mit JavaScript geschrieben. Sie können Elemente in einem Azure Cosmos DB-Container erstellen, aktualisieren, lesen, abfragen und löschen. Weitere Informationen finden Sie unter Schreiben von gespeicherten Prozeduren.
Die folgenden Beispiele zeigen, wie Sie eine gespeicherte Prozedur mithilfe der Azure Cosmos DB SDKs registrieren und aufrufen. Den Quellcode für diese gespeicherte Prozedur (gespeichert als spCreateToDoItem.js) finden Sie unter Erstellen von Elementen mit gespeicherten Prozeduren.
Hinweis
Wenn Sie eine gespeicherte Prozedur in partitionierten Containern ausführen, muss in den Anforderungsoptionen ein Partitionsschlüsselwert angegeben werden. Gespeicherte Prozeduren gelten immer für einen bestimmten Partitionsschlüssel. Elemente, die einen anderen Partitionsschlüsselwert aufweisen, sind in der gespeicherten Prozedur nicht sichtbar. Dieses Prinzip gilt auch für Trigger.
Der folgende Code zeigt, wie Sie mit dem Python-SDK eine gespeicherte Prozedur aufrufen:
import uuid
new_id= str(uuid.uuid4())
# Creating a document for a container with "id" as a partition key.
new_item = {
"id": new_id,
"category":"Personal",
"name":"Groceries",
"description":"Pick up strawberries",
"isComplete":False
}
result = container.scripts.execute_stored_procedure(sproc=created_sproc,params=[new_item], partition_key=new_id)
Vorgehensweise: Ausführen von Prätriggern
Die folgenden Beispiele zeigen, wie Sie einen Prätrigger mithilfe der Azure Cosmos DB SDKs registrieren und aufrufen. Den Quellcode dieses Beispiels für Prätrigger (gespeichert unter dem Namen trgPreValidateToDoItemTimestamp.js) finden Sie unter Prätrigger.
Wenn Sie einen Vorgang ausführen, indem Sie PreTriggerInclude angeben und dann den Namen des Triggers in einem List-Objekt übergeben, werden Prätrigger im RequestOptions-Objekt übergeben.
Hinweis
Auch wenn der Name des Triggers als List übergeben wird, können Sie dennoch nur einen Trigger pro Vorgang ausführen.
Der folgende Code zeigt, wie Sie mit dem Python SDK einen Prätrigger aufrufen:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Ausführen von nachgestellten Triggern
Die folgenden Beispiele zeigen, wie Sie einen nachgestellten Trigger mithilfe der Azure Cosmos DB SDKs registrieren. Die Quelle dieses Beispiels für Post-Trigger (gespeichert als trgPostUpdateMetadata.js) finden Sie unter Post-Trigger.
Die folgenden Beispiele zeigen, wie Sie eine benutzerdefinierte Funktion mithilfe der Azure Cosmos DB SDKs registrieren. Die Quelle dieses Beispiels für benutzerdefinierte Funktionen (gespeichert als udfTax.js) finden Sie unter Schreiben von benutzerdefinierten Funktionen.
Der folgende Code zeigt, wie Sie mit dem .NET SDK v2 eine benutzerdefinierte Funktion registrieren:
string udfId = "Tax";
var udfTax = new UserDefinedFunction
{
Id = udfId,
Body = File.ReadAllText($@"..\js\{udfId}.js")
};
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.CreateUserDefinedFunctionAsync(containerUri, udfTax);
Der folgende Code zeigt, wie Sie mit dem .NET SDK v2 eine benutzerdefinierte Funktion aufrufen:
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
var results = client.CreateDocumentQuery<dynamic>(containerUri, "SELECT * FROM Incomes t WHERE udf.Tax(t.income) > 20000"));
foreach (var result in results)
{
//iterate over results
}
Der folgende Code zeigt, wie Sie mit dem .NET SDK v3 eine benutzerdefinierte Funktion registrieren:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
Der folgende Code zeigt, wie Sie mit dem .NET SDK v3 eine benutzerdefinierte Funktion aufrufen:
var iterator = client.GetContainer("database", "container").GetItemQueryIterator<dynamic>("SELECT * FROM Incomes t WHERE udf.Tax(t.income) > 20000");
while (iterator.HasMoreResults)
{
var results = await iterator.ReadNextAsync();
foreach (var result in results)
{
//iterate over results
}
}
Der folgende Code zeigt, wie Sie mit dem Java SDK eine benutzerdefinierte Funktion registrieren:
Der folgende Code zeigt, wie Sie mit dem Python SDK eine benutzerdefinierte Funktion aufrufen:
results = list(container.query_items(
'query': 'SELECT * FROM Incomes t WHERE udf.Tax(t.income) > 20000'))
Nächste Schritte
Lernen Sie weitere Konzepte und Vorgehensweisen zum Schreiben und Verwenden von gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen in Azure Cosmos DB kennen: