$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” } }
結果: Error- binData 長さは、 == int の場合、 1 、 2 、または4バイトのみになります。
{ $convert: { input: BinData(0xC04C CCCD), to: “double”, byteOrder: “big” } }
結果: - 3.2000000476837158203125
{ $convert: { input: BinData(0x0000), to: “double”, byteOrder: “big” } }
結果: Error- binData 長さは、4 8== double の場合、 バイトまたは バイトのみになります。
{ $convert: { input: true, to: “binData” } }
結果: BinData( 0 x 01 ) // サブタイプ0
{ $convert: { input: false, to: “binData” } }
結果: BinData( 0 x 00 ) // サブタイプ0
{ $convert: { input: NumberLong(42), to: “binData”, byteOrder: “big” } }
結果: BinData( 0 x 0000 0000 0000 002 A) // サブタイプ0
{ $convert: { input: NumberLong(42), to: “binData”, byteOrder: “little” } }
結果: BinData( 0 x 2 A 00 0000 0000 0000 ) // サブタイプ0
{ $convert: { input: { $toInt: “$myNumericField” }, to: “binData”, byteOrder: “little” } }
myNumericField が Int( 42 )、Long( 42 )、または Double( 42.0 )であると仮定します。
結果: BinData( 0 x 2 A 00 0000 )
{ $convert: { input: “$myIntOrLongField”, to: “binData”, byteOrder: “little” } }
入力が Int( 42 )の場合:
結果: BinData( 0 x 2 A 00 0000 )
入力が Long( 42 )の場合:
BinData( 0 x 2 A 00 0000 0000 0000 )