Apr 02 2022 10:13 AM - edited Apr 02 2022 01:36 PM
O Objetivo da discussão é apenas passar o conhecimento de como deletar os registros no Cosmo DB, se alguém tiver outra ideia, pode compartilhar a informação.
Informação para quem já faz a criação de solução de engenharia de dados do Azure usando o Azure Data Factory como uma ferramenta de orquestração e o Azure Cosmos DB em um cenário em que talvez seja necessário excluir documentos de um contêiner SQL, você já deve ter percebido que há não é uma maneira fácil de fazê-lo.
Essa postagem é para você que já usa o Azure Data Factory, Azure Cosmos DB (SQL API) e Azure Logic Apps.
C O S M O S D B
Fluxo de trabalho de alto nível para fazer isso
function bulkDeleteSproc(query) {
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var response = getContext().getResponse();
var responseBody = {
deleted: 0,
continuation: true
};
if (!query) throw new Error("Consulta inválida!!!");
tryQueryAndDelete();
function tryQueryAndDelete(continuation) {
var requestOptions = {continuation: continuation};
var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, retrievedDocs, responseOptions) {
if (err) throw err;
if (retrievedDocs.length > 0) {
tryDelete(retrievedDocs);
} else if (responseOptions.continuation) {
tryQueryAndDelete(responseOptions.continuation);
} else {
responseBody.continuation = false;
response.setBody(responseBody);
}
});
if (!isAccepted) {
response.setBody(responseBody);
}
}
function tryDelete(documents) {
if (documents.length > 0) {
var isAccepted = collection.deleteDocument(documents[0]._self, {}, function (err, responseOptions) {
if (err) throw err;
responseBody.deleted++;
documents.shift();
tryDelete(documents);
});
if (!isAccepted) {
response.setBody(responseBody);
}
} else {
tryQueryAndDelete();
}
}
}
L O G I C A P P S
D A T A F A C T O R Y
@equals(0,activity('Delete').output.deleted)
F I M