Jak rejestrować procedury składowane, wyzwalacze i funkcje zdefiniowane przez użytkownika oraz jak ich używać w usłudze Azure Cosmos DB
Artykuł
DOTYCZY: NoSQL
Interfejs API for NoSQL w usłudze Azure Cosmos DB obsługuje rejestrowanie i wywoływanie procedur składowanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika (UDF) napisanych w języku JavaScript. Po zdefiniowaniu co najmniej jednej procedury składowanych, wyzwalaczy lub funkcji zdefiniowanych przez użytkownika można załadować i wyświetlić je w witrynie Azure Portal przy użyciu Eksploratora danych.
Do wykonywania tych zadań można użyć interfejsu API dla zestawu SDK NoSQL na wielu platformach, w tym .NET v2 (starsza wersja), .NET v3, JavaScript lub Python SDK. Jeśli wcześniej nie pracowaliśmy z jednym z tych zestawów SDK, zapoznaj się z artykułem Szybki start dotyczącym odpowiedniego zestawu SDK:
W poniższych przykładach kodu przyjęto założenie, że masz client już zmienne i container . Jeśli musisz utworzyć te zmienne, zapoznaj się z odpowiednim przewodnikiem Szybki start dla swojej platformy.
Jak uruchamiać procedury składowane
Procedury składowane pisze się przy użyciu języka JavaScript. Mogą tworzyć, aktualizować, odczytywać, wykonywać zapytania i usuwać elementy w kontenerze usługi Azure Cosmos DB. Aby uzyskać więcej informacji, zobacz Jak pisać procedury składowane.
Poniższe przykłady pokazują, jak zarejestrować i wywoływać procedurę składowaną przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby użyć źródła dla tej procedury składowanej zapisanej jako spCreateToDoItem.js, zobacz Tworzenie elementów przy użyciu procedur składowanych.
Uwaga
W przypadku kontenerów partycjonowanych podczas uruchamiania procedury składowanej należy podać wartość klucza partycji w opcjach żądania. Procedury składowane są zawsze ograniczone do klucza partycji. Elementy, które mają inną wartość klucza partycji, nie są widoczne dla procedury składowanej. Ta zasada dotyczy również wyzwalaczy.
Poniższy kod pokazuje, jak wywołać procedurę składowaną przy użyciu zestawu SDK języka Python:
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)
Jak uruchamiać pretriggers
W poniższych przykładach pokazano, jak zarejestrować i wywołać pretrigger przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby zapoznać się ze źródłem tego przykładu pretrigger zapisanego jako trgPreValidateToDoItemTimestamp.js, zobacz Pretriggers (Pretriggers).
Po uruchomieniu operacji przez PreTriggerInclude określenie, a następnie przekazanie nazwy wyzwalacza w List obiekcie, pretriggers są przekazywane w RequestOptions obiekcie.
Uwaga
Mimo że nazwa wyzwalacza jest przekazywana jako List, nadal można uruchomić tylko jeden wyzwalacz na operację.
Poniższy kod pokazuje, jak wywołać pretrigger przy użyciu zestawu SDK języka Python:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Jak uruchamiać wyzwalacze wywoływane po operacji
Poniższe przykłady pokazują, jak zarejestrować wyzwalacz uruchamiany po operacji przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby zapoznać się ze źródłem tego przykładu po wyzwoleniu zapisanym jako trgPostUpdateMetadata.js, zobacz Post-triggers (Wyzwalacze po wyzwoleniu)
Jak pracować z funkcjami zdefiniowanymi przez użytkownika
Poniższe przykłady pokazują, jak zarejestrować funkcję zdefiniowaną przez użytkownika przy użyciu zestawów SDK usługi Azure Cosmos DB. Aby zapoznać się ze źródłem tego przykładu funkcji zdefiniowanej przez użytkownika, zapisanego jako udfTax.js, zobacz How to write user-defined functions (Jak zapisywać funkcje zdefiniowane przez użytkownika).
Poniższy kod pokazuje, jak zarejestrować funkcję zdefiniowaną przez użytkownika przy użyciu zestawu .NET SDK w wersji 2:
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);
Poniższy kod pokazuje, jak wywołać funkcję zdefiniowaną przez użytkownika przy użyciu zestawu .NET SDK w wersji 2:
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
}
Poniższy kod pokazuje, jak zarejestrować funkcję zdefiniowaną przez użytkownika przy użyciu zestawu .NET SDK w wersji 3:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
Poniższy kod pokazuje, jak wywołać funkcję zdefiniowaną przez użytkownika przy użyciu zestawu .NET SDK w wersji 3:
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
}
}
Poniższy kod pokazuje, jak zarejestrować funkcję zdefiniowaną przez użytkownika przy użyciu zestawu SDK platformy Java: