Tipi di dati SQL legacy

Questo documento descrive i tipi di dati supportati dalla sintassi delle query SQL precedente di BigQuery. La sintassi delle query preferita per BigQuery è GoogleSQL. Per informazioni sui tipi di dati in GoogleSQL, consulta la pagina relativa ai tipi di dati di GoogleSQL.

Tipi di dati SQL legacy

I dati possono includere i seguenti tipi di dati:

Tipo di dati Valori possibili
STRING Dati UTF-8 con caratteri di lunghezza variabile.
BYTES Dati binari di lunghezza variabile.
  • I dati dei BYTES importati devono essere codificati in base64, ad eccezione dei dati Avro BYTES, che BigQuery può leggere e convertire.
  • I dati dei byte letti da una tabella BigQuery sono codificati in base64, a meno che non li esporti in formato Avro, nel qual caso si applica il tipo di dati byte Avro.
INTEGER

Numero intero a 64 bit con segno.

Se utilizzi l'API BigQuery per caricare un numero intero che non rientra nell'intervallo [-253+1, 253-1] (nella maggior parte dei casi, questo valore corrisponde a maggiore di 9.007.199.254.740.991) in una colonna di numeri interi (INT64), devi passarlo come stringa per evitare il danneggiamento dei dati. Questo problema è causato da una limitazione della dimensione dei numeri interi in JSON/ECMAScript. Per maggiori informazioni, consulta la sezione Numeri di RFC 7159.

FLOAT Formato con rappresentazione in virgola mobile a precisione doppia.
NUMERIC SQL precedente supporta limitato per NUMERIC. Per maggiori informazioni, consulta Numero esatto in SQL precedente.
BIGNUMERICO L'SQL precedente ha un supporto limitato per BIGNUMERIC. Per maggiori informazioni, consulta Numero esatto in SQL precedente.
BOOLEANO
  • Formato CSV: 1 o 0, true o false, t o f, yes o no o y o n (tutti senza distinzione tra maiuscole e minuscole).
  • Formato JSON: true o false (senza distinzione tra maiuscole e minuscole).
RECORD Una raccolta di uno o più altri campi.
TIMESTAMP

Puoi descrivere i tipi di dati TIMESTAMP come timestamp UNIX o data/ora del calendario. BigQuery archivia internamente i dati TIMESTAMP come timestamp UNIX con precisione in microsecondi.

Timestamp UNIX

Un numero decimale positivo o negativo. Un numero positivo specifica il numero di secondi dall'epoca (1970-01-01 00:00:00 UTC), mentre un numero negativo specifica il numero di secondi prima dell'epoca. Vengono mantenute fino a sei posizioni decimali (precisione in microsecondi).

Stringhe per data e ora

Una stringa di data e ora nel formato YYYY-MM-DD HH:MM:SS. Sono supportati gli indicatori UTC e Z.

Puoi fornire un offset di fuso orario nelle stringhe con data e ora, ma BigQuery non lo conserva dopo aver convertito il valore nel formato interno. Se devi conservare i dati relativi al fuso orario originale, memorizza lo scarto del fuso orario in una colonna separata. Lo zero iniziale è obbligatorio quando specifichi un offset di fuso orario a una sola cifra.

Le stringhe di data e ora devono essere racchiuse tra virgolette se si utilizza il formato JSON.

Esempi

I seguenti esempi mostrano modi identici per descrivere date specifiche, nei formati timestamp UNIX e stringa data e ora.

Evento Formato timestamp UNIX Formato stringa data/ora
Terremoto di lieve entità (M4.2) vicino a Oklahoma City
1408452095.220
1408452095.220000
2014-08-19 07:41:35.220 -05:00
2014-08-19 12:41:35.220 UTC
2014-08-19 12:41:35.220
2014-08-19 12:41:35.220000
2014-08-19T12:41:35.220Z
Neil Armstrong mette piede sulla luna
-14182916
1969-07-20 20:18:04
1969-07-20 20:18:04 UTC
1969-07-20T20:18:04
Scadenza per la correzione del bug Y10k
253402300800
2.53402300800e11
10000-01-01 00:00
DATA SQL precedente supporta limitato per DATE. Per maggiori informazioni, consulta Tempo civile in SQL precedente.
TEMPO L'SQL precedente ha un supporto limitato per TIME. Per maggiori informazioni, consulta Tempo civile in SQL precedente.
DATETIME L'SQL precedente ha un supporto limitato per DATETIME. Per maggiori informazioni, consulta Tempo civile in SQL precedente.

Valore numerico esatto in SQL precedente

Puoi leggere valori NUMERIC o BIGNUMERIC in clausole che non modificano, come SELECT list (with aliases), GROUP BY keys, campi pass-through in funzioni finestra e così via. Tuttavia, qualsiasi calcolo su valori NUMERIC o BIGNUMERIC, inclusi i confronti, produce risultati indefiniti.

Le seguenti funzioni di trasmissione e conversione sono supportate in SQL precedente:

  • CAST(<numeric> AS STRING)
  • CAST(<bignumeric> AS STRING)
  • CAST(<string> AS NUMERIC)
  • CAST(<string> AS BIGNUMERIC)

Tempo civile in SQL precedente

Puoi leggere i tipi di dati dell'ora civile (DATE, TIME e DATETIME) ed elaborarli con operatori che non modificano, ad esempio SELECT list (with aliases), GROUP BY keys, campi pass-through nelle funzioni finestra e così via. Tuttavia, qualsiasi altro calcolo su valori dell'ora civile, inclusi i confronti, genera risultati indefiniti.

Le seguenti funzioni di trasmissione e conversione sono supportate in SQL precedente:

  • CAST(<date> AS STRING)
  • CAST(<time> AS STRING)
  • CAST(<datetime> AS STRING)
  • CAST(<string> AS DATE)
  • CAST(<string> AS TIME)
  • CAST(<string> AS DATETIME)

In pratica, il linguaggio SQL precedente interpreta i valori dell'ora civile come numeri interi e le operazioni sui numeri interi che a tuo parere sono valori dell'ora civile producono risultati imprevisti.

Per calcolare i valori utilizzando tipi di dati in ora civile, considera GoogleSQL, che supporta tutte le operazioni SQL per i tipi di dati DATE, DATETIME e TIME.

Passaggi successivi

  • Per impostare il tipo di dati di un campo utilizzando l'API, consulta schema.fields.type.
  • Per i tipi di dati GoogleSQL, consulta la pagina relativa ai tipi di dati.