Tipos de datos (Análisis de transmisiones de Azure)

En Azure Stream Analytics, cada registro tiene un tipo de datos relacionado. Un tipo de datos describe (y restringe) el conjunto de valores que puede contener un registro de ese tipo o una expresión de ese tipo.

Tenga en cuenta que son registros que tienen un tipo y no columnas. Cada registro de una columna puede tener un tipo diferente. Si esto será transparente para la mayoría de las aplicaciones, permite un control sencillo de escenarios de desviación de esquema y otros patrones de escritura inusuales.

Tipos de datos admitidos

A continuación se muestra la lista de los tipos de datos admitidos.

Tipo de datos Descripción
bigint Enteros en el intervalo -2^63 (-9,223,372,036,854,775,808) a 2^63-1 (9,223,372,036,854,775,807).
float Números de puntos flotantes en el intervalo - 1.79E+308 to -2.23E-308, 0, and 2.23E-308 to 1.79E+308. En general, los valores decimales de punto flotante no tienen una representación binaria exacta. Se puede experimentar una pérdida de precisión. Esto no es específico de Azure Stream Analytics pero se produce en todas las implementaciones de número de punto flotante.
nvarchar(max) Valores de texto, compuestos de caracteres Unicode. Nota: No se admite un valor distinto de max.
datetime Define una fecha que se combina con una hora del día con fracciones de segundo (7 dígitos, precisión de 100 nanosegundos) que se basa en un reloj de 24 horas y en relación con utc (desplazamiento de zona horaria 0).
bit Entero que puede tomar un valor de 1, 0 o NULL. Esto se admite en el nivel de compatibilidad 1.2 y versiones posteriores.
registro Conjunto de pares nombre-valor. Los valores deben ser del tipo de datos admitido.
array Colección ordenada de valores. Los valores deben ser del tipo de datos admitido.

Puede unir (o comparar) un tipo de datos bigint y float. Funcionará correctamente en todos los casos, excepto en el caso de los valores bigint muy grandes que no se pueden representar.

Conversiones de tipos

Estas son las reglas que rigen las conversiones de tipos de datos:

  • La conversión sin pérdida de precisión durante las operaciones de lectura de entrada y escritura de salida es implícita y siempre es correcta
  • La pérdida de precisión y el desbordamiento dentro de las operaciones de escritura de salida se controlan mediante la directiva de error configurada (establecida en Drop o Retry)
  • La directiva de errores controla los errores de conversión de tipos que se producen durante las operaciones de escritura de salida.
  • Los errores de conversión de tipos que se producen durante las operaciones de lectura de entrada hacen que el trabajo coloque el evento.

Puede producirse una pérdida de precisión al convertir valores en float. No es específico de la Azure Stream Analytics sino del tipo de datos float en general. Por lo tanto, no se considera un error. En el caso de que cada dígito deba conservarse, los datos se deben leer como cadena.

Conversión de datos

Hay tres funciones en el lenguaje de streaming SQL que son útiles para observar y ajustar el tipo de datos de los datos.

Si es posible, todas las operaciones de conversión deben realizarse explícitamente a través de estas funciones, en lugar de hacerlo implícitamente (en modo silencioso) en otras funciones. Esto evita errores de coincidencia de tipos, comportamientos inesperados y errores de inserción para salidas fuertemente SQL datos.

Conversión a bit

Los valores se convertirán entre float y bit con las siguientes reglas:

De En
(BIT) 1 (FLOAT) 1.0
(BIT) 0 (FLOAT) 0.0
(BIT) NULL (FLOAT) NULL
(FLOAT) 0.0 (BIT) 0
(FLOAT) cualquier otro valor (BIT) 1
(FLOAT) NULL (BIT) NULL

Asignaciones de tipos y formatos de serialización:

Tipo de datos CSV en Salida de CSV JSON en Salida de JSON Avro en Avro out
bigint cadena convertida en un entero firmado de 64 bits Entero de 64 bits con signo convertido en cadena mediante la referencia cultural del trabajo number: entero convertido en entero de 64 bits con signo;

Booleano: en el nivel de compatibilidad 1.1 y por debajo de "false" se convierte en 0, "true" se convierte en 1.
number: integer long e int convertidos en enteros de 64 bits con signo;

Booleano: en el nivel de compatibilidad 1.1 y por debajo de false se convierte en 0, true se convierte en 1.
long
float cadena que se convierte a un número de punto flotante firmado de 64 bits Número de punto flotante de 64 bits con firma convertido en cadena mediante la referencia cultural del trabajo number: fraction converted to 64 bit signed float point number number: fraction double y float convertidos en número de punto flotante firmado de 64 bits  double
nvarchar(max) string string string string string string
datetime cadena convertida en datetime según norma ISO 8601 cadena que usa el estándar ISO 8601 cadena convertida en datetime según norma ISO 8601 datetime convertida en cadena con norma ISO 8601 cadena convertida en datetime según norma ISO 8601 datetime convertida en cadena con norma ISO 8601
bit (nivel de compatibilidad 1.2 y superior) la cadena "true", "false" o "null" se convierte en el valor entero 1, 0 o null correspondientemente. convertido en cadena "true" o "false" Booleano: "false" se convierte en 0, "true" se convierte en 1 Booleano: valor booleano Booleano: false se convierte en 0, true se convierte en 1 boolean
record N/D No se admite, se genera la cadena "Record" Objeto JSON Objeto JSON Avro record type Avro record type
array N/D No se admite, se genera la cadena "Array" Objeto JSON Objeto JSON Avro record type Avro record type

Nota

No se necesita ninguna conversión de tipos de datos para Parquet.

Asignación de tipos al escribir en almacenes de datos estructurados:

Tipo de datos SQL Power BI Document DB PostgreSQL
bigint bigint, int, smallint, tinyint, todos los tipos de cadena (ntext, nvarchar, char, ...) numeric: integer bigint
float float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) Sí. number: fraction precisión doble, numérica. Limitado a 1,78E+308
nvarchar(max) Todos los tipos de cadena (ntext, nvarchar, char, uniqueidentifier...) yes string carácter variable, texto
datetime datetime, datetime2, datetimeoffset, todos los tipos de cadena (ntext, nvarchar, char, ...) Sí. datetime convertida en cadena con norma ISO 8601 timestamp, time. Se admite la opción zona horaria, pero no se proporciona ninguna zona horaria.
bit (nivel de compatibilidad 1.2 y superior) bigint, int, smallint, tinyint, bit, todos los tipos de cadena (ntext, nvarchar, char, ...) Sí. boolean: 1 se convierte en true, 0 se convierte en false bit
record No se admite, se genera la cadena "Record" No se admite, se genera la cadena "Record" Objeto JSON Incompatible
array No se admite, se genera la cadena "Array" No se admite, se genera la cadena "Array" Objeto JSON No compatibles