背景
Cosmos DB に対して SQL 調査していた際に出たエラーの対処記録
具体的なエラーは以下
method:
container_proxy.query_items
SQL:
- aggregation を利用 (AVG)
Query contained NonValueAggregate, which the calling client does not support.
ActivityId: {ActivityId}, Microsoft.Azure.Documents.Common/2.14.0
Code: BadRequest
Message: Query contains 1 or more unsupported features. Upgrade your SDK to a version that does support the requested features:
Query contained NonValueAggregate, which the calling client does not support.
ActivityId: {ActivityId}, Microsoft.Azure.Documents.Common/2.14.0
結論
partition_key
をきちんと指定してやる
そもそも、指定してないとパフォーマンスに影響がある
今回は、query_items() だったが、他のメソッドでも同じ
詳細
エラーメッセージ的には、SDK update?
最新にしても特に変わらず。
Azure Portal では正常に動くのも確認。
ってことで、以下が疑われる
- SDK の問題
- 使い方の問題
で、こっちを調べてみたら解決
partition_key を省略するとどうなるのか?
ドキュメントを見てみると、aio の場合、省略すると、cross-partition query になるって書いてある。
しかしながら enable_cross_partition_query
は、aio には存在しない
- aio では、エラーになる。以下で、エラーについて記述してた
では、そもそも、cross_partition_query
ってなに?って話だが・・ 以下を見ると、
- パーティションを横断してクエリを実行するってこと
何故、enable_cross_partition_query が、aio にないのか?
指定してないなら、cross にするよーって話。ドキュメントに記載の話
何故、aio で、cross_partition_query がダメなのか?
省略してても、普通に動く query
はあることから、
Aggregation Query だから unsupported ってことだと思われる。
それについて根拠は見つけられなかったので、とりあえず今回は諦め
公式ドキュメント
SDK reference of query_items()
- aio 用
参考
エラー内容に関連した github issues
それっぽかったけど、2019 なんで、片付いている印象
genspark に対処法を聞いてみた結果
非常にいい感じなんだけど、答えまでは行きつけてない
Cross Partition Query について
あとがき
サンプルを元にやってたから、partition key 指定してなかったことが多かったけど、
ちゃんと設定していこうと改めて思いましたとさ