데이터 흐름 변환을 사용하여 데이터 변환
Important
이 페이지에는 미리 보기 상태인 Kubernetes 배포 매니페스트를 사용하여 Azure IoT Operations 구성 요소를 관리하기 위한 지침이 포함되어 있습니다. 이 기능은 몇 가지 제한 사항을 제공하며 프로덕션 워크로드에 사용하면 안 됩니다.
베타, 미리 보기로 제공되거나 아직 일반 공급으로 릴리스되지 않은 Azure 기능에 적용되는 약관은 Microsoft Azure 미리 보기에 대한 추가 사용 약관을 참조하세요.
데이터 흐름 변환을 사용하여 Azure IoT 작업에서 데이터를 변환할 수 있습니다. 데이터 흐름의 변환 요소는 출력 필드의 값을 계산하는 데 사용됩니다. 데이터 흐름 변환에서는 입력 필드, 사용 가능한 작업, 데이터 형식 및 형식 변환을 사용할 수 있습니다.
데이터 흐름 변환 요소는 출력 필드의 값을 계산하는 데 사용됩니다.
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
)의 주석은 선택 사항이지만 변환 수식에서 각 필드 속성과 해당 역할 간의 연결을 명확히 하는 데 도움이 됩니다.
데이터 유형
다양한 serialization 형식은 다양한 데이터 형식을 지원합니다. 예를 들어 JSON은 문자열, 숫자, 부울 및 null과 같은 몇 가지 기본 형식을 제공합니다. 이러한 기본 형식의 배열도 포함됩니다.
매퍼가 입력 속성을 읽으면 이를 내부 형식으로 변환합니다. 이러한 변환은 출력 필드에 쓰여질 때까지 데이터를 메모리에 보관하는 데 필요합니다. 입력 및 출력 serialization 형식이 동일한지 여부에 관계없이 내부 형식으로의 변환이 발생합니다.
내부 표현은 다음과 같은 데이터 형식을 사용합니다.
Type | 설명 |
---|---|
bool |
논리적 true/false입니다. |
integer |
부가된 128비트 정수로 저장됩니다. |
float |
64비트 부동 소수점 숫자로 저장됩니다. |
string |
UTF-8 문자열입니다. |
bytes |
부호 없는 8비트 값의 문자열인 이진 데이터입니다. |
datetime |
나노초 해상도를 사용하는 UTC 또는 현지 시간. |
time |
나노초 해상도의 하루 중 시간입니다. |
duration |
나노초 해상도의 기간입니다. |
array |
이전에 나열된 모든 형식의 배열입니다. |
map |
이전에 나열된 모든 형식의 (키, 값) 쌍의 벡터입니다. |
입력 레코드 필드
입력 레코드 필드를 읽으면 기본 형식이 이러한 내부 형식 변형 중 하나로 변환됩니다. 내부 표현은 대부분의 입력 형식을 최소 변환 또는 전혀 변환 없이 처리할 수 있을 만큼 다양합니다.
일부 형식의 경우 서로게이트 형식이 사용됩니다. 예를 들어 JSON에는 형식이 datetime
없으며 대신 ISO8601 따라 형식이 지정된 문자열로 값을 저장 datetime
합니다. 매퍼가 이러한 필드를 읽을 때, 내부 표현은 문자열로 유지됩니다.
출력 레코드 필드
매퍼는 제한된 형식 시스템을 갖춘 serialization 형식에서 데이터가 들어오는 시나리오를 수용하기 위해 내부 형식을 출력 형식으로 변환하여 유연하게 설계되었습니다. 다음 예제에서는 변환이 처리되는 방법을 보여 줍니다.
- 숫자 형식: 정밀도가 손실되더라도 이러한 형식을 다른 표현으로 변환할 수 있습니다. 예를 들어 64비트 부동 소수점 숫자(
f64
)를 32비트 정수(i32
)로 변환할 수 있습니다. - 문자열을 숫자로: 들어오는 레코드에 같은
123
문자열이 포함되어 있고 출력 필드가 32비트 정수인 경우 매퍼는 값을 변환하고 숫자로 씁니다. - 다른 형식에 대한 문자열:
- 출력 필드인 경우 매퍼는
datetime
문자열을 형식이 지정된 ISO8601datetime
구문 분석하려고 시도합니다. - 출력 필드인 경우 매퍼는
binary/bytes
base64로 인코딩된 문자열에서 문자열을 역직렬화하려고 합니다.
- 출력 필드인 경우 매퍼는
- 부울 값:
0
/1
출력 필드가 숫자인 경우로 변환됩니다.true
/false
출력 필드가 문자열인 경우로 변환됩니다.
형식과 함께 변환 수식 사용
매핑에서 선택적 수식은 출력 필드에 쓰여지기 전에 입력 데이터가 어떻게 처리되는지 지정할 수 있습니다. 수식을 지정하지 않으면 매퍼는 내부 형식 및 변환 규칙을 사용하여 입력 필드를 출력에 복사합니다.
수식이 지정된 경우 수식에서 사용할 수 있는 데이터 형식은 다음과 같이 제한됩니다.
- 정수
- 부동 소수점 숫자
- 문자열
- 부울
- 이전 형식의 배열
- 누락된 값
Map
수 byte
식에 참여할 수 없습니다.
시간(및time
)과 duration
관련된 형식은 시간(datetime
초)을 나타내는 정수 값으로 변환됩니다. 수식 평가 후 결과는 내부 표현에 저장되며 다시 변환되지 않습니다. 예를 들어 datetime
초로 변환된 정수는 정수로 유지됩니다. 값이 필드에 사용되는 datetime
경우 명시적 변환 방법을 적용해야 합니다. 예를 들어 값을 출력 serialization 형식의 형식으로 자동으로 변환되는 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
함수를 사용합니다.
- 첫 번째 매개 변수는 조건입니다. 이 예제에서는 입력 필드의 필드(별칭)
$1
가 누락된 값인지BaseSalary
확인합니다. - 두 번째 매개 변수는 첫 번째 매개 변수의 조건이 true일 경우 함수의 결과입니다. 이 예에서는 컨텍스트화 데이터 세트의
BaseSalary
필드입니다(별칭$2
). - 세 번째 매개 변수는 첫 번째 매개 변수가 false일 경우의 조건 값입니다.
사용 가능한 함수
데이터 흐름은 변환 수식에 사용할 수 있는 기본 제공 함수 집합을 제공합니다. 이러한 함수를 사용하여 산술, 비교 및 문자열 조작과 같은 일반적인 작업을 수행할 수 있습니다. 사용 가능한 함수는 다음과 같습니다.
함수 | 설명 | 예제 |
---|---|---|
min |
배열에서 최소값을 반환합니다. | min(2, 3, 1) 반환 1 합니다 min($1) . 배열에서 최소값을 반환합니다. $1 |
max |
배열에서 최대값을 반환합니다. | max(2, 3, 1) 3 은 max($1) 배열에서 최대값을 반환합니다.$1 |
if |
조건에 따라 값 간을 반환합니다. | if($1 > 10, 'High', 'Low') 가 보다 크면 $1 반환하고, 그렇지 않으면 10 을 반환합니다'High' .'Low' |
len |
문자열의 문자 길이 또는 튜플의 요소 수를 반환합니다. | len("Azure") 반환5 , len(1, 2, 3) 반환, len($1) 배열의 요소 수를 반환3 합니다.$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로 | Cm = 인치 * 2.54 | inToCm |
발에서 미터로 | 미터 = foot * 0.3048 | ftToM |
Lbs to kg | Kg = lbs * 0.453592 | lbToKg |
갤런에서 리터까지 | Liters = 갤런 * 3.78541 | galToL |
역방향 변환도 지원됩니다.
전환 | 수식 | 함수 이름 |
---|---|---|
화씨에서 섭씨로 | C = (F - 32) * 5/9 | fToC |
Bar에서 PSI까지 | PSI = bar / 0.0689476 | barToPsi |
Cm-인치 | 인치 = cm / 2.54 | cmToIn |
미터-발 | Foot = meter / 0.3048 | mToFt |
Kg에서 파운드로 | Lbs = kg / 0.453592 | kgToLb |
리터에서 갤런으로 | 갤런 = 리터 / 3.78541 | lToGal |
또한 기본 수학 수식을 사용하여 고유한 변환 함수를 정의할 수 있습니다. 시스템은 더하기(), 빼기(+
), 곱하기(-
) 및 나누기(*
/
)와 같은 연산자를 지원합니다. 이러한 연산자는 올바른 연산 순서를 보장하기 위해 괄호를 사용하여 조정할 수 있는 표준 우선 순위 규칙을 따릅니다. 이렇게 하면 특정 요구 사항에 맞게 단위 변환을 사용자 지정할 수 있습니다.
우선 순위별 사용 가능한 연산자
Operator | 설명 |
---|---|
^ | 지수: $1 ^ 3 |
우선 순위가 가장 높기 때문에 Exponentiation
괄호가 이 순서를 재정의하지 않는 한 먼저 실행됩니다.
$1 * 2 ^ 3
은$1 * 8
로 해석됩니다. 왜냐하면 곱셈 전에2 ^ 3
부분이 먼저 실행되기 때문입니다.($1 * 2) ^ 3
은 지수 연산 전에 곱셈을 처리합니다.
Operator | 설명 |
---|---|
- | 부정 |
! | 논리 NOT |
Negation
과 Logical not
는 우선 순위가 높으므로 지수 연산이 관련된 경우를 제외하고는 항상 바로 옆에 붙습니다.
-$1 * 2
먼저 부정한$1
다음 곱합니다.-($1 * 2)
곱한 다음 결과를 부정합니다.
Operator | 설명 |
---|---|
* | 곱하기: $1 * 10 |
/ | 나누기: $1 / 25(두 인수가 모두 정수이면 결과는 정수이고, 그렇지 않으면 float입니다) |
% | 모듈로: $1 % 25 |
Multiplication
, Division
, Modulo
는 동일한 우선 순위를 가지며 괄호로 순서를 변경하지 않는 한 왼쪽에서 오른쪽으로 실행됩니다.
Operator | 설명 |
---|---|
+ | 숫자 값에 대한 추가, 문자열에 대한 연결 |
- | 빼기 |
Addition
이전 Subtraction
그룹의 작업과 비교하여 약한 작업으로 간주됩니다.
$1 + 2 * 3
$1 + 6
2 * 3
는 우선 순위가 높기 때문에 먼저 실행되기 때문에 입니다multiplication
.($1 + 2) * 3
앞에 우선 순위를 지정합니다Addition
Multiplication
.
Operator | 설명 |
---|---|
< | 보다 작음 |
> | 보다 큼 |
<= | 작거나 같음 |
>= | 크거나 같음 |
== | 다음과 같음 |
!= | 같지 않음 |
Comparisons
는 숫자, 부울 및 문자열 값에 대해 작동합니다. 산술 연산자보다 우선 순위가 낮기 때문에 결과를 효과적으로 비교하기 위해 괄호가 필요하지 않습니다.
$1 * 2 <= $2
는($1 * 2) <= $2
와 같습니다.
Operator | 설명 |
---|---|
|| | 논리적 OR |
&& | 논리적 AND |
논리 연산자는 조건을 연결하는 데 사용됩니다.
$1 > 100 && $2 > 200