Tipi di dati SQL legacy

Questo documento descrive in dettaglio 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 Tipi di dati di GoogleSQL.

Tipi di dati SQL legacy

I tuoi dati possono includere i seguenti tipi di dati:

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

Numero intero con firma a 64 bit.

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

FLOAT Formato in virgola mobile a precisione doppia.
NUMERIC L'SQL precedente ha un supporto limitato per NUMERIC. Per maggiori informazioni, consulta Numeri esatti nell'SQL precedente.
GRANDE NUMERO L'SQL precedente ha un supporto limitato per BIGNUMERIC. Per maggiori informazioni, consulta Numeri esatti nell'SQL precedente.
BOOLEANO
  • Formato CSV: 1 o 0, true o false, t o f, yes o no oppure 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 come data e 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 cifre decimali (precisione in microsecondi).

Stringhe relative a data e ora

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

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

Se utilizzi il formato JSON, le stringhe di data e ora devono essere citate.

Esempi

I seguenti esempi mostrano modi identici per descrivere date specifiche, sia nel formato timestamp UNIX sia nella stringa data e ora.

Evento Formato timestamp UNIX Formato stringa data/ora
Terremoto di minore entità (M4.2) nei pressi di 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
Termine ultimo per la correzione del bug Y10.000
253402300800
2.53402300800e11
10000-01-01 00:00
DATA L'SQL precedente ha un supporto 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.

Numeri esatti nell'SQL precedente

Puoi leggere i valori NUMERIC o BIGNUMERIC in clausole non modificabili come SELECT list (with aliases), GROUP BY keys e campi passthrough nelle 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 nell'SQL precedente:

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

Ora civile in SQL precedente

Puoi leggere i tipi di dati relativi all'ora civile (DATE, TIME e DATETIME) ed elaborarli con operatori non modificabili come SELECT list (with aliases), GROUP BY keys, campi pass-through nelle funzioni finestra e così via. Tuttavia, qualsiasi altro calcolo basato su valori del tempo civile, inclusi i confronti, produce risultati non definiti.

Le seguenti funzioni di trasmissione e conversione sono supportate nell'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 codice SQL precedente interpreta i valori dell'ora civile come numeri interi, mentre le operazioni su numeri interi che ritieni siano valori del tempo civile producono risultati imprevisti.

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

Passaggi successivi