Docs Menu
Docs Home
/ /
/ / /

$convert Expresión (procesamiento de flujo)

La expresión $convert convierte tipos de datos binarios. Esto permite convertir datos binarios en los encabezados de Kafka.

$convert

Una expresión $convert tiene las siguientes formas prototipo:

{
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>
}

El El operador de agregación$convert convierte entre tipos de datos excepto los tipos de datos binarios ofrecidos en la versión Atlas Stream Processing de la $convert expresión.

La expresión $convert toma un documento con los siguientes campos:

Campo
Valor
Necesidad
Descripción

input

binData, int, long, double, y string

Requerido

Datos binarios que se convertirían en un tipo int, long, double, o string, o un tipo de datos int, long, double, o string que se convertiría en datos binarios.

to

binData, int, long, double, y string

Requerido

Especifica el tipo de datos al que se convierte input. Puedes especificar int, long, double, string o binData.

byteOrder

pequeño, grande

Opcional

Especifica el orden de bytes big-endian o little-endian de la entrada y la salida binData. Si no se especifica, el orden de bytes predeterminado es little-endian.

byteOrder La opción especifica cómo interpretar la entrada o salida binData, pero no controla el orden interno de bytes de los tipos numéricos. A menos que tenga un caso de uso específico para el ordenamiento de bytes little-endian, utilice el ordenamiento de bytes big-endian.

format

base64, base64url, hex, uuid, utf8

Requerido

Especifica un argumento de formato de nivel superior de entrada y salida string.

El método auxiliar $toString no interpreta binData como datos UTF-8 de forma predeterminada. Su valor predeterminado es base64. Debe usar la expresión $convert para las conversiones UTF-8.

Si el valor de $convert.to es int, el valor de binData input debe ser 1, 2 o 4. Si el valor de $convert.to es long, el valor de binData input debe ser 1, 2, 4 o 8. Si el valor de input tiene una longitud inesperada, se genera un error. Puede controlar este comportamiento configurando $convert.onError.

Al convertir a binData, un int se convierte en un 4byte binData, un long en un 8byte binData y un double en un 8byte binData. Al convertir de binData a double, una entrada de 8bytes se interpreta como punto flotante de precisión doble IEEE 754, y una entrada de 4bytes se interpreta como punto flotante de precisión simple IEEE 754. Dado que MQL solo admite puntos flotantes de doble precisión, realiza una conversión sin pérdida del valor de punto flotante de precisión simple a doble precisión.

Conversión de binData a tipos numéricos:

$convertir.a
int
long
double

Anchos permitidos (en bytes)

1, 2, 4

1, 2, 4, 8

4, 8

binData se interpreta como

entero con signo en complemento a dos

entero con signo en complemento a dos

IEEE 754 punto flotante de precisión simple o doble

Conversión de tipos numéricos a binData:

Entrada
int
long
double

Ancho de salida (en bytes)

4

8

8

En los siguientes ejemplos, describimos binData utilizando notación binaria como:

BinData(0b00000000 00000010)

El byte más a la izquierda (00000000) corresponde a la dirección de memoria más baja, o al índice 0de la matriz de bytes. De forma similar, utilizamos notación hexadecimal, como:

BinData(0x0100 000A)

El byte más a la izquierda (01) corresponde a la dirección de memoria más baja o al índice 0del arreglo de bytes.

Los siguientes documentos son ejemplos de expresiones $convert que convierten valores en notaciones BinData, int, long y double:

{
$convert: {
input: BinData(0b00000000 00000010),
to: “int”,
byteOrder: “big” }
}

Resultado: 2

{
$convert: {
input: BinData(0b00000001 00000000),
to: “int”,
byteOrder: “big” }
}

Resultado: 256

{
$convert: {
input: BinData(0b00000001 00000000),
to: “int”,
byteOrder: “little” }
}

Resultado: 1

{
$convert: {
input: BinData(0x0001 0000),
to: “int”,
byteOrder: “big” }
}

Resultado: 65536

{
$convert: {
input: BinData(0x0001 0000 0000 0000),
to: “long”,
byteOrder: “big” }
}

Resultado: 281474976710656

{
$convert: {
input: BinData(0xFFFE7960),
to: “int”,
byteOrder: “big” }
}

Resultado: -100000

{
$convert: {
input: BinData(0x0001 0000 0000 0000),
to: “int”,
byteOrder: “big” }
}

Resultado: Error: la longitud de binData solo puede ser 1,2 o 4 bytes cuando == “int”.

{
$convert: {
input: BinData(0xC04C CCCD),
to: “double”,
byteOrder: “big” }
}

Resultado: -3.2000000476837158203125

{
$convert: {
input: BinData(0x0000),
to: “double”,
byteOrder: “big” }
}

Resultado: Error: la longitud de binData solo puede ser de 4 o 8 bytes cuando == “double”.

{
$convert: {
input: true,
to: “binData” }
}

Resultado: BinData(0x01) // subtipo 0

{
$convert: {
input: false,
to: “binData” }
}

Resultado: BinData(0x00) // subtipo 0

{
$convert: {
input: NumberLong(42),
to: “binData”,
byteOrder: “big” }
}

Resultado: BinData(0x0000 0000 0000 002A) // subtipo 0

{
$convert: {
input: NumberLong(42),
to: “binData”,
byteOrder: “little” }
}

Resultado: BinData(0x2A00 0000 0000 0000) // subtipo 0

{
$convert: {
input: { $toInt: “$myNumericField” },
to: “binData”,
byteOrder: “little” }
}

Suponiendo que myNumericField es un Int(42), Long(42) o Double(42.0)...

Resultado: BinData(0x2A00 0000)

{
$convert: {
input: “$myIntOrLongField”,
to: “binData”,
byteOrder: “little” }
}

Si la entrada es Int(42):

Resultado: BinData(0x2A00 0000)

Si la entrada es Long(42):

Datos binarios (0x2A00 0000 0000 0000)

Volver

Operadores de agregación

En esta página