Types de données (Azure Stream Analytics)

Dans Azure Stream Analytics, chaque enregistrement a un type de données associé. Un type de données décrit (et limite) l’ensemble de valeurs qu’un enregistrement de ce type peut contenir ou une expression de ce type peut produire.

Notez qu’il s’agit d’enregistrements qui ont un type et non de colonnes. Chaque enregistrement d’une colonne peut avoir un type différent. Si cela est transparent pour la plupart des applications, cela permet une gestion simple des scénarios de dérive de schéma et d’autres modèles de frappe inhabituels.

Types de données pris en charge

Voici la liste des types de données pris en charge.

Type de données Description
bigint Entiers dans la plage de -2^63 (-9 223 372 036 854 775 808) à 2^63-1 (9 223 372 036 854 775 807).
float Nombres à virgule flottante dans la plage de - 1,79E+308 à -2,23E-308, 0, et de 2,23E-308 à 1,79E+308. Les valeurs décimales à virgule flottante n’ont généralement pas de représentation binaire exacte. Une perte de précision peut être observée. Cela n’est pas spécifique à Azure Stream Analytics, mais se produit dans toutes les implémentations de nombre à virgule flottante.
nvarchar(max) Valeurs de texte composées de caractères Unicode. Remarque : Une valeur autre que max n’est pas prise en charge.
DATETIME Définit une date qui est combinée avec une heure de la journée avec des fractions de secondes (7 chiffres, précision de 100 nanosecondes) basée sur une horloge de 24 heures et par rapport à UTC (décalage de fuseau horaire 0).
bit Entier qui peut prendre une valeur de 1, 0 ou NULL. Cela est pris en charge dans le niveau de compatibilité 1.2 et ultérieur.
enregistrement Ensemble de paires nom/valeur. Les valeurs doivent être d'un type de données pris en charge.
tableau Collection ordonnée de valeurs. Les valeurs doivent être d'un type de données pris en charge.

Vous pouvez joindre (ou comparer) un type de données bigint et float. Il fonctionne correctement dans tous les cas, à l’exception des très grandes valeurs bigintes qui ne peuvent pas être représentées.

Notes

Lors de la lecture de types de données bigint en dehors de la plage prise en charge par Azure Stream Analytics, votre travail Stream Analytics ne parvient pas à désérialiser les événements avec le message d’erreur : InputDeserializationError. Vous pouvez prétraiter les données et les convertir en chaîne. Une option consiste à utiliser des fonctions Azure pour prétraiter les données et convertir ces entiers volumineux en chaîne.

Conversions des types

Voici les règles qui régissent les conversions de types de données :

  • La conversion sans perte de précision pendant les opérations de lecture d’entrée et d’écriture de sortie est implicite et réussit toujours
  • La perte et le dépassement de précision à l’intérieur des opérations d’écriture de sortie sont gérés par la stratégie d’erreur configurée (définie sur Drop ou Retry)
  • Les erreurs de conversion de type qui se produisent pendant les opérations d’écriture de sortie sont gérées par la stratégie d’erreur
  • Les erreurs de conversion de type qui se produisent pendant les opérations de lecture d’entrée entraînent la suppression de l’événement par le travail

Une perte de précision peut se produire lors de la conversion de valeurs en valeurs flottantes. Il n’est pas spécifique à Azure Stream Analytics, mais au type de données float en général. En tant que tel, il n’est pas considéré comme une erreur. Dans le cas où chaque chiffre doit être conservé, les données doivent être lues en tant que chaîne.

Caster des données

Il existe quatre fonctions dans le langage SQL de streaming qui sont utiles pour observer et ajuster le type de données de vos données.

  • CAST : cast d’une seule colonne en un type donné - échoue le travail en cas d’erreur de conversion
  • TRY_CAST : cast d’une seule colonne vers un type donné - les erreurs sont signalées comme NULL. Consultez Validation des entrées pour savoir comment utiliser au mieux TRY_CAST
  • CREATE TABLE : définissez un schéma explicite unique pour une entrée. Les lignes présentant des erreurs de conversion sont supprimées du flux
  • GetType : retourner le type d’une colonne

Pour la plupart des cas d’usage, l’option recommandée consiste à utiliser TRY_CAST. Cette fonction protège le traitement en aval en garantissant le type de sortie, tout en empêchant la perte de données en remplaçant la valeur en erreur par NULL. La ligne n’est pas supprimée et cette valeur d’origine peut toujours être projetée dans une autre colonne.

Pour des garanties fortes, l’option recommandée est d’utiliser CREATE TABLE. Cette approche permet d’informer le travail du schéma d’une entrée donnée, sans risque d’écart. Le compromis étant qu’un seul schéma peut être défini sur une entrée donnée et que les lignes non conformes seront supprimées.

Si possible, toutes les opérations de cast doivent être effectuées explicitement via ces fonctions, plutôt que implicitement (silencieusement) dans d’autres fonctions. Cela permet d’éviter les incompatibilités de types, les comportements inattendus et les erreurs d’insertion pour les sorties fortement typées comme les bases de données SQL. Consultez Validation d’entrée pour savoir comment protéger la logique de requête principale contre ces erreurs.

Conversion en bit

Les valeurs seront converties entre float et bit avec les règles suivantes :

Du À
(BIT) 1 (FLOAT) 1.0
(BIT) 0 (FLOAT) 0.0
(BIT) NULL (FLOAT) NULL
(FLOAT) 0.0 (BIT) 0
(FLOAT) toute autre valeur (BIT) 1
(FLOAT) NULL (BIT) NULL

Mappages de types et formats de sérialisation

Type de données CSV dans SORTIE CSV JSON dans SORTIE JSON Avro dans Avro out
bigint chaîne convertie en entier signé de 64 bits Entier signé 64 bits converti en chaîne à l’aide de la culture de travail nombre : entier converti en entier signé 64 bits ;

Boolean : au niveau de compatibilité 1.1 et au-dessous de « false » est converti en 0, « true » est converti en 1
number: integer long et int convertis en entier signé 64 bits ;

Boolean : au niveau de compatibilité 1.1 et au-dessous , false est converti en 0, true est converti en 1
long
float chaîne convertie en nombre signé à virgule flottante de 64 bits Nombre à virgule flottante signé 64 bits converti en chaîne à l’aide de la culture de travail nombre : fraction convertie en nombre à virgule flottante signé 64 bits nombre : fraction double et virgule flottante converti en nombre signé à virgule flottante de 64 bits double
nvarchar(max) string string string string string string
datetime chaîne convertie en valeur date/heure suivant la norme ISO 8601 chaîne utilisant la norme ISO 8601 chaîne convertie en valeur date/heure suivant la norme ISO 8601 valeur date/heure convertie en chaîne suivant la norme ISO 8601 chaîne convertie en valeur date/heure suivant la norme ISO 8601 valeur date/heure convertie en chaîne suivant la norme ISO 8601
bit (niveau de compatibilité 1.2 et ultérieur) la chaîne « true », « false » ou « null » est convertie en valeur entière 1, 0 ou null correspondant converti en chaîne « true » ou « false » Boolean : « false » est converti en 0, « true » est converti en 1 Boolean : valeur booléenne Boolean : false est converti en 0, true est converti en 1 boolean
enregistrement N/A Non pris en charge, la chaîne « Record » est sortie Objet JSON Objet JSON Type d'enregistrement Avro Type d'enregistrement Avro
array N/A Non pris en charge, la chaîne « Array » est sortie Objet JSON Objet JSON Type d'enregistrement Avro Type d'enregistrement Avro

Notes

Aucune conversion de type de données n’est nécessaire pour Parquet.

Mappage de type lors de l’écriture dans des magasins de données structurées

Type de données SQL Power BI Azure Cosmos DB PostgreSQL Explorateur de données Azure
bigint bigint, int, smallint, tinyint, tous les types de chaînes (ntext, nvarchar, char, ...) Oui numeric: integer bigint dynamique, int, long
float float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) Oui nombre : fraction double précision, numérique. Limité à 1,78E+308 dynamique, réel, double
nvarchar(max) Tous les types de chaînes (ntext, nvarchar, char, uniqueidentifier...) yes string caractère variable, texte dynamique, chaîne
datetime datetime, datetime2, datetimeoffset, tous les types de chaînes ( ntext, nvarchar, char, ...) Oui valeur date/heure convertie en chaîne suivant la norme ISO 8601 timestamp, time. Option de fuseau horaire prise en charge, mais aucun fuseau horaire n’est fourni dynamic, string, datetime
bit (niveau de compatibilité 1.2 et ultérieur) bigint, int, smallint, tinyint, bit, tous les types de chaînes (ntext, nvarchar, char, ...) Oui booléen : 1 est converti en true, 0 converti en false bit dynamique, bool
enregistrement Non pris en charge, la chaîne « Record » est sortie Non pris en charge, la chaîne « Record » est sortie Objet JSON Non pris en charge dynamic, bool, long, datetime, tableau d’octets, real, double, string
array Non pris en charge, la chaîne « Array » est sortie Non pris en charge, la chaîne « Array » est sortie Objet JSON Non pris en charge dynamique, chaîne