Tárolt eljárások, eseményindítók és felhasználói függvények regisztrálása és használata az Azure Cosmos DB-ben
Cikk
A KÖVETKEZŐRE VONATKOZIK: NoSQL
Az Azure Cosmos DB NoSQL API-ja támogatja a JavaScriptben írt tárolt eljárások, triggerek és felhasználó által definiált függvények (UDF-ek) regisztrálását és meghívását. Miután definiált egy vagy több tárolt eljárást, eseményindítót vagy felhasználó által definiált függvényt, betöltheti és megtekintheti őket az Azure Portalon az Adatkezelő használatával.
A NoSQL SDK API-t több platformon is használhatja, beleértve a .NET v2 (örökölt), a .NET v3, a Java, a JavaScript vagy a Python SDK-kat ezen feladatok elvégzéséhez. Ha korábban még nem dolgozott ezen SDK-k egyikével, tekintse meg a megfelelő SDK rövid útmutatóját:
Az alábbi kódminták feltételezik, hogy már rendelkezik client és container változókkal rendelkezik. Ha létre kell hoznia ezeket a változókat, tekintse meg a platform megfelelő rövid útmutatóját.
Tárolt eljárások futtatása
A tárolt eljárások JavaScript használatával vannak megírva. Létrehozhatnak, frissíthetnek, olvashatnak, lekérdezhetnek és törölhetnek elemeket egy Azure Cosmos DB-tárolóban. További információ: Tárolt eljárások írása.
Az alábbi példák bemutatják, hogyan regisztrálhat és hívhat meg tárolt eljárásokat az Azure Cosmos DB SDK-k használatával. A tárolt eljárás spCreateToDoItem.js ként mentett forrását lásd: Elemek létrehozása tárolt eljárásokkal.
Feljegyzés
Particionált tárolók esetén tárolt eljárás futtatásakor meg kell adnia egy partíciókulcs-értéket a kérés beállításai között. A tárolt eljárások mindig partíciókulcsra vannak korlátozva. Az eltérő partíciókulcs-értékkel rendelkező elemek nem láthatók a tárolt eljárásban. Ez az elv az eseményindítókra is vonatkozik.
A következő kód bemutatja, hogyan hívhat meg egy tárolt eljárást a Python SDK használatával:
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)
Előpróbálkozók futtatása
Az alábbi példák bemutatják, hogyan regisztrálhat és hívhat meg egy előpróbálkozót az Azure Cosmos DB SDK-k használatával. A trgPreValidateToDoItemTimestamp.js ként mentett pretrigger-példa forrását lásd: Pretriggers.
Amikor egy műveletet úgy futtat, hogy megadja PreTriggerInclude , majd átadja az eseményindító nevét egy List objektumban, az előpróbálkozók az objektumban RequestOptions lesznek átadva.
Feljegyzés
Annak ellenére, hogy az eseményindító neve átadva van, műveletenként Listtovábbra is csak egy eseményindítót futtathat.
Az alábbi kód bemutatja, hogyan hívhat meg egy pretriggert a Python SDK használatával:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Eseményindítók utáni futtatás
Az alábbi példák bemutatják, hogyan regisztrálhat egy eseményindítót az Azure Cosmos DB SDK-k használatával. A trgPostUpdateMetadata.js ként mentett, eseményindító utáni példa forrását lásd: Post-triggers
Az alábbi példák bemutatják, hogyan regisztrálhat felhasználó által definiált függvényeket az Azure Cosmos DB SDK-k használatával. A felhasználó által definiált, udfTax.js ként mentett példa forrását a Felhasználó által definiált függvények írása című témakörben találhatja meg.
Az alábbi kód bemutatja, hogyan regisztrálhat egy felhasználó által definiált függvényt a .NET SDK v2 használatával:
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);
Az alábbi kód bemutatja, hogyan hívhat meg egy felhasználó által definiált függvényt a .NET SDK v2 használatával:
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
}
Az alábbi kód bemutatja, hogyan regisztrálhat egy felhasználó által definiált függvényt a .NET SDK v3 használatával:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
Az alábbi kód bemutatja, hogyan hívhat meg egy felhasználó által definiált függvényt a .NET SDK v3 használatával:
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
}
}
Az alábbi kód bemutatja, hogyan regisztrálhat egy felhasználó által definiált függvényt a Java SDK használatával:
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ: https://aka.ms/ContentUserFeedback.
Visszajelzés küldése és megtekintése a következőhöz: