Tipi di dati - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tipi di dati

Ciascun valore che Amazon Redshift memorizza o recupera ha un tipo di dati con un set fisso di proprietà associate. I tipi di dati vengono dichiarati al momento della creazione delle tabelle. Un tipo di dati limita il set di valori che un argomento o una colonna può contenere.

Nella tabella seguente sono elencati i tipi di dati che è possibile usare nelle tabelle di Amazon Redshift.

Tipo di dati Alias Descrizione
SMALLINT INT2 Intero a due byte firmato
INTEGER INT, INT4 Intero a quattro byte firmato
BIGINT INT8 Intero a otto byte firmato
DECIMAL NUMERIC Numerico esatto di precisione selezionabile
REAL FLOAT4 Numero in virgola mobile a precisione singola
DOUBLE PRECISION FLOAT8, FLOAT Numero in virgola mobile a precisione doppia
CHAR CHARACTER, NCHAR, BPCHAR Stringa di caratteri a lunghezza fissa
VARCHAR CHARACTER VARYING, NVARCHAR, TEXT Stringa di caratteri a lunghezza variabile con un limite definito dall'utente
DATE Data di calendario (anno, mese, giorno)
TIME TIME WITHOUT TIME ZONE Ora del giorno
TIMETZ TIME WITH TIME ZONE Ora del giorno con fuso orario
TIMESTAMP TIMESTAMP WITHOUT TIME ZONE Data e ora (senza fuso orario)
TIMESTAMPTZ TIMESTAMP WITH TIME ZONE Data e ora (con fuso orario)
INTERVAL YEAR TO MONTH Durata del periodo in ordine anno-mese
INTERVAL DAY TO SECOND Durata del tempo espressa in base al secondo ordine
BOOLEAN BOOL Booleani logici (true/false)
HLLSKETCH Tipo usato con gli HyperLogLog schizzi.
SUPER Un tipo di dati superset che comprende tutti i tipi scalari di Amazon Redshift, inclusi i tipi complessi come ARRAY e STRUCTS.
VARBYTE VARBINARY, BINARY VARYING Valore binario a lunghezza variabile
GEOMETRY Dati spaziali
GEOGRAPHY Dati spaziali
Nota

Per informazioni sui tipi di dati non supportati, come “char” (da notare che char è racchiuso tra virgolette), consultare Tipi di dati PostgreSQL non supportati.

Caratteri multibyte

Il tipo di dati VARCHAR supporta caratteri multibyte UTF-8 fino a un massimo di quattro byte. I caratteri a cinque byte o più non sono supportati. Per calcolare la dimensione di una colonna VARCHAR che contiene caratteri multibyte, moltiplica il numero di caratteri per il numero di byte per carattere. Ad esempio, se una stringa ha quattro caratteri cinesi e ciascun carattere è lungo tre byte, allora avrai bisogno di una colonna VARCHAR(12) per memorizzare la stringa.

Il tipo di dati VARCHAR non supporta i punti di codice UTF-8 non validi seguenti:

0xD800 – 0xDFFF (Sequenze di byte: ED A0 80ED BF BF)

Il tipo di dati CHAR non supporta caratteri multibyte.

Conversione e compatibilità dei tipi

Di seguito è riportata una discussione su come le regole di conversione dei tipi e la compatibilità dei tipi di dati funzionano in Amazon Redshift.

Compatibilità

La corrispondenza dei tipi di dati e la corrispondenza di valori letterali e costanti con tipi di dati avviene durante diverse operazioni di database, comprese le seguenti:

  • Operazioni DML (Data Manipulation Language) sulle tabelle

  • Query UNION, INTERSECT ed EXCEPT

  • Espressioni CASE

  • Valutazione di predicati, come LIKE e IN

  • Valutazione di funzioni SQL che effettuano confronti o estrazioni di dati

  • Confronti con operatori matematici

I risultati di queste operazioni dipendono dalle regole di conversione dei tipi e dalla compatibilità dei tipi di dati. La compatibilità implica che non è one-to-one sempre richiesta la corrispondenza di un determinato valore e di un determinato tipo di dati. Dato che alcuni tipi di dati sono compatibili, una conversione implicita o coercizione può essere effettuata (per maggiori informazioni, consultare Tipi di conversione implicita). Quando i tipi di dati non sono compatibili, a volte è possibile convertire un valore da un tipo di dati a un altro usando una funzione di conversione esplicita.

Regole generali di conversione e compatibilità

Osserva le seguenti regole di conversione e compatibilità:

  • In generale, i tipi di dati che rientrano nella stessa categoria (come diversi tipi di dati numerici) sono compatibili ed è possibile convertirli in modo implicito.

    Ad esempio, con la conversione implicita è possibile inserire un valore decimale in una colonna intera. Il decimale viene arrotondato per produrre un numero intero. Altrimenti, è possibile estrarre un valore numerico, come 2008, da una data e inserirlo nella colonna intera.

  • I tipi di dati numerici applicano le condizioni di overflow che si verificano quando si tenta di inserire valori. out-of-range Ad esempio, un valore decimale con una precisione di 5 non rientra in una colonna decimale che è stata definita con una precisione di 4. Un intero o la parte intera di un decimale non viene mai troncata; tuttavia, è possibile arrotondare la parte frazionaria di un decimale per difetto o per eccesso, come appropriato. Tuttavia, i risultati di espliciti cast di valori selezionati dalle tabelle non sono arrotondati.

  • Diversi tipi di stringhe di caratteri sono compatibili; le stringhe colonna VARCHAR contenenti dati a byte singolo e le stringhe colonna CHAR sono confrontabili e convertibili in modo implicito. Le stringhe VARCHAR che contengono dati multibyte non sono confrontabili. Inoltre, è possibile convertire una stringa di caratteri in un valore numerico, timestamp o data se la stringa è un valore letterale appropriato; eventuali spazi iniziali o finali vengono ignorati. Per contro, è possibile convertire un valore numero, timestamp o data in una stringa di caratteri a lunghezza variabile o fissa.

    Nota

    È necessario che una stringa di caratteri per la quale si desidera eseguire il cast a un tipo numerico contenga una rappresentazione in caratteri di un numero. Ad esempio, è possibile eseguire il cast per le stringhe '1.0' o '5.9' a valori decimali, ma non è possibile eseguire il cast per la stringa 'ABC' a nessun tipo numerico.

  • Se si confrontano i valori DECIMAL con le stringhe di caratteri, Amazon Redshift tenta di convertire la stringa di caratteri in un valore DECIMAL. Quando si confrontano tutti gli altri valori numerici con stringhe di caratteri, i valori numerici vengono convertiti in stringhe di caratteri. Per applicare la conversione opposta (ad esempio, convertire le stringhe di caratteri in numeri interi o convertire i valori DECIMAL in stringhe di caratteri), usa una funzione esplicita, ad esempio, CAST.

  • Per convertire valori DECIMAL o NUMERIC a 64 bit in una precisione più elevata, è necessario usare una funzione di conversione specifica come le funzioni CAST o CONVERT.

  • Quando si convertono DATE o TIMESTAMP in TIMESTAMPTZ o si converte TIME in TIMESTAMPTZ, il fuso orario viene impostato sul fuso orario della sessione attuale. Il fuso orario della sessione è UTC per impostazione predefinita. Per ulteriori informazioni sulle impostazioni del fuso orario della sessione, consultare timezone.

  • Allo stesso modo, TIMESTAMPTZ viene convertito in DATE, TIME o TIMESTAMP sulla base del fuso orario della sessione corrente. Il fuso orario della sessione è UTC per impostazione predefinita. Dopo la conversione, le informazioni sul fuso orario vengono rimosse.

  • Le stringhe di caratteri che rappresentano un timestamp con fuso orario specificato vengono convertite in TIMESTAMPTZ usando il fuso orario della sessione corrente, che di default è UTC. Analogamente, le stringhe di caratteri che rappresentano un tempo con fuso orario specificato vengono convertite in TIMETZ usando il fuso orario della sessione attuale, che per impostazione predefinita è UTC.

Tipi di conversione implicita

Ci sono due tipi di conversione implicita:

  • Conversioni implicite negli incarichi, come i valori delle impostazioni nei comandi INSERT o UPDATE.

  • Conversioni implicite nelle espressioni, come l'esecuzione di confronti nella clausola WHERE.

La tabella seguente elenca i tipi di dati che è possibile convertire in modo implicito negli incarichi o nelle espressioni. È anche possibile usare una funzione di conversione esplicita per eseguire queste conversioni.

Dal tipo Al tipo
BIGINT (INT8) BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
CHAR VARCHAR
DATE CHAR
VARCHAR
TIMESTAMP
TIMESTAMPTZ
DECIMAL (NUMERIC) BIGINT (INT8)
CHAR
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
DOUBLE PRECISION (FLOAT8) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT, INT4)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
INTEGER (INT, INT4) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
REAL (FLOAT4)
SMALLINT (INT2)
VARCHAR
REAL (FLOAT4) BIGINT (INT8)
CHAR
DECIMAL (NUMERIC)
INTEGER (INT, INT4)
SMALLINT (INT2)
VARCHAR
SMALLINT (INT2) BIGINT (INT8)
BOOLEAN
CHAR
DECIMAL (NUMERIC)
DOUBLE PRECISION (FLOAT8)
INTEGER (INT, INT4)
REAL (FLOAT4)
VARCHAR
TIMESTAMP CHAR
DATE
VARCHAR
TIMESTAMPTZ
TIME
TIMESTAMPTZ CHAR
DATE
VARCHAR
TIMESTAMP
TIMETZ
TIME VARCHAR
TIMETZ
INTERVAL DAY TO SECOND
TIMETZ VARCHAR
TIME
GEOMETRY GEOGRAPHY
GEOGRAPHY GEOMETRY
Nota

Le conversioni implicite tra TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ o stringhe di caratteri usano il fuso orario della sessione corrente. Per informazioni sulle impostazioni del fuso orario corrente, consultare timezone.

I tipi di dati GEOMETRY e GEOGRAPHY non possono essere convertiti implicitamente in nessun altro tipo di dati, eccetto l’un l’altro. Per ulteriori informazioni, consulta Funzione CAST.

Il tipo di dati VARBYTE non può essere convertito implicitamente in nessun altro tipo di dati. Per ulteriori informazioni, consulta Funzione CAST.

Utilizzo della digitazione dinamica per il tipo di dati SUPER

Amazon Redshift utilizza la digitazione dinamica per elaborare i dati SUPER senza schema senza la necessità di dichiarare i tipi di dati prima di utilizzarli nella query. La digitazione dinamica utilizza i risultati della navigazione nelle colonne di dati SUPER senza doverne eseguire esplicitamente il casting nei tipi Amazon Redshift. Per ulteriori informazioni su come usare la digitazione dinamica per il tipo di dati SUPER, consultare Digitazione dinamica.

È possibile eseguire il casting di valori SUPER da e verso altri tipi di dati con alcune eccezioni. Per ulteriori informazioni, consultare Limitazioni.