Я могу успешно копировать данные из sql Azure в Azure cosmos DB с помощью фабрики данных. После первой копии я хочу, чтобы он обновлялся из того же источника sql, но вот проблема:
Предположим, у меня есть такая таблица SQL:
Col1 Col2
val11 val21
val12 val22
val13 val21
val11 val23
При копировании фабрики данных я выбрал SQL в качестве источника и Cosmos DB в качестве места назначения. Для копирования выбрал вариант upsert.
В разделе сопоставления фабрики данных azure я настраиваю col1, сопоставленный с / primarykey моей коллекции cosmosdb, и col2, сопоставленный с col2.
Теперь я выполнил конвейер фабрики данных. Он успешно скопировал его, и элементы выглядят следующим образом:
ID PartitionKey Document `SomeGuid1` val11 { Col2: val21 } `SomeGuid2` val12 { Col2: val22 } `SomeGuid3` val13 { Col2: val21 } `SomeGuid4` val11 { Col2: val23 }
- До этого момента все в порядке. Но предположим, что данные SQL изменились, и первая строка стала (val11 val25 (Changed)). Теперь я хочу снова скопировать эту таблицу sql в cosmos DB.
- Когда я снова запускаю конвейер фабрики данных, он снова копирует все строки и дублирует данные.
ID PartitionKey Document `SomeGuid1` val11 { Col2: val21 } `SomeGuid2` val12 { Col2: val22 } `SomeGuid3` val13 { Col2: val21 } `SomeGuid4` val11 { Col2: val23 } `SomeGuid5` val11 { Col2: val25 } >-- changed value `SomeGuid6` val12 { Col2: val22 } `SomeGuid7` val13 { Col2: val21 } `SomeGuid8` val11 { Col2: val23 }
Но я не хочу, чтобы это дублировалось. Я хочу просто скопировать и заменить старые данные. Итак, я хочу, чтобы данные после задачи 2-го копирования были:
ID PartitionKey Document `SomeGuid5` val11 { Col2: val25 } >-- changed value `SomeGuid6` val12 { Col2: val22 } `SomeGuid7` val13 { Col2: val21 } `SomeGuid8` val11 { Col2: val23 }
Я думаю, что он дублирует все строки, потому что upsert проверяет свойство Id, но поскольку источник не имеет идентификатора, он генерирует его, а во второй копии он также генерирует новые идентификаторы и добавляет новые документы.
В SQL мы копируем временную таблицу, а затем меняем имя таблицы на исходную после полного копирования. Но база данных cosmos не поддерживает переименование контейнера: https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/19466575-add-ability-to-rename-databases-and-collections а>
Любая помощь будет принята с благодарностью. Нам нравится cosmos db, и мы будем рады его использовать.