#azure #azure-cosmosdb #azure-cosmosdb-sqlapi
Вопрос:
Я получаю данные из базы данных CosmosDB. Документ содержит элементы массива и элементы, не являющиеся массивами.
«Записи»: { «Число»: «1» } . . «Записи»: [ { «Число» : «2», } { «Число» : «3», } ]
Я попытался использовать СОЕДИНЕНИЕ для повторения записей, но 1-я запись не извлекается.
ВЫБЕРИТЕ r[«Число»] из c, ПРИСОЕДИНИТЕ r в c.Записи
Ожидаемый результат составляет
{ «Число» : «1» } { «Число» : «2» } { «Число» : «3» }
Пожалуйста, помогите помочь.
Комментарии:
1. Вы создали схему, которая отличается между документами (в некоторых есть один элемент, в некоторых-массив элементов). Таким образом, ваше ОБЪЕДИНЕНИЕ не сработает. Я бы предложил провести рефакторинг вашей схемы, чтобы всегда иметь массив (даже с размером массива = 1), а затем повторить запрос. Что касается самого запроса, вы не поделились ничем конкретным, так что я могу только догадываться, в чем проблема…
2. Спасибо @DavidMakogon. Документы CosmosDB загружаются из XML-документов через ADF. Мы используем Cosmos в основном для хранения данных без схем. В этом случае нам нужно заставить XML-схему исправить содержимое массива.
3. Правильно — совершенно нормально относиться к Cosmos DB как к свободной от схем, но… это не означает, что ваши запросы будут работать правильно, когда у вас есть несколько схем для одних и тех же данных, как вы делаете здесь. Вам нужно будет либо преобразовать один формат в другой, чтобы все они совпадали для этих конкретных данных, либо использовать два запроса.