В настоящее время мы используем блоки данных Azure в качестве слоя преобразования, и преобразованные данные загружаются в базу данных Cosmos через соединитель.
Сценарий:
У нас есть 2 файла в качестве исходных файлов.
1-й файл содержит имя, возраст
2-й файл содержит имя, штат, страну
В Космосе я создал коллекцию, используя id, ключ раздела
В блоках данных я загружаю эти 2 файла как Dataframe и создаю временную таблицу для запроса содержимого.
Я запрашиваю содержимое из первого файла [выберите имя как идентификатор, имя, возраст из файла] и загружаю его в Cosmos Collection.
Из второго файла. Я использую [выберите имя в качестве идентификатора, штата, страны] и загружаю в ту же коллекцию, ожидая, что содержимое из второго файла будет вставлено в ту же коллекцию в том же документе на основе поля идентификатора.
Проблема здесь в том, что когда я загружаю содержимое из второго файла, атрибут 'age' из первого файла удаляется, и в документе космос видны только идентификатор, имя, штат и страна. Это происходит потому, что я использую UPSERT в блоках данных для загрузки в Cosmos.
Когда я меняю UPSERT на INSERT или UPDATE, он выдает ошибку, которая говорит: «Ресурс с идентификатором уже существует»
Подключение базы данных к Космосу:
val configMap = Map(
"Endpoint" -> {"https://"},
"Masterkey" -> {""},
"Database" -> {"ods"},
"Collection" -> {"tval"},
"preferredRegions" -> {"West US"},
"upsert" -> {"true"})
val config = com.microsoft.azure.cosmosdb.spark.config.Config(configMap)
Есть ли способ вставить атрибуты из второго файла без удаления атрибута, который уже присутствует. Я не использую операцию JOIN, поскольку вариант использования не подходит для использования.