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 |