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, ...) numerico: integer bigint dynamic, int, long
float float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) Numero: frazione precisione doppia, numerica. Limitato a 1,78E+308 dinamica, reale, double
nvarchar(max) Tutti i tipi di stringa (ntext, nvarchar, char, uniqueidentifier...) string carattere variabile, testo dynamic, string
datetime datetime, datetime2, datetimeoffset, tutti i tipi di stringa ( ntext, nvarchar, char, ...) 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, ...) 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