2017-07-04 11 views
2

Azure関数でDocumentDB入力バインディングを使用しています。変調記号を持つDocumentDB入力バインディングのsqlQueryが関数の失敗を引き起こします。

今日、次の問合せをsqlQueryとして指定しました。

SELECT c.id, c.created_at FROM c 
WHERE {epoch} - c.created_at_epoch >= 86400*31 
AND (CEILING({epoch}/86400) - CEILING(c.created_at_epoch/86400)) % 31 = 0 

その後、機能が起動されたときに次のエラーが発生しました。

2017-07-04T10:31:44.873 Function started (Id=95a2ab7a-8eb8-4568-b314-2c3b04a0eadf) 
2017-07-04T10:31:49.544 Function completed (Failure, Id=95a2ab7a-8eb8-4568-b314-2c3b04a0eadf, Duration=4681ms) 
2017-07-04T10:31:50.106 Exception while executing function: Functions.Bonus. Microsoft.Azure.WebJobs.Host: The '%' at position 148 does not have a closing '%'. 

sqlQuery内に変調記号を使用したいとします。私は何ができますか?

よろしくお願いいたします。


2017-07-15(JST)Append。

今日、この問題を回避するために別のクエリを実行してみました。

SELECT c.id, c.created_at FROM c 
WHERE {epoch} - c.created_at_epoch >= 86400*31 AND 
(CEILING({epoch}/86400) - CEILING(c.created_at_epoch/86400)) - 
(31 * 
    CEILING(
     (CEILING({epoch}/86400) - CEILING(c.created_at_epoch/86400)) 
     /31 
    ) 
) = 0 

は、念のために、私はコスモスDBにエポック= 1499218423を指定され、このクエリを試してみました。

SELECT c.id, c.created_at FROM c 
WHERE 1499218423 - c.created_at_epoch >= 86400*31 AND 
(CEILING(1499218423/86400) - CEILING(c.created_at_epoch/86400)) - 
(31 * 
    CEILING(
     (CEILING(1499218423/86400) - CEILING(c.created_at_epoch/86400)) 
     /31 
    ) 
) = 0 

結果は次のとおりです。

[ 
    { 
    "id": "70251cbf-44b3-4cd9-991f-81127ad78bca", 
    "created_at": "2017-05-11 18:46:16" 
    }, 
    { 
    "id": "0fa31de2-4832-49ea-a0c6-b517d64ede85", 
    "created_at": "2017-05-11 18:48:22" 
    }, 
    { 
    "id": "b9959d15-92e7-41c3-8eff-718c4ab2be6e", 
    "created_at": "2017-05-11 19:01:43" 
    } 
] 

いいですね。次に、sqlQueryとして指定し、次のキュー・データでテストします。

{"epoch":1499218423} 

機能コードは以下のとおりです。

module.exports = function (context, myQueueItem) { 
    context.log(context.bindings.members, myQueueItem); 
    context.done(); 
}; 

私は次の結果を見ました。

2017-07-05T03:00:47.158 Function started (Id=e4d060b5-3ddc-4271-bf91-9f314e7e1148) 
2017-07-05T03:00:47.408 [] { epoch: 1499871600 } 
2017-07-05T03:00:47.408 Function completed (Success, Id=e4d060b5-3ddc-4271-bf91-9f314e7e1148, Duration=245ms) 

(context.bindings.membersとして)バインディングの結果に違いがあります。

この違いが表示されるのはなぜですか?

関連質問:Deferences among the Azure CosmosDB Query Explorer's results and the Azure Functions results

答えて

0

私はのSQLQuery内の変調シンボルを使用します。私は何ができますか?

Azure関数設定の変調記号(%)を使用して、アプリの設定値を取得します。あなたの問題では、次のようにアプリ設定でアイテムを追加することをお勧めします。

enter image description here

その後、次のようにクエリに代わり%の%modulationsymbol%使用することができます。

SELECT c.id, c.created_at FROM c 
WHERE {epoch} - c.created_at_epoch >= 86400*31 
AND (CEILING({epoch}/86400) - CEILING(c.created_at_epoch/86400)) %modulationsymbol% 31 = 0 
+0

ありがとうございました。私はそれを試してみます。しばらくお待ちください... – ytnobody

+0

私はそれを試して、エラーが解決されました。しかし、CosmosDBクエリーエクスプローラの結果とAzure関数の結果には違いがあります。私はこの論点について別の質問を作成するつもりです。ありがとうございました。 – ytnobody

+0

私はこの違いについて別の質問をしました。[Azure CosmosDBクエリエクスプローラの結果とAzure関数の結果の違い](https://stackoverflow.com/questions/44903632/sqlquery-of-documentdb-input-bindings-with-modulation-symbol-makes-functions-fa) – ytnobody

関連する問題