https://docs.influxdata.com/influxdb/cloud/process-data/get-started/
Завдання InfluxDB - це запланований сценарій Flux, який бере потік вхідних даних, певним чином їх модифікує або аналізує, потім зберігає змінені дані в новому bucket або виконує інші дії.
У цій статті описано основне завдання InfluxDB, яке зменшує вибірку даних і зберігає їх у новому bucket .
Кожне завдання InfluxDB потребує наступних чотирьох компонентів. Їх форма та порядок можуть відрізнятися, але всі вони є важливими частинами завдання.
- Task options
- A data source
- Data processing or transformation
- A destination
Параметри завдання означують конкретну інформацію про завдання. Наведений нижче приклад ілюструє, як параметри завдань означуються у вашому сценарії Flux:
option task = {
name: "cqinterval15m",
every: 1h,
offset: 0m,
concurrency: 1,
}
ДивTask configuration options для детальної інформації про кожну опцію.
При створенні завдання в інтерфейсі користувача InfluxDB (UI) параметри завдань визначаються у полях форми.
Визначте джерело даних, використовуючи функцію Flux’s from()
function або будь-яку іншу Flux input functions.
Для зручності розгляньте можливість створення змінної, яка включає дані джерела з необхідним діапазоном часу та усі відповідні фільтри.
data = from(bucket: "example-bucket")
|> range(start: -task.every)
|> filter(fn: (r) =>
r._measurement == "mem" and
r.host == "myHost"
)
Параметри завдання передаються як частина запису опції task
, на них можна посилатися у вашому сценарії Flux. У наведеному вище прикладі діапазон часу визначається як -task.every
.
task.every
- це крапкове позначення, яке посилається на властивість every
запису опції task
. every
визначається як 1h
, тому -task.every
дорівнює -1h
.
Використання параметрів завдання для визначення значень у вашому сценарії Flux може спростити повторне використання вашого завдання.
Метою завдань є обробка чи перетворення даних якимось чином. Що саме відбудеться і в якій формі прийматимуться вихідні дані, залежить від вас та вашого конкретного випадку використання.
Щоб врахувати латентність даних (наприклад, передачу даних із ваших крайніх пристроїв), використовуйте зсув у своєму завданні. Наприклад, якщо ви встановите інтервал завдання на годину з параметрами every: 1h
і offset: 5m
, завдання виконується через 5 хвилин після інтервалу завдання, але запит now()
буде вказувати час вказаний за точною годиною.
Наведений нижче приклад ілюструє завдання, яке зменшує вибірку даних шляхом обчислення середнього значення встановлених інтервалів. В якості джерела даних використовується змінна data
, визначена вище. Потім він переглядає дані з інтервалом у 5 хвилин і обчислює середнє значення кожного вікна, використовуючи функцію aggregateWindow()
function.
data
|> aggregateWindow(
every: 5m,
fn: mean
)
See Common tasks for examples of tasks commonly used with InfluxDB.
У переважній більшості випадків використання завдань, як тільки дані трансформуються, їх потрібно кудись відправити та зберегти. Це може бути окреме bucket або інший measurement.
У наведеному нижче прикладі використовується функція to()
function для передачі перетворених даних в інший сегмент :
// ...
|> to(bucket: "example-downsampled", org: "my-org")
Для того, щоб записати дані в InfluxDB, ви повинні мати стовпці _time
, _measurement
, _field
і _value
.
Нижче наведено сценарій завдання, який поєднує всі компоненти, описані вище:
// Task options
option task = {
name: "cqinterval15m",
every: 1h,
offset: 0m,
concurrency: 1,
}
// Data source
data = from(bucket: "example-bucket")
|> range(start: -task.every)
|> filter(fn: (r) =>
r._measurement == "mem" and
r.host == "myHost"
)
data
// Data transformation
|> aggregateWindow(
every: 5m,
fn: mean
)
// Data destination
|> to(bucket: "example-downsampled")