#c# #.net #azure-cosmosdb #azure-cosmosdb-gremlinapi #bulk-delete
#c# #.net #azure-cosmosdb #azure-cosmosdb-gremlinapi #массовое удаление
Вопрос:
Я пытаюсь использовать функцию BulkDelete (для графической базы данных Cosmos DB), которая принимает строковый запрос и удаляет все результаты в моем приложении .NET C #. Документация: https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmosdb.bulkexecutor.graph.graphbulkexecutor.bulkdeleteasync?view=azure-dotnet
Поскольку я не знаю идентификаторов и ключей разделов вершин и ребер, подлежащих удалению на графике, я не могу использовать этот BulkDelete API: https://github.com/Azure/azure-cosmosdb-bulkexecutor-dotnet-getting-started#bulk-delete-api
Использование CosmosDB.BulkExecutor.График.GraphBulkExecutor.BulkDeleteAsync (который принимает запрос как строку) выдает это исключение:
Система.Исключение NotImplementedException: метод или операция не реализованы. в Microsoft.Azure.CosmosDB.BulkExecutor.График.GraphBulkExecutor.BulkDeleteAsync(строковый запрос, обнуляемый `1 deleteBatchSize, CancellationToken CancellationToken) в …
соответствующий фрагмент кода:
// Prepare for bulk delete
var bulkExecutor = new GraphBulkExecutor(client, dataCollection);
await bulkExecutor.InitializeAsync();
var cancellationToken = new CancellationTokenSource().Token;
string query = "g.V().hasLabel('user')";
BulkDeleteResponse bulkDeleteResponse = null;
try
{
bulkDeleteResponse = await bulkExecutor.BulkDeleteAsync(query, 1000, cancellationToken);
PrintSummaryofBulkDelete(bulkDeleteResponse);
}
catch (DocumentClientException de)
{
LogUtility.Error("Document client exception: {0}", de);
}
catch (Exception e)
{
LogUtility.Error("Exception: {0}", e);
}
Действительно ли это не реализовано или я совершаю ошибку при его использовании?
Ответ №1:
Это действительно не реализовано. Для GraphBulkExecutor единственной доступной операцией, по-видимому, является импорт.
И причина может заключаться в том, что GraphBulkExecutor просто использует библиотеку SQL API Bulk Executor, которая поддерживает только запросы типа SQL (без запросов graph). Это может быть причиной того, что GraphBulkExecutor не принимает никаких входных данных запроса, потому что он не сможет его запустить.
Комментарии:
1. Спасибо @Matias. В таком случае, каков самый быстрый способ массового удаления элементов графика на основе результатов запроса? Я могу написать эквивалентные SQL-запросы для запросов gremlin, которые будут выводить вершины / ребра (документы), подлежащие удалению.
2. Если у вас есть значения ID PK, вы, безусловно, можете использовать BulkDelete SQL-библиотеки Bulk Executor (не GraphBulkExecutor) ИЛИ используйте массовый режим V3 SDK с операциями удаления элементов, подойдут оба
3. Небольшое уточнение: у меня нет значений ID PK. Должен ли элемент быть удален или нет, зависит от его динамических свойств. Мне нужно извлечь его из базы данных graph с помощью запроса.
4. Правильно, вам понадобится запрос для получения ID PK, чтобы иметь возможность использовать любые альтернативы массового удаления.