Используйте этап фильтра в потоке данных, чтобы удалить сообщения, соответствующие условию. Если выражение фильтра оценивается как true, сообщение удаляется. Когда выражение оценивается как false, сообщение проходит до следующего этапа.
Можно определить несколько правил фильтра. Каждое правило задает поля ввода и логическое выражение. Правила используют логику OR: если любое правило оценивается как true, сообщение удаляется.
Каждое правило фильтра имеет следующие свойства:
| Недвижимость |
Обязательный |
Описание |
inputs |
Да |
Список путей полей для чтения из входящего сообщения. Назначенные позиционные переменные: первый вход является $1, второй — $2и т. д. |
expression |
Да |
Логическое выражение вычисляется по каждому сообщению. Если установлено значение true, сообщение удаляется. |
description |
Нет |
Удобочитаемое пользователем описание правила фильтра. |
Использование последнего известного значения
Дополните ввод ? $last, чтобы использовать последнее известное значение, если поле отсутствует в текущем сообщении. Этот подход полезен для разреженных данных, где не каждое сообщение содержит каждое поле.
Примеры
Фильтрация по пороговой значению
Удалите сообщения, в которых температура составляет 20 или ниже:
В разделе «Преобразование (необязательно)» выберите «Фильтр»>«Добавить».
Введите следующие параметры:
| Setting |
Описание |
| Условие фильтра |
temperature <= 20 |
| Описание |
Падение значений низкой температуры |
В поле условия фильтра введите значение @ или нажмите CTRL+ПРОБЕЛ, чтобы выбрать точки данных из выпадающего списка.
Нажмите кнопку "Применить".
{
"operationType": "BuiltInTransformation",
"builtInTransformationSettings": {
"filter": [
{
"inputs": [
"temperature"
],
"expression": "$1 <= 20"
}
]
}
}
builtInTransformationSettings: {
filter: [
{
inputs: [
'temperature'
]
expression: '$1 <= 20'
}
]
}
Это важно
Использование манифестов развертывания Kubernetes не поддерживается в рабочих средах и должно использоваться только для отладки и тестирования.
builtInTransformationSettings:
filter:
- inputs:
- temperature
expression: "$1 <= 20"
Фильтрация с последним известным значением
Используйте последнее известное значение температуры, если текущее сообщение не включает его. Удалите сообщения, в которых последняя известная температура составляет 20 или ниже:
В поле условия фильтра введите @temperature ? $last <= 20.
{
"operationType": "BuiltInTransformation",
"builtInTransformationSettings": {
"filter": [
{
"inputs": [
"$source.temperature ? $last"
],
"expression": "$1 <= 20"
}
]
}
}
builtInTransformationSettings: {
filter: [
{
inputs: [
'temperature ? $last'
]
expression: '$1 <= 20'
}
]
}
Это важно
Использование манифестов развертывания Kubernetes не поддерживается в рабочих средах и должно использоваться только для отладки и тестирования.
builtInTransformationSettings:
filter:
- inputs:
- temperature ? $last
expression: "$1 <= 20"
Фильтрация с несколькими условиями
Пропустить сообщения, где произведение температуры и влажности равно 100 000 или больше.
В поле условия фильтра введите @temperature * @humidity >= 100000.
{
"operationType": "BuiltInTransformation",
"builtInTransformationSettings": {
"filter": [
{
"inputs": [
"temperature.Value",
"humidity.Value"
],
"expression": "$1 * $2 >= 100000"
}
]
}
}
builtInTransformationSettings: {
filter: [
{
inputs: [
'temperature.Value'
'humidity.Value'
]
expression: '$1 * $2 >= 100000'
}
]
}
Это важно
Использование манифестов развертывания Kubernetes не поддерживается в рабочих средах и должно использоваться только для отладки и тестирования.
builtInTransformationSettings:
filter:
- inputs:
- temperature.Value
- humidity.Value
expression: "$1 * $2 >= 100000"
Фильтрация с обогащенными данными
Если вы настроили набор данных обогащения, вы можете использовать обогащенные поля в условиях фильтра. Например, выполните фильтрацию по пределу, связанному с устройством, из набора данных системы хранения состояний:
В настоящее время обогащённая фильтрация недоступна в интерфейсе операций.
{
"operationType": "BuiltInTransformation",
"builtInTransformationSettings": {
"datasets": [
{
"key": "device_limits",
"inputs": [
"$source.deviceId",
"$context(device_limits).deviceId"
],
"expression": "$1 == $2"
}
],
"filter": [
{
"inputs": [
"temperature",
"$context(device_limits).maxTemperature"
],
"expression": "$1 <= $2"
}
]
}
}
builtInTransformationSettings: {
datasets: [
{
key: 'device_limits'
inputs: [
'$source.deviceId'
'$context(device_limits).deviceId'
]
expression: '$1 == $2'
}
]
filter: [
{
inputs: [
'temperature'
'$context(device_limits).maxTemperature'
]
expression: '$1 <= $2'
}
]
}
Это важно
Использование манифестов развертывания Kubernetes не поддерживается в рабочих средах и должно использоваться только для отладки и тестирования.
builtInTransformationSettings:
datasets:
- key: device_limits
inputs:
- $source.deviceId
- $context(device_limits).deviceId
expression: "$1 == $2"
filter:
- inputs:
- temperature
- $context(device_limits).maxTemperature
expression: "$1 <= $2"
В этом примере происходит удаление сообщений, в которых температура превышает максимальное значение для конкретного устройства из хранилища состояний.
Несколько правил фильтра
Можно определить несколько правил фильтра. Все правила используют логику OR: если любое правило оценивается как true, сообщение удаляется:
В разделе "Преобразование (необязательно)" выберите "Фильтр>Добавить несколько раз, чтобы добавить дополнительные правила фильтрации.
{
"operationType": "BuiltInTransformation",
"builtInTransformationSettings": {
"filter": [
{
"inputs": ["temperature"],
"expression": "$1 <= 20",
"description": "Drop low temperatures"
},
{
"inputs": ["humidity"],
"expression": "$1 >= 80",
"description": "Drop high humidity readings"
}
]
}
}
builtInTransformationSettings: {
filter: [
{
inputs: ['temperature']
expression: '$1 <= 20'
description: 'Drop low temperatures'
}
{
inputs: ['humidity']
expression: '$1 >= 80'
description: 'Drop high humidity readings'
}
]
}
Это важно
Использование манифестов развертывания Kubernetes не поддерживается в рабочих средах и должно использоваться только для отладки и тестирования.
builtInTransformationSettings:
filter:
- inputs:
- temperature
expression: "$1 <= 20"
description: Drop low temperatures
- inputs:
- humidity
expression: "$1 >= 80"
description: Drop high humidity readings
Связанный контент