Postup registrace a používání uložených procedur, triggerů a funkcí definovaných uživatelem ve službě Azure Cosmos DB
Článek
PLATÍ PRO: NoSQL
Rozhraní API pro NoSQL ve službě Azure Cosmos DB podporuje registraci a vyvolání uložených procedur, triggerů a uživatelem definovaných funkcí (UDF) napsaných v JavaScriptu. Po definování jedné nebo více uložených procedur, triggerů nebo uživatelem definovaných funkcí je můžete načíst a zobrazit na webu Azure Portal pomocí Průzkumníka dat.
K těmto úlohám můžete použít rozhraní API pro sadu NoSQL SDK na různých platformách, včetně .NET v2 (starší verze), .NET v3, Java, JavaScriptu nebo sad Python SDK. Pokud jste ještě s některou z těchto sad SDK nepracovali, projděte si článek rychlý start pro příslušnou sadu SDK:
Následující ukázky kódu předpokládají, že již máte client a container proměnné. Pokud tyto proměnné potřebujete vytvořit, projděte si příslušný rychlý start pro vaši platformu.
Spouštění uložených procedur
Uložené procedury se zapisují pomocí JavaScriptu. Můžou vytvářet, aktualizovat, číst, dotazovat a odstraňovat položky v kontejneru Azure Cosmos DB. Další informace naleznete v tématu Jak psát uložené procedury.
Následující příklady ukazují, jak zaregistrovat a volat uloženou proceduru pomocí sad SDK služby Azure Cosmos DB. Zdroj pro tuto uloženou proceduru uložený jako spCreateToDoItem.js naleznete v tématu Vytváření položek pomocí uložených procedur.
Poznámka:
V případě dělených kontejnerů musíte při spuštění uložené procedury zadat hodnotu klíče oddílu v možnostech požadavku. Uložené procedury jsou vždy vymezeny na klíč oddílu. Položky, které mají jinou hodnotu klíče oddílu, nejsou viditelné pro uloženou proceduru. Tento princip platí také pro triggery.
Následující kód ukazuje, jak volat uloženou proceduru pomocí sady Python SDK:
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 spouštět pretriggery
Následující příklady ukazují, jak zaregistrovat a volat pretrigger pomocí sad SDK služby Azure Cosmos DB. Zdroj tohoto příkladu pretriggeru, který je uložený jako trgPreValidateToDoItemTimestamp.js, najdete v tématu Pretriggery.
Při spuštění operace zadáním PreTriggerInclude a předáním názvu triggeru v objektu List se předávají pretriggery v objektu RequestOptions .
Poznámka:
I když se název triggeru předává jako název List, stále můžete spustit pouze jednu aktivační událost pro každou operaci.
Následující kód ukazuje, jak volat pretrigger pomocí sady Python SDK:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Spuštění triggerů po spuštění
Následující příklady ukazují, jak zaregistrovat trigger po spuštění pomocí sad SDK služby Azure Cosmos DB. Zdroj tohoto příkladu po triggeru, který je uložený jako trgPostUpdateMetadata.js, najdete v tématu Post-triggery.
Následující příklady ukazují, jak zaregistrovat uživatelem definovanou funkci pomocí sad SDK služby Azure Cosmos DB. Zdroj tohoto uživatelem definovaného příkladu funkce, který je uložený jako udfTax.js, najdete v tématu Jak psát uživatelem definované funkce.
Následující kód ukazuje, jak zaregistrovat uživatelem definovanou funkci pomocí sady .NET SDK v2:
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);
Následující kód ukazuje, jak volat uživatelem definovanou funkci pomocí sady .NET SDK v2:
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
}
Následující kód ukazuje, jak zaregistrovat uživatelem definovanou funkci pomocí sady .NET SDK v3:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
Následující kód ukazuje, jak volat uživatelem definovanou funkci pomocí sady .NET SDK v3:
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
}
}
Následující kód ukazuje, jak zaregistrovat uživatelem definovanou funkci pomocí sady Java SDK:
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu: https://aka.ms/ContentUserFeedback.