$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 집계 연산자는 Atlas Stream Processing 버전의 $convert
표현식에서 제공하는 바이너리 데이터 유형을 제외한 데이터 유형 간을 변환합니다.
$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번째 인덱스에 해당합니다. 마찬가지로 다음과 같은 헥스 표기법을 사용합니다.
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” } }
결과: BinData(0x01) // subtype 0
{ $convert: { input: false, to: “binData” } }
결과: BinData(0x00) // subtype 0
{ $convert: { input: NumberLong(42), to: “binData”, byteOrder: “big” } }
결과: BinData(0x0000 0000 0000 002A) // subtype 0
{ $convert: { input: NumberLong(42), to: “binData”, byteOrder: “little” } }
결과: BinData(0x2A00 0000 0000 0000) // subtype 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)