Я могу успешно копировать данные из sql Azure в Azure cosmos DB, используя фабрику данных. После первой копии я хочу, чтобы она обновлялась из того же источника SQL, но вот проблема:
Предположим, у меня есть таблица SQL, подобная этой:
Col1 Col2
val11 val21
val12 val22
val13 val21
val11 val23
В операции копирования фабрики данных я выбрал SQL в качестве источника и космическую БД в качестве места назначенияЯ выбрал опцию 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 (изменено)). Теперь я хочу снова скопировать эту таблицу sql в базу данных cosmos. Когда я снова запускаю конвейер фабрики данных, он снова копирует все строки и дублирует данные.
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, но так как у источника нет Id, он генерирует один, а во 2-мСкопируйте также, он генерирует новые идентификаторы и добавляет новые документы.
То, как мы делаем это в SQL, мы копируем во временную таблицу, а затем меняем имя таблицы на оригинальную после полной копии. Но Cosmos db не поддерживает переименование контейнера: https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/19466575-add-ability-to-rename-databases-and-collections
Любая помощь будет высоко оценена. Нам нравится Cosmos db, и мы будем любить его использовать.