Tipi di dati (Analisi di flusso di Azure)
In Analisi di flusso di Azure ogni record ha un tipo di dati correlato. Un tipo di dati descrive (e vincola) il set di valori che un record di tale tipo può contenere o un'espressione di tale tipo può produrre.
Si noti che si tratta di record con un tipo e non colonne. Ogni record di una colonna può avere un tipo diverso. Se questo sarà trasparente per la maggior parte delle applicazioni, consente una gestione semplice di scenari di deriva dello schema e altri modelli di digitazione insoliti.
Tipi di dati supportati
Di seguito sono elencati i tipi di dati supportati.
Tipo di dati | Descrizione |
---|---|
bigint | Numeri interi inclusi nell'intervallo compreso tra -2^63 (-9.223.372.036.854.775.808) e 2^63-1 (9.223.372.036.854.775.807). |
float | Numeri a virgola mobile inclusi negli intervalli compresi tra -1,79E+308 e -2,23E-308, 0 e tra 2,23E-308 e 1,79E+308. I valori decimali a virgola mobile in genere non hanno una rappresentazione binaria esatta. È possibile riscontrare una perdita di precisione. Non è specifico di Analisi di flusso di Azure, ma si verifica in tutte le implementazioni di numeri a virgola mobile. |
nvarchar(max) | Valori di testo, costituiti da caratteri Unicode. Nota: non è supportato un valore diverso da max. |
Datetime | Definisce una data combinata con un'ora del giorno con secondi frazionari (7 cifre, precisione di 100 nanosecondi) basata su un orologio di 24 ore e rispetto all'ora UTC (offset di fuso orario 0). |
bit | Intero che può accettare un valore pari a 1, 0 o NULL. Questa funzionalità è supportata nel livello di compatibilità 1.2 e versioni successive. |
record | Set di coppie di nomi/valori. I valori devono essere del tipo di dati supportato. |
array | Raccolta ordinata di valori. I valori devono essere del tipo di dati supportato. |
È possibile partecipare (o confrontare) un tipo di dati bigint e float. Funzionerà correttamente in tutti i casi, ad eccezione del caso dei valori bigint molto grandi che non possono essere rappresentati.
Nota
Durante la lettura di tipi di dati bigint al di fuori dell'intervallo, Analisi di flusso di Azure supporta, il processo di Analisi di flusso non riuscirà a deserializzare gli eventi con il messaggio di errore InputDeserializationError. È possibile pre-elaborare i dati e convertirli in stringa. Un'opzione consiste nell'usare funzioni di Azure per pre-elaborare i dati e convertire tali numeri interi di grandi dimensioni in stringa.
Conversioni di tipi
Queste sono le regole che regolano le conversioni dei tipi di dati:
- La conversione senza perdita di precisione durante le operazioni di lettura e scrittura dell'output di input è implicita e ha sempre esito positivo
- La perdita di precisione e l'overflow all'interno delle operazioni di scrittura di output vengono gestite dai criteri di errore configurati (impostati su Drop o Retry)
- Gli errori di conversione dei tipi che si verificano durante le operazioni di scrittura dell'output vengono gestiti dai criteri di errore
- Gli errori di conversione dei tipi che si verificano durante le operazioni di lettura dell'input causano l'eliminazione dell'evento da parte del processo
Una perdita di precisione può verificarsi durante la conversione di valori in float. Non è specifico di Analisi di flusso di Azure, ma del tipo di dati float in generale. Di conseguenza, non viene considerato un errore. Nel caso in cui ogni cifra debba essere conservata, i dati devono essere letti come stringa.
Cast dei dati
Nel linguaggio SQL di streaming sono disponibili quattro funzioni utili per osservare e modificare il tipo di dati.
- CAST: esegue il cast di una singola colonna a un determinato tipo. Il processo avrà esito negativo in caso di errore di conversione
-
TRY_CAST : viene eseguito il cast di una singola colonna a un determinato tipo. Gli errori vengono consentiti come NULL. Vedere Convalida dell'input per informazioni su come usare al meglio
TRY_CAST
- CREATE TABLE : definire un singolo schema esplicito per un input. Le righe con errori di conversione vengono rimosse dal flusso
- GetType : restituisce il tipo di una colonna
Per la maggior parte dei casi d'uso, l'opzione consigliata consiste nell'usare TRY_CAST. Questa funzione protegge l'elaborazione downstream assicurando il tipo di output, impedendo la perdita di dati sostituendo il valore in errore con NULL. La riga non viene eliminata e tale valore originale può comunque essere proiettato in un'altra colonna.
Per garanzie avanzate, l'opzione consigliata consiste nell'usare CREATE TABLE. Questo approccio consente di informare il processo dello schema di un determinato input, senza rischi di deviazione. Il compromesso è che solo un singolo schema può essere definito in un determinato input e le righe non conformi verranno eliminate.
Se possibile, tutte le operazioni di cast devono essere eseguite in modo esplicito tramite queste funzioni, anziché in modo implicito (invisibile all'utente) in altre funzioni. In questo modo si evitano mancate corrispondenze di tipo, comportamenti imprevisti ed errori di inserimento per output fortemente tipizzato come i database SQL. Vedere Convalida dell'input per informazioni su come proteggere la logica di query principale da tali errori.
Conversione in bit
I valori verranno convertiti tra float e bit con le regole seguenti:
Da | A |
---|---|
(BIT) 1 | (FLOAT) 1.0 |
(BIT) 0 | (FLOAT) 0.0 |
(BIT) NULL | (FLOAT) NULL |
(FLOAT) 0.0 | (BIT) 0 |
(FLOAT) qualsiasi altro valore | (BIT) 1 |
(FLOAT) NULL | (BIT) NULL |
Mapping dei tipi e formati di serializzazione
Tipo di dati | CSV in | Csv out | JSON in | JSON out | Avro in | Avro out |
---|---|---|---|---|---|---|
bigint | Stringa convertita in numero intero con segno a 64 bit | Intero con segno a 64 bit convertito in stringa usando le impostazioni cultura del processo | number: integer convertito in intero con segno a 64 bit; Valore booleano: nel livello di compatibilità 1.1 e inferiore a "false" viene convertito in 0, "true" viene convertito in 1 |
number: integer | long e int convertiti in intero con segno a 64 bit; Boolean: nel livello di compatibilità 1.1 e il valore false è convertito in 0, true viene convertito in 1 |
long |
float | Stringa convertita in numero a virgola mobile con segno a 64 bit | Numero di virgola float con segno a 64 bit convertito in stringa usando le impostazioni cultura del processo | Numero: frazione convertita in numero a virgola mobile con segno a 64 bit | Numero: frazione | Tipi double e float convertiti in numero a virgola mobile con segno a 64 bit | double |
nvarchar(max) | string | string | string | string | string | string |
datetime | Stringa convertita in datetime in base allo standard ISO 8601 | stringa che usa lo standard ISO 8601 | Stringa convertita in datetime in base allo standard ISO 8601 | Tipo datetime convertito in stringa usando lo standard ISO 8601 | Stringa convertita in datetime in base allo standard ISO 8601 | Tipo datetime convertito in stringa usando lo standard ISO 8601 |
bit (livello di compatibilità 1.2 e versioni successive) | la stringa "true", "false" o "null" viene convertita in valore intero 1, 0 o Null corrispondentemente | convertito in stringa "true" o "false" | Boolean: "false" viene convertito in 0, "true" viene convertito in 1 | Valore booleano: valore booleano | Booleano: false viene convertito in 0, true viene convertito in 1 | boolean |
Registrazione | N/D | Non supportato, viene restituita la stringa "Record" | Oggetto JSON | Oggetto JSON | Tipo record Avro | Tipo record Avro |
array | N/D | Non supportato, viene restituita la stringa "Array" | Oggetto JSON | Oggetto JSON | Tipo record Avro | Tipo record Avro |
Nota
Non è necessaria alcuna conversione del tipo di dati per Parquet.
Mapping dei tipi durante la scrittura in archivi dati strutturati
Tipo di dati | SQL | Power BI | Azure Cosmos DB | PostgreSQL | Esplora dati di Azure |
---|---|---|---|---|---|
bigint | bigint, int, smallint, tinyint, tutti i tipi di stringa (ntext, nvarchar, char, ...) | sì | numerico: integer | bigint | dynamic, int, long |
float | float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) | sì | Numero: frazione | precisione doppia, numerica. Limitato a 1,78E+308 | dinamica, reale, double |
nvarchar(max) | Tutti i tipi di stringa (ntext, nvarchar, char, uniqueidentifier...) | sì | string | carattere variabile, testo | dynamic, string |
datetime | datetime, datetime2, datetimeoffset, tutti i tipi di stringa ( ntext, nvarchar, char, ...) | sì | Tipo datetime convertito in stringa usando lo standard ISO 8601 | timestamp, ora. Opzione fuso orario supportata, ma non verrà fornito alcun fuso orario | dynamic, string, datetime |
bit (livello di compatibilità 1.2 e versioni successive) | bigint, int, smallint, tinyint, bit, tutti i tipi di stringa (ntext, nvarchar, char, ...) | sì | boolean: 1 viene convertito in true, 0 convertito in false | bit | dynamic, bool |
Registrazione | Non supportato, viene restituita la stringa "Record" | Non supportato, viene restituita la stringa "Record" | Oggetto JSON | Non supportato | dynamic, bool, long, datetime, matrice di byte, real, double, string |
array | Non supportato, viene restituita la stringa "Array" | Non supportato, viene restituita la stringa "Array" | Oggetto JSON | Non supportato | dynamic, string |