【Microsoft Azure】Azure FunctionsでCosmos DBの複数コンテナを結合してデータを取得する方法【結論、なかった】

こんばんは。今週も引き続きもくもくとアプリ開発をしているわけですが、今週は特にMicrsoft AzureのCosmosDBと戦う一週間になりそうです。

色々と直感的でない(自分がCosmosDBの思想に馴染めていないだけか・・?)と思うところがありつまづきまくっていますので、そういったところを記事に残しておきたいと思います。

ということで、今日はAzure Functions上にデプロイしたAPIで、Cosmos DBの複数のコンテナからJOINなどを使って結合してデータを取得する方法がないか調べたので、その結果についてまとめておきます。

まず、Cosmos DBバインディングではダメ

どうやら、Azure FunctionsのCosmosDBバインディングはシングルコンテナの操作しか対応していないようで、複数コンテナのハンドルはできない模様。以下にディスカッションがあった。

https://docs.microsoft.com/en-us/answers/questions/240266/one-function-with-many-containers-in-cosmos-db.html

うーむ、他にあるのか、調べてみた。

結局、そんな方法はサポートされていないことがわかる

結局、いろんな記事を探したけど見つけられず、公式Docsで質問してみることにした。

すると1日で返答が返ってきた。

https://github.com/MicrosoftDocs/azure-docs/issues/79560

You can’t query multiple containers under any circumstances whether via the portal or the SDKs.

Cosmos DB is a NoSQL database. It does not support relational constructs like joins.

Worth checking out a few resources that can help you learn how to design for this type of database.

回答より

結論、CosmosDB(というか、NoSQL)の思想的に、そういった方法はそもそもサポートされていないとのこと。Azure Functionsに限らず、CosmosDB SDKやポータルを使ってもできないとのこと。

CosmosDBのデータモデルを工夫して、1つのコンテナ上で処理が簡潔するような作りにする必要がありそうです。

RDBの思想がまだまだ抜けないですね・・・勉強になりました。

追記:以下のStack Overflowでも議論がありましたね。同様の結論です。

https://stackoverflow.com/questions/62512550/how-to-query-from-two-containers-in-cosmos-db-sql-api

おしまい

この記事を気に入っていただけたらシェアをお願いします!
ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。