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, ...) | sí | numeric: entero | bigint | dynamic, int, long |
float | float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) | sí | 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, ...) | sí | 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, ...) | sí | 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 |