Бөлісу құралы:


Преобразование данных с помощью преобразований потока данных

Внимание

Предварительная версия операций Интернета вещей Azure, включенная Azure Arc в настоящее время в предварительной версии. Не следует использовать это программное обеспечение предварительной версии в рабочих средах.

Вам потребуется развернуть новую установку Операций Интернета вещей Azure, когда общедоступная версия станет доступной. Вы не сможете обновить предварительную установку.

Юридические условия, применимые к функциям 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. Также включены массивы этих примитивных типов. В отличие от этого, другие форматы сериализации, такие как Avro, имеют более сложную систему типов, включая целые числа с несколькими битовыми длинами полей и метками времени с различными разрешениями. Примерами являются миллисекунда и микросекунды.

Когда приложение mapper считывает входное свойство, оно преобразует его во внутренний тип. Это преобразование необходимо для хранения данных в памяти, пока не будет записано в выходное поле. Преобразование в внутренний тип происходит независимо от того, совпадают ли форматы сериализации входных и выходных данных.

Внутреннее представление использует следующие типы данных:

Тип Описание
bool Логическое значение true/false.
integer Хранится как 128-разрядное целое число со знаком.
float Хранится как 64-разрядное число с плавающей запятой.
string Строка UTF-8.
bytes Двоичные данные— строка 8-разрядных значений без знака.
datetime UTC или локальное время с разрешением nanosecond.
time Время дня с разрешением nanosecond.
duration Длительность с разрешением nanosecond.
array Массив всех типов, перечисленных ранее.
map Вектор пар (ключ, значение) любых типов, перечисленных ранее.

Поля входной записи

При чтении поля входной записи его базовый тип преобразуется в один из этих вариантов внутреннего типа. Внутреннее представление достаточно универсально, чтобы обрабатывать большинство типов входных данных с минимальным или без преобразования. Однако для некоторых типов входных данных требуется преобразование или не поддерживается. Некоторые примеры:

  • Тип AvroUUID: он преобразуется в тип, string так как в внутреннем представлении нет определенного UUID типа.
  • Тип Avro decimal: он не поддерживается приложением mapper, поэтому поля этого типа не могут быть включены в сопоставления.
  • Тип Avro duration: преобразование может отличаться. months Если задано поле, оно не поддерживается. Если задано только days и milliseconds задано, он преобразуется во внутреннее duration представление.

Для некоторых форматов используются суррогатные типы. Например, 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: [
  'Measurements' // - $1
]
output: 'Measurements'
expression: 'take($1, 10)'  // taking at max 10 items

Массивы также можно создать из нескольких отдельных значений:

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.

Доступные функции

Функции можно использовать в формуле преобразования для выполнения различных операций:

  • min Выбор одного элемента из массива
  • if выбор между значениями
  • Обработка строк (например, uppercase())
  • Явное преобразование (например, ISO8601_datetime)
  • Агрегирование (например, avg())

Доступные операции

Потоки данных предлагают широкий спектр встроенных функций преобразования, которые позволяют пользователям легко выполнять преобразования единиц без необходимости сложных вычислений. Эти предопределенные функции охватывают распространенные преобразования, такие как температура, давление, длина, вес и объем. В следующем списке показаны доступные функции преобразования, а также соответствующие формулы и имена функций:

Преобразование Формула Имя функции
Цельсия к Фаренхейту 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

Эти функции предназначены для упрощения процесса преобразования. Они позволяют пользователям вводить значения в одной единице и получать соответствующее значение в другом уроке без усилий.

Мы также предоставляем функцию масштабирования для масштабирования диапазона значений до определяемого пользователем диапазона. Например scale($1,0,10,0,100), входное значение масштабируется от диапазона от 0 до 10 до диапазона 0 до 100.

Кроме того, пользователи могут определять собственные функции преобразования с помощью простых математических формул. Наша система поддерживает основные операторы, такие как добавление (+), вычитание (-), умножение (*) и деление (/). Эти операторы соответствуют стандартным правилам приоритета. Например, умножение и деление выполняются перед добавлением и вычитанием. Приоритет можно настроить с помощью круглых скобок, чтобы обеспечить правильный порядок операций. Эта возможность позволяет пользователям настраивать их преобразования единиц в соответствии с конкретными потребностями или предпочтениями, повышая общую служебную программу и универсальность системы.

Для более сложных вычислений также доступны такие функции, как sqrt (который находит квадратный корень числа).

Доступные арифметические, сравнения и логические операторы, сгруппированные по приоритету

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