Azure Cosmos DB'de saklı yordamları, tetikleyicileri ve kullanıcı tanımlı işlevleri kaydetme ve kullanma
Makale
UYGULANANLAR: NoSQL
Azure Cosmos DB'deki NoSQL API'si JavaScript'te yazılmış saklı yordamları, tetikleyicileri ve kullanıcı tanımlı işlevleri (UDF) kaydetmeyi ve çağırmayı destekler. Bir veya daha fazla saklı yordam, tetikleyici veya kullanıcı tanımlı işlev tanımladıktan sonra, Veri Gezgini kullanarak bunları Azure portalında yükleyebilir ve görüntüleyebilirsiniz.
Bu görevleri gerçekleştirmek için .NET v2 (eski), .NET v3, Java, JavaScript veya Python SDK'ları gibi birden çok platformda NoSQL SDK'sı için API'yi kullanabilirsiniz. Bu SDK'lardan biriyle daha önce çalışmadıysanız, uygun SDK için hızlı başlangıç makalesine bakın:
Aşağıdaki kod örneklerinde zaten client ve container değişkenleriniz olduğu varsayılır. Bu değişkenleri oluşturmanız gerekiyorsa platformunuz için uygun hızlı başlangıç konusuna bakın.
Saklı yordamları çalıştırma
Saklı yordamlar JavaScript kullanılarak yazılır. Azure Cosmos DB kapsayıcısı içinde öğe oluşturabilir, güncelleştirebilir, okuyabilir, sorgulayabilir ve silebilir. Daha fazla bilgi için bkz . Saklı yordamları yazma.
Aşağıdaki örneklerde Azure Cosmos DB SDK'larını kullanarak bir saklı yordamın nasıl kaydedilip çağrıldığı gösterilmektedir. spCreateToDoItem.js olarak kaydedilen bu saklı yordamın kaynağı için bkz. Saklı yordamları kullanarak öğe oluşturma.
Not
Bölümlenmiş kapsayıcılar için bir saklı yordam çalıştırdığınızda, istek seçeneklerinde bir bölüm anahtarı değeri sağlamanız gerekir. Saklı yordamların kapsamı her zaman bir bölüm anahtarı olarak belirlenmiştir. Farklı bir bölüm anahtarı değerine sahip öğeler saklı yordama görünmez. Bu ilke tetikleyiciler için de geçerlidir.
Aşağıdaki kod, Python SDK'sını kullanarak saklı yordamı çağırmayı gösterir:
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)
Ön yargılayıcıları çalıştırma
Aşağıdaki örneklerde, Azure Cosmos DB SDK'larını kullanarak bir ön denemenin nasıl kaydedildiği ve çağrıldığı gösterilmektedir. trgPreValidateToDoItemTimestamp.js olarak kaydedilen bu ön deneme örneğinin kaynağı için bkz. Pretriggers.
Bir nesnede tetikleyicinin adını belirtip PreTriggerInclude geçirerek bir List işlemi çalıştırdığınızda, nesneye RequestOptions ön denemeler geçirilir.
Not
Tetikleyicinin adı olarak Listgeçirilse de işlem başına yalnızca bir tetikleyici çalıştırabilirsiniz.
Aşağıdaki kod, Python SDK'sını kullanarak bir ön denemeyi çağırmayı gösterir:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Son tetikleyicileri çalıştırma
Aşağıdaki örneklerde Azure Cosmos DB SDK'larını kullanarak bir son tetikleyicinin nasıl kaydedildiği gösterilmektedir. trgPostUpdateMetadata.js olarak kaydedilen bu tetikleyici sonrası örneğin kaynağı için bkz. Post-triggers
Aşağıdaki örneklerde, Azure Cosmos DB SDK'larını kullanarak kullanıcı tanımlı bir işlevin nasıl kaydedildiği gösterilmektedir. udfTax.js olarak kaydedilen bu kullanıcı tanımlı işlev örneğinin kaynağı için bkz. Kullanıcı tanımlı işlevleri yazma.
Aşağıdaki kod, .NET SDK v2 kullanarak kullanıcı tanımlı bir işlevin nasıl kaydedileceklerini gösterir:
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);
Aşağıdaki kodda .NET SDK v2 kullanılarak kullanıcı tanımlı bir işlevin nasıl çağrıldığı gösterilmektedir:
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
}
Aşağıdaki kod, .NET SDK v3 kullanarak kullanıcı tanımlı bir işlevin nasıl kaydedileceklerini gösterir:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
Aşağıdaki kod, .NET SDK v3 kullanarak kullanıcı tanımlı bir işlevi çağırmayı gösterir:
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
}
}
Aşağıdaki kod, Java SDK'sını kullanarak kullanıcı tanımlı bir işlevin nasıl kaydedileceklerini gösterir:
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz. https://aka.ms/ContentUserFeedback.