2016-08-25 4 views
1

私はこれを使用して、総計カウントと期間合計である一意のキーのマップを累積します。現在は、すべての入力で 'reduce inputs'を使用して実行されます。オブジェクトの大きなストリームに対して「入力を減らす」フィルタを適用するにはどうすればよいですか?

reduce inputs as $r 
({}; 
("Pipeline:" + $r.m."topic.type") as $topic 
| ("Channel:" + $r.channel) as $channel 
| ("Campaign:" + $r.campaign) as $campaign 
| ("Cellcode:" + $r.cellcode) as $cellcode 
| ("Tracking:" + $r.tracking) as $tracking 
| ("Template:" + $r.m."template.id") as $template 
| ("Event:" + $r.name) as $event 
| ("Reason:" + $r.reason) as $reason 
| ($r.duration|tonumber) as $duration 
| (($topic + ":" + $channel + ":" + $campaign + ":" + $cellcode + ":" + $tracking + ":" + $template + ":" + $event + ":" + $reason) as $key 
    | .[$key][0] += 1 | .[$key][1] += $duration) 

私は私のチェック、ために「($ r.type == 『AUDIT_CHANNEL』)を選択し」合格エントリのみを越え減らして済むように選択()フィルタをどこに置くかを見つけ出すことはできませんこのテストデータで「AUDIT_SYSTEM」イベント:2「タイプ」スキップする

{"type":"AUDIT_CHANNEL","name":"DROPPED","reason":"INVALID_MAIL_META_DATA","start":"1472083067058","duration":"91","end":"1472083067149","dc":"dev","pool":"raptor-app","host.name":"L-SEA-10002721","host.ip":"10.236.67.80","rlogid":"tfsqiu.dvw9%3FJ*P%40G*25671246-156befd00b2-0x293","channel":"EMAIL","m":{"audited":"1472083067058","created":"1472083066974","enabled":"true","entity.common.version":"1","template.id":"2840df6d-d9e8-4f27-e8b5-918c122d4561","template.version":"17","topic.curname":"eddude-default-topic","topic.curtype":"DEFAULT","topic.dc":"LVS","topic.name":"eddude-default-topic","topic.part":"5","topic.type":"DEFAULT"},"id":"0AEC4350-1C6E2FC9B80-0156BEF9ED92-0000000000000003","campaign":"999","contract":"a5872a5c-8912-dd63-583f-61fa8db3efde","user":1276847275,"cellcode":"","age":"175"} 

{"type":"AUDIT_SYSTEM","name":"ROTATED","start":"1472083081033","duration":"0","end":"1472083081033","dc":"dev","pool":"raptor-app","host.name":"L-SEA-10002721","host.ip":"10.236.67.80","rlogid":"tfsqiu.dvw9%3FJ*P%40G*25671246-156befd3749-0xce"} 

{"type":"AUDIT_SYSTEM","name":"ROTATED","start":"1472083141034","duration":"0","end":"1472083141034","dc":"dev","pool":"raptor-app","host.name":"L-SEA-10002721","host.ip":"10.236.67.80","rlogid":"tfsqiu.dvw9%3FJ*P%40G*25671246-156befe21aa-0xce"} 

{"type":"AUDIT_CHANNEL","name":"RECEIVED","start":"1472083158860","duration":"109","end":"1472083158969","dc":"dev","pool":"raptor-app","host.name":"L-SEA-10002721","host.ip":"10.236.67.80","rlogid":"tfsqiu.dvw9%3FJ*P%40G*25671246-156befe674c-0x10f","channel":"EMAIL","m":{"audited":"1472083158860","created":"1472083158860","enabled":"true","entity.common.version":"1","template.id":"2840df6d-d9e8-4f27-e8b5-918c122d4561","template.version":"17","topic.curname":"eddude-default-topic","topic.curtype":"DEFAULT","topic.dc":"LVS","topic.name":"eddude-default-topic","topic.part":"5","topic.type":"DEFAULT"},"id":"0AEC4350-1C6E2FC9B80-0156BEF9ED92-0000000000000004","campaign":"999","contract":"a5872a5c-8912-dd63-583f-61fa8db3efde","user":1276847275,"cellcode":"","age":"109"} 

を私はなど、削減の内側に、削減の前でそれを入れてみましたが、私はある所望の出力を得ることはありません:

{ 
    "Pipeline:DEFAULT:Channel:EMAIL:Campaign:999:Cellcode::Tracking::Template:2840df6d-d9e8-4f27-e8b5-918c122d4561:Event:DROPPED:Reason:INVALID_MAIL_META_DATA": [ 
    1, 
    91 
    ], 
    "Pipeline:DEFAULT:Channel:EMAIL:Campaign:999:Cellcode::Tracking::Template:2840df6d-d9e8-4f27-e8b5-918c122d4561:Event:RECEIVED:Reason:": [ 
    1, 
    109 
    ] 
} 

私はperforする必要がありますかフィルタリングを実行していない状態にフィルタをかけることはできませんか?

Btwは、この入力が数百のレコードの巨大なストリームであり、数百のユニークな「キー」が蓄積されるために計算されるものとします。

答えて

1

inputsは、入力されたすべての入力に対して結果を生成します。 。どのような要件 `[$キーについて -

reduce (inputs | select(.type == "AUDIT_CHANNEL")) as $r ({}; 
    ([ 
     "Pipeline", $r.m."topic.type", 
     "Channel", $r.channel, 
     "Campaign", $r.campaign, 
     "Cellcode", $r.cellcode, 
     "Tracking", $r.tracking, 
     "Template", $r.m."template.id", 
     "Event", $r.name, 
     "Reason", $r.reason 
    ] | join(":")) as $key 
    | .[$key] |= [ .[0]+1, .[1]+($r.duration|tonumber) ] 
) 
+0

ジェフ:

reduce (inputs | select(.type == "AUDIT_CHANNEL")) as $r ... 

が、私はそうのようなあなたのフィルタを記述します。あなたはそこにあなたのフィルタを置くことができるようにタイプによってこれらの入力をフィルタリングします] [0] + = 1 | 。[$ key] [1] + = $ duration'? – peak

+0

ああ、ありがとう、私はそれが蓄積されていたことに気付かなかった。 –

+0

すごくおかげで、そのトリックは完璧でした。 – redgiant

関連する問題