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 un registro de ese tipo puede contener o una expresión de ese tipo puede producir.

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 es transparente para la mayoría de las aplicaciones, permite un control sencillo de escenarios de desfase 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. La pérdida de precisión se puede experimentar. Esto no es específico de Azure Stream Analytics, pero se produce en todas las implementaciones de números 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 segundos (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 combinar en (o comparar) un bigint y un tipo de datos float. Funcionará correctamente en todos los casos, excepto en el caso de los valores bigint muy grandes que no se pueden representar.

Nota

Al leer tipos de datos bigint fuera del intervalo, Azure Stream Analytics admite, el trabajo de Stream Analytics no podría deserializar los eventos con el mensaje de error InputDeserializationError. Puede procesar previamente los datos y convertirlos en cadena. Una opción consiste en usar Azure Functions para procesar previamente los datos y convertir estos enteros grandes en cadena.

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 y escritura de salida de entrada es implícita y siempre se realiza correctamente.
  • 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 error 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 quite el evento.

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

Conversión de datos

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

  • CAST : convertir una sola columna en un tipo determinado: producirá un error en el trabajo en caso de error de conversión.
  • TRY_CAST : convierte una sola columna en un tipo determinado: los errores se permiten como NULL. Consulte la validación de entrada para obtener el mejor uso TRY_CAST
  • CREATE TABLE : defina un único esquema explícito en una entrada. Las filas con errores de conversión se quitan de la secuencia
  • GetType : devuelve el tipo de una columna.

Para la mayoría de los casos de uso, la opción recomendada es usar TRY_CAST. Esta función protege el procesamiento de bajada al garantizar el tipo de salida, a la vez que evita la pérdida de datos reemplazando el valor en error por NULL. La fila no se quita y ese valor original todavía se puede proyectar en otra columna.

Para obtener garantías seguras, la opción recomendada es usar CREATE TABLE. Este enfoque permite informar al trabajo del esquema de una entrada determinada, sin riesgo de desviación. El equilibrio es que solo se puede definir un único esquema en una entrada determinada y se quitarán las filas no compatibles.

Si es posible, todas las operaciones de conversión se deben realizar explícitamente a través de estas funciones, en lugar de implícitamente (silenciosamente) en otras funciones. Esto evita errores de coincidencia de tipos, comportamientos inesperados y errores de inserción para salidas fuertemente tipadas como bases de datos SQL. Consulte validación de entrada para obtener información sobre cómo proteger la lógica de consulta principal frente a estos errores.

Conversión a bit

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

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 JSON out Avro in 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 a entero de 64 bits con signo;

Boolean: 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 convertido en entero de 64 bits con signo;

Boolean: 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 con signo de 64 bits convertido en cadena mediante la referencia cultural del trabajo number: fraction converted to 64 bit signed float point number (número de punto flotante con signo de 64 bits) 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) string "true", "false" o "null" se convierte en el valor entero 1, 0 o null correspondientemente. convertido en la cadena "true" o "false" Boolean: "false" se convierte en 0, "true" se convierte en 1 Boolean: valor booleano Boolean: 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 Azure Cosmos DB PostgreSQL Explorador de datos de Azure
bigint bigint, int, smallint, tinyint, todos los tipos de cadena (ntext, nvarchar, char, ...) numeric: entero bigint dynamic, int, long
float float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) number: fraction precisión doble, numérica. Limitado a 1.78E+308 dinámico, real, double
nvarchar(max) Todos los tipos de cadena (ntext, nvarchar, char, uniqueidentifier...) yes string carácter variable, texto dynamic, string
datetime datetime, datetime2, datetimeoffset, todos los tipos de cadena ( ntext, nvarchar, char, ...) datetime convertida en cadena con norma ISO 8601 timestamp, time. Opción de zona horaria admitida, pero no se proporcionará ninguna zona horaria. dynamic, string, datetime
bit (nivel de compatibilidad 1.2 y superior) bigint, int, smallint, tinyint, bit, todos los tipos de cadena (ntext, nvarchar, char, ...) booleano: 1 se convierte en true, 0 convertido en false bit dynamic, bool
record No se admite, se genera la cadena "Record" No se admite, se genera la cadena "Record" Objeto JSON No compatible dynamic, bool, long, datetime, byte array, real, double, string
array No se admite, se genera la cadena "Array" No se admite, se genera la cadena "Array" Objeto JSON No compatible dynamic, string