Как работать с функцией OUTER JOIN в CosmosDB? - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть запрос, который использует JOINS для запроса моих данных Космоса, запрос выглядит следующим образом:

SELECT c.id, c.ItemLevel, c.ItemNo, bv.variantId, bv.variantDescription AS title, c.BasicData.presentation.articleLongDescription[0] AS Description, c.BasicData.presentation.articleCompositionList.origin, bv.size.sizeName, c.DetailedData.locales[0].images ?? c.BasicData.asset.assets[0].locations[1].path AS images, 'SE' AS country, 'SEK' AS currency, 'en' AS language, l.categories AS categories, c.PriceData.WhitePrice, c.PriceData.RedPrice, c.PriceData.DiscountPercentage, c.PriceData.TypeOfDiscount
FROM c
JOIN bv IN c.BasicData.base.sales.variants
JOIN l IN c.DetailedData.locales
WHERE c.brand = 'XXX'
AND l.country = 'SE'
AND l.language = 'en'
AND c.ItemNo = 'XXX'
AND c.Season = 'XXX'
AND c.Consumer = 'XXX'

Этот запрос будет работать, пока в моих JOINS есть данные, но если, например, c. Детальные данные равны NULL, тогда они ничего не будут возвращать.

Как я могу заставить их возвращать любые доступные данные и просто опускать те, которые не существуют.

Я знаю, что могу использовать c .foo ?? c .bar, но это работает, только если свойство существует, а не весь объект, используемый в JOIN.

Этот вопрос о JOIN не зависит от структуры документа

1 Ответ

0 голосов
/ 27 февраля 2020

По моему опыту, Left Join не поддерживается в космосе дБ. Очевидно, что один набор данных присоединяется к пустому массиву, в результате получается пустой набор данных, вы только ничего не могли получить! Это не реляционная база данных.

1. https://social.msdn.microsoft.com/Forums/en-US/a08a8029-1bd7-4e70-8408-ddb6e268d9ac/left-join-in-azure-cosmosdb-sql-api?forum=azurecosmosdb

2. https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/37949650-support-left-join

Итак, я ' боюсь, вам нужно запросить данные, разделенные между BasicData и DetailedData, а затем попытаться объединить данные так, как вы хотите.

Или вы можете использовать инструмент передачи (например, ADF), чтобы сгладить данные базы данных космоса в sql дБ. Так что вы можете использовать реляционные дБ sql как обычно.

...