Tipi di dati SQL legacy

Questo documento descrive in dettaglio i tipi di dati supportati dall'interfaccia sintassi delle query SQL precedente. La sintassi delle query preferita per BigQuery è GoogleSQL. Per informazioni sui tipi di dati in GoogleSQL, consulta i tipi di dati GoogleSQL.

Tipi di dati SQL precedenti

I dati possono includere i seguenti tipi di dati:

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

Numero intero a 64 bit con segno.

Se utilizzi l'API BigQuery per caricare un numero intero al di fuori dell'intervallo di [-253+1, 253-1] (nella maggior parte dei casi, significa maggiore di 9.007.199.254.740.991), in un numero intero (INT64), devi passarla come stringa per evitare il danneggiamento dei dati. Questo problema è causato da una limitazione della dimensione dei numeri interi in JSON/ECMAScript. Per ulteriori informazioni, vedi la sezione Numeri di RFC 7159.

FLOAT Formato a virgola mobile a precisione doppia.
NUMERICO L'SQL precedente ha un supporto limitato per NUMERIC. Per ulteriori informazioni, consulta Numerico esatto in SQL precedente.
BIGNUMERIC L'SQL precedente ha un supporto limitato per BIGNUMERIC. Per ulteriori informazioni, consulta Numerico 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 (non è sensibile alle maiuscole).
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 memorizza internamente i dati TIMESTAMP come timestamp UNIX con una precisione di 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 conservate fino a 6 cifre decimali (precisione in microsecondi).

Stringhe di data e ora

Una stringa di data e ora nel formato YYYY-MM-DD HH:MM:SS. I parametri UTC e Z sono supportati.

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

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

Esempi

Gli esempi riportati di seguito mostrano modi identici per descrivere date specifiche, sia in formato timestamp UNIX che in formato di stringa di data e ora.

Evento Formato del timestamp UNIX Formato della 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 ulteriori informazioni, consulta Ora civile in SQL precedente.
TEMPO L'SQL precedente ha un supporto limitato per TIME. Per ulteriori informazioni, consulta Tempo civile in SQL precedente.
DATETIME L'SQL precedente ha un supporto limitato per DATETIME. Per ulteriori informazioni, consulta Ora civile in SQL precedente.

Valore numerico esatto in SQL precedente

Puoi leggere i valori NUMERIC o BIGNUMERIC in clausole di non modifica come SELECT list (with aliases), GROUP BY keys e campi passthrough in funzioni finestra e così via. Tuttavia, qualsiasi calcolo sui valori NUMERIC o BIGNUMERIC, inclusi i confronti, produce risultati non definiti.

Le seguenti funzioni di conversione 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 relativi al tempo civile (DATE, TIME e DATETIME) ed elaborarli con operatori non modificatori come SELECT list (with aliases), GROUP BY keys e campi passthrough nelle funzioni window e così via. Tuttavia, qualsiasi altro calcolo sui valori del tempo civile, inclusi i confronti, produce risultati non definiti.

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, SQL precedente interpreta i valori di tempo civile come numeri interi e le operazioni su numeri interi che ritieni essere valori di tempo civile producono risultati imprevisti.

Per calcolare i valori utilizzando tipi di dati dell'ora civile, considera GoogleSQL, che supporta tutte le operazioni sul DATE, DATETIME e Tipi di dati di 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.