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 |