先日あたりからAzure FunctionsのCosmosDB input bindingsを使っていて、いくつかはまりどころのような挙動に出くわしましたので、その説明と対処法を紹介していきます。
sqlQueryで剰余演算子(Modulation Symbol)がそのまま使えない
例えば以下のようなQueryをCosmosDBに投げるとします。
1 | SELECT c.id FROM c WHERE c.level % 20 |
このクエリを直接クエリエクスプローラで実行する場合、期待する結果が得られます。
ところがこのクエリをAzure FunctionsのCosmosDB input bindingsにsqlQueryとして指定した場合、以下のようなエラーがでてしまい、期待した動作をしません。
1 | 2017-07-05T16:45:43.113 Exception while executing function: Functions.MyFunction. Microsoft.Azure.WebJobs.Host: The '%' at position 34 does not have a closing '%'. |
理由
実はsqlQueryの仕様として、%
というのはアプリケーション設定の値を参照するために使う記号でして、%myappSetting%
のような感じで使うものだったんですね。
そのため、単独で%
が登場すること自体があってはならない、と、そういうことが理由となっています。
対処
対処法の一つとして、アプリケーション設定値に%
を設定して、それを使えばよい、というものがあります。
上記画像のように、例えばmodulationsymbol
というアプリケーション設定値を定義しておき、sqlQuery側では以下のように%
を%modulationsymbol%
に置き換えることで、期待通りの結果を得ることができます。
1 | SELECT c.id FROM c WHERE c.level %modulationsymbol% 20 |
あまりカッコよくはないですが、致し方がない感じはしますね。