2017-07-04 40 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)追加。

今天,我嘗試了另一個查詢以避免此問題。

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 

爲了以防萬一,我試着在宇宙數據庫上指定了epoch = 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(); 
}; 

Afetrwards,我看到下面的結果。

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

我創建了另一個關於這種差異的問題。[天藍色CosmosDB查詢瀏覽器的結果中Deferences和天青函數結果](https://stackoverflow.com/questions/44903632/sqlquery-of-documentdb-input-bindings-with-modulation-symbol-makes-functions-fa) – ytnobody

相關問題