Преобразование данных с помощью преобразований потока данных
Внимание
На этой странице содержатся инструкции по управлению компонентами Операций Интернета вещей Azure с помощью манифестов развертывания Kubernetes, которые доступны в предварительной версии. Эта функция предоставляется с несколькими ограничениями и не должна использоваться для рабочих нагрузок.
Юридические условия, применимые к функциям Azure, которые находятся в состоянии бета-версии, предварительной версии или иным образом еще не выпущены в общедоступной версии, см. на странице Дополнительные условия использования предварительных версий в Microsoft Azure.
Преобразования потоков данных можно использовать для преобразования данных в операциях Интернета вещей Azure. Элемент преобразования в потоке данных используется для вычисления значений для выходных полей. Можно использовать входные поля, доступные операции, типы данных и преобразования типов в преобразованиях потока данных.
Элемент преобразования потока данных используется для вычисления значений для выходных полей:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
]
output: 'ColorProperties.*'
expression: '($1 + $2) / 2'
Существует несколько аспектов, которые необходимо понять о преобразованиях:
- Ссылка на поля ввода: как ссылаться на значения из входных полей в формуле преобразования.
- Доступные операции: операции, которые можно использовать в преобразованиях. Например, добавление, вычитание, умножение и деление.
- Типы данных: типы данных, которые формула может обрабатывать и управлять ими. Например, целое число, плавающая точка и строка.
- Преобразования типов: преобразование типов данных между значениями поля ввода, вычислением формулы и полями выходных данных.
Поля ввода
В преобразованиях формулы могут работать со статическими значениями, такими как число, например 25 или параметры, производные от входных полей. Сопоставление определяет эти поля ввода, к которым может получить доступ формула. Каждое поле ссылается в соответствии с его порядком в списке входных данных:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
'*.Mid.Avg' // - $3
'*.Mid.Mean' // - $4
]
output: 'ColorProperties.*'
expression: '($1, $2, $3, $4)'
В этом примере преобразование приводит к массиву, содержаму значения [Max, Min, Mid.Avg, Mid.Mean]
. Примечания в файле YAML (# - $1
, # - $2
) являются необязательными, но они помогают уточнить связь между каждым свойством поля и ее ролью в формуле преобразования.
Типы данных
Различные форматы сериализации поддерживают различные типы данных. Например, JSON предлагает несколько примитивных типов: string, number, boolean и null. Он также включает массивы этих примитивных типов.
Когда приложение mapper считывает входное свойство, оно преобразует его во внутренний тип. Это преобразование необходимо для хранения данных в памяти, пока не будет записано в выходное поле. Преобразование в внутренний тип происходит независимо от того, совпадают ли форматы сериализации входных и выходных данных.
Внутреннее представление использует следующие типы данных:
Тип | Описание |
---|---|
bool |
Логическое значение true/false. |
integer |
Хранится как 128-разрядное целое число со знаком. |
float |
Хранится как 64-разрядное число с плавающей запятой. |
string |
Строка UTF-8. |
bytes |
Двоичные данные— строка 8-разрядных значений без знака. |
datetime |
UTC или локальное время с разрешением nanosecond. |
time |
Время дня с разрешением nanosecond. |
duration |
Длительность с разрешением nanosecond. |
array |
Массив всех типов, перечисленных ранее. |
map |
Вектор пар (ключ, значение) любых типов, перечисленных ранее. |
Поля входной записи
При чтении поля входной записи его базовый тип преобразуется в один из этих вариантов внутреннего типа. Внутреннее представление достаточно универсально, чтобы обрабатывать большинство типов входных данных с минимальным или без преобразования.
Для некоторых форматов используются суррогатные типы. Например, JSON не имеет datetime
типа и вместо этого сохраняет datetime
значения в виде строк, отформатированных в соответствии с ISO8601. Когда приложение карты считывает такое поле, внутреннее представление остается строкой.
Поля выходных записей
Приложение mapper предназначено для гибкого преобразования внутренних типов в типы выходных данных для размещения сценариев, в которых данные приходят из формата сериализации с ограниченной системой типов. В следующих примерах показано, как обрабатываются преобразования:
- Числовые типы: эти типы можно преобразовать в другие представления, даже если это означает потерю точности. Например, 64-разрядное число с плавающей запятой (
f64
) можно преобразовать в 32-разрядное целое число (i32
). - Строки к числам: если входящая запись содержит строку, например
123
, и выходное поле является 32-разрядным целым числом, средство сопоставления преобразует и записывает значение в виде числа. - Строки к другим типам:
- Если поле выходных данных имеет значение
datetime
, приложение mapper пытается проанализировать строку как ISO8601 отформатированнуюdatetime
. - Если поле выходных данных равно
binary/bytes
, средство сопоставления пытается десериализировать строку из строки в кодировке Base64.
- Если поле выходных данных имеет значение
- Логические значения:
- Преобразуется
0
/1
в значение, если выходное поле является числовым. - Преобразуется
true
/false
в значение, если выходное поле является строкой.
- Преобразуется
Использование формулы преобразования с типами
В сопоставлениях необязательная формула может указать способ обработки данных из входных данных перед записью в поле вывода. Если формула не указана, средство сопоставления копирует поле ввода в выходные данные с помощью правил внутреннего типа и преобразования.
Если указана формула, типы данных, доступные для использования в формулах, ограничены:
- Целые числа
- Числа с плавающей запятой
- Строки
- Логические значения
- Массивы предыдущих типов
- Отсутствующее значение
Map
и byte
не может участвовать в формулах.
Типы, связанные с временем (datetime
, time
и duration
) преобразуются в целые значения, представляющие время в секундах. После вычисления формул результаты хранятся во внутреннем представлении и не преобразуются обратно. Например, datetime
преобразованное в секунды, остается целым числом. Если значение будет использоваться в datetime
полях, необходимо применить явный метод преобразования. Пример преобразует значение в строку ISO8601, которая автоматически преобразуется в datetime
тип выходного формата сериализации.
Использование нерегулярных типов
Особые рекомендации применяются к типам, таким как массивы и отсутствующие значения.
Массивы
Массивы можно обрабатывать с помощью функций агрегирования для вычисления одного значения из нескольких элементов. Например, с помощью входной записи:
{
"Measurements": [2.34, 12.3, 32.4]
}
Сопоставление:
inputs: [
'Measurements' // - $1
]
output: 'Measurement'
expression: 'min($1)'
Эта конфигурация выбирает наименьшее значение из массива Measurements
для поля вывода.
Массивы также можно создать из нескольких отдельных значений:
inputs: [
'minimum' // - - $1
'maximum' // - - $2
'average' // - - $3
'mean' // - - $4
]
output: 'stats'
expression: '($1, $2, $3, $4)'
Это сопоставление создает массив, содержащий минимальный, максимальный, средний и средний.
Отсутствующее значение
Отсутствующее значение — это специальный тип, используемый в сценариях, например:
- Обработка отсутствующих полей во входных данных путем предоставления альтернативного значения.
- Условное удаление поля на основе его присутствия.
Пример сопоставления, использующего отсутствующее значение:
{
"Employment": {
"Position": "Analyst",
"BaseSalary": 75000,
"WorkingHours": "Regular"
}
}
Входная запись содержит BaseSalary
поле, но, возможно, это необязательно. Предположим, что если поле отсутствует, необходимо добавить значение из набора данных контекстуализации:
{
"Position": "Analyst",
"BaseSalary": 70000,
"WorkingHours": "Regular"
}
Сопоставление может проверить, присутствует ли поле во входной записи. Если поле найдено, выходные данные получают это существующее значение. В противном случае выходные данные получают значение из набора данных контекста. Например:
inputs: [
'BaseSalary' // - - - - - - - - - - - $1
'$context(position).BaseSalary' // - $2
]
output: 'BaseSalary'
expression: 'if($1 == (), $2, $1)'
Использует conversion
функцию if
, которая имеет три параметра:
- Первый параметр является условием. В этом примере проверяется, является ли
BaseSalary
поле входного поля (псевдонимом как$1
) отсутствующим значением. - Второй параметр является результатом функции, если условие в первом параметре имеет значение true. В этом примере это
BaseSalary
поле набора данных контекстуализации (псевдоним как$2
). - Третий параметр — это значение условия, если первый параметр имеет значение false.
Доступные функции
Потоки данных предоставляют набор встроенных функций, которые можно использовать в формулах преобразования. Эти функции можно использовать для выполнения распространенных операций, таких как арифметическое, сравнение и строковое манипулирование. Доступные функции:
Function | Description | Примеры |
---|---|---|
min |
Возвращает минимальное значение из массива. | min(2, 3, 1) возвращает 1 минимальное значение из массива. min($1) $1 |
max |
Возвращает максимальное значение из массива. | max(2, 3, 1) возвращает 3 максимальное значение из массива. max($1) $1 |
if |
Возвращается между значениями на основе условия. | if($1 > 10, 'High', 'Low') возвращает значение'High' , 10 если $1 больше , в противном случае'Low' |
len |
Возвращает длину символов строки или количество элементов в кортеже. | len("Azure") возвращает, len(1, 2, 3) возвращает 3 5 len($1) количество элементов в массиве.$1 |
floor |
Возвращает наибольшее целое число меньше или равно числу. | floor(2.9) возвращает 2 |
round |
Верните ближайшее целое число к числу, округляя полупутные случаи от 0,0. | round(2.5) возвращает 3 |
ceil |
Возвращает наименьшее целое число, большее или равное числу. | ceil(2.1) возвращает 3 |
scale |
Масштабирование значения от одного диапазона до другого. | scale($1, 0, 10, 0, 100) Масштабирует входное значение от диапазона от 0 до 10 до диапазона 0 до 100 |
Функции преобразования
Потоки данных предоставляют несколько встроенных функций преобразования для распространенных преобразований единиц, таких как температура, давление, длина, вес и объем. Далее приводятся некоторые примеры.
Преобразование | Формула | Имя функции |
---|---|---|
Цельсия к Фаренхейту | F = (C * 9/5) + 32 | cToF |
PSI для линейчатой строки | Bar = PSI * 0.0689476 | psiToBar |
Дюйм к см | Cm = дюйм * 2,54 | inToCm |
Футовый метр | Метр = фут * 0,3048 | ftToM |
Lbs to kg | Кг = lbs * 0,453592 | lbToKg |
Галлоны к литрам | Литровые = галлоны * 3,78541 | galToL |
Также поддерживаются обратные преобразования:
Преобразование | Формула | Имя функции |
---|---|---|
Фаренхейт к Цельсию | C = (F - 32) * 5/9 | fToC |
Линейчатая строка в PSI | PSI = бар / 0,0689476 | barToPsi |
Cm to inch | Дюйм = cm / 2,54 | cmToIn |
Метр на ногу | Фут = метр / 0,3048 | mToFt |
Кг к фунтам | Lbs = кг / 0,453592 | kgToLb |
Литровые галлоны | Gallons = литров / 3,78541 | lToGal |
Кроме того, можно определить собственные функции преобразования с помощью базовых математических формул. Система поддерживает такие операторы, как добавление (), вычитание (+
-
), умножение (*
) и деление (/
). Эти операторы соответствуют стандартным правилам приоритета, которые можно настроить с помощью круглых скобок, чтобы обеспечить правильный порядок операций. Это позволяет настраивать преобразования единиц в соответствии с конкретными потребностями.
Доступные операторы по приоритету
Operator | Description |
---|---|
^ | Экспонентация: $1 ^ 3 |
Так как Exponentiation
имеет самый высокий приоритет, он выполняется сначала, если скобки не переопределяют этот порядок:
$1 * 2 ^ 3
интерпретируется как$1 * 8
потому, что2 ^ 3
часть выполняется сначала перед умножением.($1 * 2) ^ 3
обрабатывает умножение перед экспонентацией.
Operator | Description |
---|---|
- | Отрицание |
! | Логическое НЕ |
Negation
и Logical not
имеют высокий приоритет, поэтому они всегда придерживаться их непосредственного соседа, за исключением случаев, когда экспонентация участвует:
-$1 * 2
сначала отрицает$1
, а затем умножает.-($1 * 2)
умножается, а затем отрицает результат.
Operator | Description |
---|---|
* | Умножение: $1 * 10 |
/ | Деление: $1/25 (результат является целым числом, если оба аргумента являются целыми числами, в противном случае плавать) |
% | Модуло: $1 % 25 |
Multiplication
, и Modulo
,Division
с одинаковым приоритетом, выполняются слева направо, если заказ не изменяется скобками.
Operator | Description |
---|---|
+ | Добавление числовых значений, объединение строк |
- | Вычитание |
Addition
и Subtraction
считаются более слабыми по сравнению с операциями в предыдущей группе:
$1 + 2 * 3
приводит к$1 + 6
выполнению в первую очередь из-за2 * 3
более высокого приоритетаmultiplication
.($1 + 2) * 3
приоритетыAddition
передMultiplication
.
Operator | Description |
---|---|
< | Меньше |
> | Больше |
<= | Меньше или равно |
>= | Больше или равно |
== | Равно |
!= | Не равно |
Comparisons
работают с числовыми, логическими и строковыми значениями. Поскольку они имеют более низкий приоритет, чем арифметические операторы, для эффективного сравнения результатов не требуется:
$1 * 2 <= $2
эквивалентна($1 * 2) <= $2
.
Operator | Description |
---|---|
|| | Логическое ИЛИ |
&& | Логическое И |
Логические операторы используются для цепочки условий:
$1 > 100 && $2 > 200