influxDB’de Efsane Fonksiyonlar

Yunus Emre Demir
2 min readMay 23, 2021

--

  1. Gösterimdeki istenmeyen sütunları sil.
|> drop(columns:["col1","col2"])

2. Gösterimde istenen sütunları göster.

|> keep(columns:["col1","col2"])

3. Pivot table kullan. satır sütun bilgisini ve içeriği söylüyoruz. ilgili içerikle bir tablo oluşturuyor. Satırlarım saat bilgisi olsun, sütunlarımda field bilgisi olsun. Aynı saate ait değerler yan yana yazılmış olacak şekilde bir tablo oluşturulacaktır. Bunun hazır haldeki fonksiyonu aşağıdaki gibidir.

|> pivot(
rowKey:["_time"],
columnKey:["_field"]
valueColumn:["_value"]
)

4. _field’ların column olarak gösterilmesi

import "influxdata/influxdb/schema"
|> schema.fieldsAsCols()

5. Birden fazla sorgu sonucunu tutmak ve göstermek.

... query ...
|> yield(name:"query1-table")
... query ...
|> yield(name:"guery2-table")

6. Bir Buckettaki measurementler, taglar, _fieldları listelemek için aşağıdaki kodlar incelenebilir. (Bunları zaten influxDB’nin sunduğu ara yüzde görüyoruz. Eğer Grafana ile bunları görselleştirmek istenilirse bu bilgi lazım olacak.) Daha fazla bilgi için kaynakça kısmında ki linke gidilmeli.

import "influxdata/influxdb/schema"schema.measurements(bucket: "pc-inf")
|> yield(name: "measurements-table")
schema.fieldKeys(bucket: "pc-inf")
|> yield(name: "fieldKeys-table")
schema.tagKeys(bucket: "pc-inf")
|> yield(name: "tagKeys-table")

7. time’lar arası kaç saniye olduğu bilgisini gözünle gözleyecek misin? Tabiki hayır, elapsed() fonksiyonu birbiri ardına olan 2 time’ın farkını alıp (extradan oluşturduğu bir kolonda) sunmaktadır. Bu fonksiyon ile kaydedilen verilerin istenilen sürede ve sıklıkta kayıt yapıp yapmadığı kolayca gözlemlenmiş olur. Aşağıdaki iki fonksiyonda aynı işi yapar. Yani Default değerleri aşağıdaki gibidir.

elapsed()
elapsed( unit: 1s, timeColumn: "_time", columnName: "elapsed" )

8. Join: 2 ayrı sorgu sonucunun birleştirilmesi.

pc_inf = from(bucket: "pc-inf")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "win_cpu")
|> filter(fn: (r) => r["_field"] == "Percent_DPC_Time")
|> filter(fn: (r) => r["instance"] == "0")
|> timedMovingAverage(every: 1m, period: 1m)
direct = from(bucket: "direct")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "win_cpu")
|> filter(fn: (r) => r["_field"] == "Percent_DPC_Time")
|> filter(fn: (r) => r["instance"] == "0")
join(
tables: {pc_inf: pc_inf, direct: direct},
on: ["_time", "_field"]
)

Kaynakça:

--

--