2016-07-01 3 views
0

ここで、vがその時間までに生成された部品の集計されたカウンタである場合に生成される分を抽出しようとしています。タイムスタンプを使用しているとき、Azureストリーム分析クエリが結果セットを返さない

マイ紺碧のSQLクエリは

select 
x.fqn, 
(max(cast(y.arrayvalue.v as BIGINT))-(min(cast(y.arrayvalue.v as BIGINT)))) as ppm 
from 
(SELECT 
    TS.ArrayIndex, 
    TS.ArrayValue.FQN, 
    TS.ArrayValue.vqts 
FROM 
[EventHubInput] as hub  
timestamp by y.arrayvalue.t 
CROSS APPLY GetArrayElements(hub.timeseries) AS TS) as x 
cross apply GetArrayElements(x.vqts) AS y 
where x.fqn like '%Production%' and y.arrayvalue.q=192 
group by tumblingwindow(minute,1),x.fqn 

私の入力データは、私のクエリが結果を返さないこの

{ 
"timeSeries": [ 
{ 
    "fqn":"MyEnterprise.Gateways.GatewayE.CLX.Tags.StateBasic", 
     "vqts":[ 
       { 
       "v": "" , 
       "q": 192 , 
       "t":"2016-06-24T16:39:45.683+0000" 
       } 
    ] 
},    { 
    "fqn":"MyEnterprise.Gateways.GatewayE.CLX.Tags.ProductionCount", 
     "vqts":[ 
       { 
       "v": 264 , 
       "q": 192 , 
       "t":"2016-06-24T16:39:45.683+0000" 
       } 
    ] 
},    { 
    "fqn":".Gateways.GatewayE.CLX.Tags.StateDetailed", 
     "vqts":[ 
       { 
       "v": "" , 
       "q": 192 , 
       "t":"2016-06-24T16:39:45.683+0000" 
       } 
    ] 
}   ] 

のように見える、以下の通りです。 y.arrayvalue.t でタイムスタンプを削除し、group by節にy.arrayvalue.tを追加すると、何らかの結果が得られます。私は各イベントに1つ以上のタイムスタンプフィールドがあるので、おそらくこれが原因であることに気づいています。最初の配列のタイムデータをタイムスタンプに割り当てることができるかどうかを知りたかったのです。y [0] .t

答えて

2

現在のところ、Azure Stream Analyticsは配列内の値を超えるタイムスタンプをサポートしていません。だからあなたの質問への答えは "タイムスタンプに最初の配列の時間データを割り当てることが可能かどうか"はNOです。ここで

は、あなたが使用することができます回避策です:

まず、ステージングイベントハブにつのジョブと出力の入力メッセージをフラット化:

WITH flattenTS AS 
(
    SELECT 
     TS.ArrayIndex, 
     TS.ArrayValue.FQN, 
     TS.ArrayValue.vqts 
    FROM [EventHubInput] 
    CROSS APPLY GetArrayElements(hub.timeseries) AS TS 
) 
, flattenVQTS AS 
(
    SELECT 
     ArrayIndex 
     ,FQN 
     ,vqts.ArrayValue.v as v 
     ,vqts.ArrayValue.q as q 
     ,vqts.ArrayValue.t as t 
    FROM flattenTS TS 
    CROSS APPLY GetArrayElements(TS.vqts) AS vqts 
) 

SELECT * 
INTO [staging_eventhub] 
FROM flattenVQTS 

次に、平坦化されたメッセージを読むために別のジョブを使用しますそして、ウィンドウ集計を実行します。私たちは、単一のジョブで複数のステップとして、2つのジョブの上に組み合わせて、ステージングイベントのハブを回避することができます

SELECT 
    FQN 
    ,MAX(CAST(v as BIGINT))-MIN(CAST(v as BIGINT)) as ppm 
FROM [staging_eventhub] timestamp by t 
WHERE fqn LIKE '%Production%' and q=192 
GROUP BY tumblingwindow(minute,1), fqn 

をあなたは不思議に思うかもしれません。残念ながら、今日のCTEまたはサブクエリから選択すると、「タイムスタンプバイ」は使用できません。

関連する問題