我正在尋找一些幫助來增加我的 jq-foo,并且可以使用一些指導。我有一些使用 JQ 撰寫腳本的 etl 作業,我想看看是否有辦法使運行在 CPU 利用率和/或速度方面更高效。
這是一個示例有效負載:
{
"timestamp": 1636601959,
"uniqueId": "Foo",
"value": 10
},
{
"timestamp": 1636601859,
"uniqueId": "Bar",
"value": 13
}
我想做一些類似(偽代碼)的事情:
if [ (epoch 15 minutes ago) -le timestamp ]; then
name=uniqueId; value_total=value(total); uniqueId_count=(uniqueId(count_total))
fi
現在我做類似(偽代碼)的事情:
for jq[timestamps] in $(json); do
if [ (epoch 15 minutes ago) -le timestamp ]; then
name=uniqueId; value_total=(value_total value); uniqueId_count=(uniqueId_count 1).
fi
done
有沒有辦法在不使用 for 回圈通過反復呼叫來迭代每個物件的情況下簡化它jq 'select() ...'?
uj5u.com熱心網友回復:
如果您去掉物件之間的逗號或用陣列括號括起整個輸入(以獲得正確的 JSON),那么您可以這樣做(使用樣式-s選項{}{}{},或洗掉[{],{},{}]樣式):
jq -s --argjson delta $((15*60)) --argjson addvalue 10 '
(now - $delta) as $pivot
| map(select(.timestamp >= $pivot))
| group_by(.uniqueId)
| map({
name: first.uniqueId,
value_total: map(.value) | (add $addvalue),
uniqueId_count: length
})
'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/360327.html
上一篇:隨著用戶活動的增加,查詢變慢
下一篇:多串列理解vs單for回圈
