Gegevenstypen (Azure Stream Analytics)

In Azure Stream Analytics heeft elke record een gerelateerd gegevenstype. Een gegevenstype beschrijft (en beperkt) de set waarden die een record van dat type kan bevatten of een expressie van dat type kan produceren.

Houd er rekening mee dat het records zijn die een type hebben en geen kolommen. Elke record van een kolom kan een ander type hebben. Als dit transparant is voor de meeste toepassingen, is het mogelijk om schemadriftscenario's en andere ongebruikelijke typepatronen eenvoudig te verwerken.

Ondersteunde gegevenstypen

Hieronder vindt u een lijst met ondersteunde gegevenstypen.

Gegevenstype Beschrijving
bigint Gehele getallen in het bereik -2^63 (-9.223.372.036.854.775.808) tot 2^63-1 (9.223.372.036.854.775.807).
float Getallen met drijvende komma in het bereik 1,79E+308 tot -2,23E-308, 0 en 2,23E-308 tot 1,79E+308. Decimale waarden met drijvende komma hebben over het algemeen geen exacte binaire weergave. Verlies van precisie kan worden ervaren. Dit is niet specifiek voor Azure Stream Analytics, maar treedt op in alle implementaties van drijvendekommanummers.
nvarchar(max) Tekstwaarden, bestaande uit Unicode-tekens. Opmerking: een andere waarde dan max wordt niet ondersteund.
datum/tijd Definieert een datum die wordt gecombineerd met een tijd van de dag met fractionele seconden (7 cijfers, 100 nanoseconden precisie) die is gebaseerd op een 24-uurs klok en ten opzichte van UTC (tijdzone offset 0).
bit Een geheel getal dat een waarde van 1, 0 of NULL kan hebben. Dit wordt ondersteund in compatibiliteitsniveau 1.2 en hoger.
opnemen Set van naam/waarde-paren. Waarden moeten van het ondersteunde gegevenstype zijn.
matrix Geordende verzameling waarden. Waarden moeten van het ondersteunde gegevenstype zijn.

U kunt deelnemen aan (of vergelijken) een bigint en een float-gegevenstype. Het werkt in alle gevallen correct, met uitzondering van de zeer grote bigint-waarden die niet kunnen worden weergegeven.

Notitie

Bij het lezen van bigint-gegevenstypen buiten het bereik dat door Azure Stream Analytics wordt ondersteund, kan uw Stream Analytics-taak de gebeurtenissen niet deserialiseren met het foutbericht InputDeserializationError. U kunt de gegevens vooraf verwerken en converteren naar tekenreeks. Een optie is het gebruik van Azure-functies om de gegevens vooraf te verwerken en dergelijke grote gehele getallen te converteren naar een tekenreeks.

Typeconversies

Dit zijn de regels voor het converteren van gegevenstypen:

  • Conversie zonder precisieverlies tijdens invoerlees- en uitvoerschrijfbewerkingen is impliciet en is altijd succesvol
  • Precisieverlies en overloop in schrijfbewerkingen voor uitvoer worden verwerkt door geconfigureerd foutbeleid (ingesteld op Neerzetten of Opnieuw proberen)
  • Typeconversiefouten die optreden tijdens uitvoerschrijfbewerkingen, worden verwerkt door het foutbeleid
  • Typeconversiefouten die optreden tijdens invoerleesbewerkingen zorgen ervoor dat de taak de gebeurtenis laat vallen

Er kan een verlies van precisie optreden bij het converteren van waarden naar float. Het is niet specifiek voor Azure Stream Analytics, maar voor het gegevenstype float in het algemeen. Als zodanig wordt het niet beschouwd als een fout. In het geval dat elk cijfer moet worden bewaard, moeten de gegevens worden gelezen als tekenreeks.

Gegevens casten

Er zijn vier functies in de streaming SQL-taal die handig zijn voor het observeren en aanpassen van het gegevenstype van uw gegevens.

  • CAST : cast een enkele kolom naar een bepaald type - mislukt de taak in het geval van een conversiefout
  • TRY_CAST : één kolom naar een bepaald type casten- fouten worden doorgelaten als NULL. Zie invoervalidatie voor het beste gebruik TRY_CAST
  • CREATE TABLE : definieer één expliciet schema voor een invoer. Rijen met conversiefouten worden verwijderd uit de stream
  • GetType : retourneert het type kolom

Voor de meeste gebruiksvoorbeelden is de aanbevolen optie om TRY_CAST te gebruiken. Deze functie beveiligt downstreamverwerking door het uitvoertype te garanderen, terwijl het verlies van gegevens wordt voorkomen door de waarde fout te vervangen door NULL. De rij wordt niet verwijderd en die oorspronkelijke waarde kan nog steeds worden geprojecteerd in een andere kolom.

Voor sterke garanties is de aanbevolen optie CREATE TABLE te gebruiken. Deze benadering maakt het mogelijk om de taak te informeren over het schema van een bepaalde invoer, zonder risico op afwijking. Het nadeel is dat er slechts één schema kan worden gedefinieerd voor een bepaalde invoer en dat niet-compatibele rijen worden verwijderd.

Indien mogelijk moeten alle castingbewerkingen expliciet via deze functies worden uitgevoerd, in plaats van impliciet (op de achtergrond) in andere functies. Dit voorkomt niet-overeenkomende typen, onverwacht gedrag en invoegfouten voor sterk getypte uitvoer, zoals SQL-databases. Zie invoervalidatie voor informatie over het beveiligen van de hoofdquerylogica tegen dergelijke fouten.

Conversie naar bit

Waarden worden geconverteerd tussen float en bit met de volgende regels:

Van Tot
(BIT) 1 (FLOAT) 1.0
(BIT) 0 (FLOAT) 0,0
(BIT) NULL (FLOAT) NULL
(FLOAT) 0,0 (BIT) 0
(FLOAT) elke andere waarde (BIT) 1
(FLOAT) NULL (BIT) NULL

Typetoewijzingen en serialisatie-indelingen

Gegevenstype CSV in CSV-out JSON in JSON-out Avro in Avro uit
bigint tekenreeks geconverteerd naar een 64-bits geheel getal met tekenteken 64-bits geheel getal met tekenreeks geconverteerd naar een tekenreeks met behulp van taakcultuur getal: geheel getal geconverteerd naar 64-bits ondertekend geheel getal;

Booleaanse waarde: in compatibiliteitsniveau 1.1 en lager wordt 'false' geconverteerd naar 0, 'true' wordt geconverteerd naar 1
getal: geheel getal long en int geconverteerd naar 64-bits geheel getal met teken;

Booleaanse waarde: in compatibiliteitsniveau 1.1 en lager wordt false geconverteerd naar 0, waar wordt geconverteerd naar 1
long
float tekenreeks geconverteerd naar 64-bits ondertekend float point number 64-bits ondertekend floatpuntnummer geconverteerd naar tekenreeks met behulp van taakcultuur getal: breuk geconverteerd naar 64-bits ondertekend floatpuntnummer getal: breuk double and float converted to 64 bit signed float point number double
nvarchar(max) tekenreeks tekenreeks tekenreeks tekenreeks tekenreeks tekenreeks
Datetime tekenreeks geconverteerd naar datum/tijd volgens ISO 8601-standaard tekenreeks met ISO 8601-standaard tekenreeks geconverteerd naar datum/tijd volgens ISO 8601-standaard datum/tijd geconverteerd naar tekenreeks met iso 8601-standaard tekenreeks geconverteerd naar datum/tijd volgens ISO 8601-standaard datum/tijd geconverteerd naar tekenreeks met iso 8601-standaard
bit (compatibiliteitsniveau 1.2 en hoger) tekenreeks 'true', 'false' of 'null' wordt geconverteerd naar een geheel getal 1, 0 of null. geconverteerd naar tekenreeks 'true' of 'false' Booleaanse waarde: 'false' wordt geconverteerd naar 0, 'true' wordt geconverteerd naar 1 Booleaanse waarde: booleaanse waarde Booleaanse waarde: onwaar wordt geconverteerd naar 0, waar wordt geconverteerd naar 1 booleaans
Record N.v.t. Niet ondersteund, 'Record'-tekenreeks wordt uitgevoerd JSON-object JSON-object Avro-recordtype Avro-recordtype
Array N.v.t. Niet ondersteund, 'Matrix'-tekenreeks wordt uitgevoerd JSON-object JSON-object Avro-recordtype Avro-recordtype

Notitie

Er is geen gegevenstypeconversie nodig voor Parquet.

Typetoewijzing bij het schrijven naar gestructureerde gegevensarchieven

Gegevenstype SQL Power BI Azure Cosmos DB PostgreSQL Azure Data Explorer
bigint bigint, int, smallint, tinyint, alle tekenreekstypen (ntext, nvarchar, teken, ...) ja numeriek: geheel getal bigint dynamisch, int, lang
float float, real, decimal, numeriek, all string types ( ntext, nvarchar, char, ...) ja getal: breuk dubbele precisie, numeriek. Beperkt tot 1.78E+308 dynamisch, echt, dubbel
nvarchar(max) Alle tekenreekstypen (ntext, nvarchar, char, uniqueidentifier...) ja tekenreeks teken variërend, tekst dynamisch, tekenreeks
Datetime datetime, datetime2, datetimeoffset, alle tekenreekstypen ( ntext, nvarchar, char, ...) ja datum/tijd geconverteerd naar tekenreeks met iso 8601-standaard tijdstempel, tijd. De tijdzoneoptie wordt ondersteund, maar er wordt geen tijdzone opgegeven dynamisch, tekenreeks, datum/tijd
bit (compatibiliteitsniveau 1.2 en hoger) bigint, int, smallint, tinyint, bit, alle tekenreekstypen (ntext, nvarchar, char, ...) ja Booleaanse waarde: 1 wordt geconverteerd naar waar, 0 geconverteerd naar onwaar bit dynamisch, bool
Record Niet ondersteund, 'Record'-tekenreeks wordt uitgevoerd Niet ondersteund, 'Record'-tekenreeks wordt uitgevoerd JSON-object Niet ondersteund dynamic, bool, long, datetime, byte array, real, double, string
Array Niet ondersteund, 'Matrix'-tekenreeks wordt uitgevoerd Niet ondersteund, 'Matrix'-tekenreeks wordt uitgevoerd JSON-object Niet ondersteund dynamisch, tekenreeks