UPSERT / INSERT / UPDATE между Databricks to Cosmos - PullRequest
0 голосов
/ 23 апреля 2019

В настоящее время мы используем блоки данных 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, поскольку вариант использования не подходит для использования.

1 Ответ

0 голосов
/ 23 апреля 2019

Из расплывчатого воспоминания об этом вам нужно установить атрибут id в вашем фрейме данных, чтобы он соответствовал двум наборам данных. Если вы пропустите это поле, Cosmos создаст новую запись - что и происходит с вами.

Таким образом, если df1 и df2 имеют id = 1 в первой записи, то первая вставит ее, вторая обновит.

Но если это одна и та же запись, то объединение в Spark будет гораздо более эффективным.

...