$convert
정의
$convert
표현식 은 바이너리 데이터 유형을 변환합니다. 이는 Kafka 헤더의 바이너리 데이터를 변환하는 데 사용할 수 있습니다.
$convert
$convert
표현식 의 프로토타입 형식은 다음과 같습니다.{ input: "$binDataField", to: <int, long, double>, byteOrder: "little"|"big" } { input: "$intLongOrDoubleField", to: "binData", byteOrder: "little"|"big" } { input: "$binDataField", to: "string", format: <base64, base64url, hex, uuid, utf8> } { input: "$stringField", to: "binData", format: <base64, base64url, hex, uuid, utf8> }
구문
$convert 집계 연산자 는 $convert
표현식 의 Atlas Stream Processing 버전에서 제공되는 바이너리 데이터 유형을 제외한 데이터 유형 간을 변환합니다.
$convert
표현식 은 다음 필드가 있는 문서 를 사용합니다.
필드 | 값 | 필요성 | 설명 |
---|---|---|---|
input | binData , int , long , double 및 string | 필수 사항 | int , long , double 또는 string 유형으로 변환되는 이진 데이터 또는 변환될 int , long , double 또는 string 유형 데이터 바이너리 데이터로 변환합니다. |
to | binData , int , long , double 및 string | 필수 사항 | input 이 변환되는 데이터 유형 을 지정합니다. int , long , double , string 또는 binData 로 지정할 수 있습니다. |
byteOrder | 작은, 큰 | 필수 사항 |
참고
|
format | base64, base64url, hex, uuid, utf8 | 필수 사항 |
참고
|
행동
$convert.to
의 값이 int
인 경우 binData
input
값은 1
, 2
또는 4
여야 합니다. $convert.to
값이 long
인 경우 binData
input
값은 1
, 2
, 4
또는 8
여야 합니다. input
의 길이가 예기치 않은 경우 오류가 발생합니다. $convert.onError
을(를) 구성하여 이 동작을 제어할 수 있습니다.
binData
로 변환할 때 int
는 4바이트 binData
이 되고, long
는 8바이트 binData
가 되고, double
는 8바이트 binData
. binData
에서 double
로 변환할 때 8바이트 입력은 IEEE 754 배정밀도 부동 점 으로 해석되고 4바이트 입력은 IEEE 754 단정밀도 부동 소수점으로 해석됩니다. 점. MQL 은 배정밀도 부동 소수점만 지원하므로 단정밀도 부동 점 값에서 배정밀도로 무 손실 변환을 수행 점 .
binData
를 숫자 유형으로 변환:
$convert.to | int | long | double |
---|---|---|---|
허용 너비(바이트) | 1, 2, 4 | 1, 2, 4, 8 | 4, 8 |
binData 다음과 같이 해석됩니다. | 2의 보수 부호 있는 정수 | 2의 보수 부호 있는 정수 | IEEE 754 단정밀도 또는 배정밀도 부동 점 |
숫자 유형을 binData
로 변환:
입력 | int | long | double |
---|---|---|---|
출력 너비(바이트) | 4 | 8 | 8 |
예시
다음 예제에서는 다음과 같은 이진 표기법을 사용하여 binData
를 설명합니다.
BinData(0b00000000 00000010)
가장 왼쪽 바이트(00000000)는 최하위 메모리 주소 또는 바이트 배열 의 0번째 인덱스 에 해당합니다. 마찬가지로 다음과 같은 16진수 표기법을 사용합니다.
BinData(0x0100 000A)
가장 왼쪽 바이트(01)는 최하위 메모리 주소 또는 바이트 배열 의 0번째 인덱스 에 해당합니다.
다음 문서는 BinData
, int
, long
및 double
표기법에서 값을 변환하는 $convert
표현식의 예시 입니다.
{ $convert: { input: BinData(0b00000000 00000010), to: “int”, byteOrder: “big” } }
결과: 2
{ $convert: { input: BinData(0b00000001 00000000), to: “int”, byteOrder: “big” } }
결과: 256
{ $convert: { input: BinData(0b00000001 00000000), to: “int”, byteOrder: “little” } }
결과: 1
{ $convert: { input: BinData(0x0001 0000), to: “int”, byteOrder: “big” } }
결과: 65536
{ $convert: { input: BinData(0x0001 0000 0000 0000), to: “long”, byteOrder: “big” } }
결과: 281474976710656
{ $convert: { input: BinData(0xFFFE7960), to: “int”, byteOrder: “big” } }
결과: -100000
{ $convert: { input: BinData(0x0001 0000 0000 0000), to: “int”, byteOrder: “big” } }
결과: 오류 - binData 길이는 == "int"인 경우 1,2 또는 4 바이트만 가능합니다.
{ $convert: { input: BinData(0xC04C CCCD), to: “double”, byteOrder: “big” } }
결과: -3.2000000476837158203125
{ $convert: { input: BinData(0x0000), to: “double”, byteOrder: “big” } }
결과: 오류 - binData 길이는 == "double"일 때 4 또는 8 바이트만 가능합니다.
{ $convert: { input: true, to: “binData” } }
Result: BinData(0x01) // 하위 유형 0
{ $convert: { input: false, to: “binData” } }
Result: BinData(0x00) // 하위 유형 0
{ $convert: { input: NumberLong(42), to: “binData”, byteOrder: “big” } }
Result: BinData(0x0000 0000 0000 002A) // subtype 0
{ $convert: { input: NumberLong(42), to: “binData”, byteOrder: “little” } }
Result: BinData(0x2A00 0000 0000 0000) // 하위 유형 0
{ $convert: { input: { $toInt: “$myNumericField” }, to: “binData”, byteOrder: “little” } }
myNumericField가 Int(42), Long(42) 또는 Double(42.0)...
결과: BinData(0x2A00 0000)
{ $convert: { input: “$myIntOrLongField”, to: “binData”, byteOrder: “little” } }
입력이 Int(42)인 경우:
결과: BinData(0x2A00 0000)
입력이 Long(42)인 경우:
BinData(0x2A00 0000 0000 0000)