Tipos de dados SQL antigos

Este documento detalha os tipos de dados suportados pela sintaxe de consulta SQL antigo do BigQuery. A sintaxe de consulta preferida para o BigQuery é o GoogleSQL. Para obter informações sobre os tipos de dados no GoogleSQL, consulte os tipos de dados GoogleSQL.

Tipos de dados SQL antigos

Os seus dados podem incluir os seguintes tipos de dados:

Tipo de dados Valores possíveis
STRING Dados de carateres de comprimento variável (UTF-8).
BYTES Dados binários de comprimento variável.
  • Os dados BYTES importados têm de ser codificados em base64, exceto os dados BYTES Avro, que o BigQuery pode ler e converter.
  • Os dados BYTES lidos de uma tabela do BigQuery são codificados em base64, a menos que os exporte para o formato Avro, caso em que se aplica o tipo de dados de bytes do Avro.
INTEGER

Número inteiro com sinal de 64 bits.

Se estiver a usar a API BigQuery para carregar um número inteiro fora do intervalo de [-253+1, 253-1] (na maioria dos casos, isto significa um número superior a 9 007 199 254 740 991) numa coluna de número inteiro (INT64), tem de o transmitir como uma string para evitar a danificação de dados. Este problema é causado por uma limitação no tamanho dos números inteiros em JSON/ECMAScript. Para mais informações, consulte a secção Números da RFC 7159.

FLOAT Formato de vírgula flutuante de dupla precisão.
NUMERIC O SQL antigo tem suporte limitado para NUMERIC. Para mais informações, consulte o artigo Número exato no SQL antigo.
BIGNUMERIC O SQL antigo tem suporte limitado para BIGNUMERIC. Para mais informações, consulte o artigo Número exato no SQL antigo.
BOOLEAN
  • Formato CSV: 1 ou 0, true ou false, t ou f, yes ou no, ou y ou n (tudo sem distinção entre maiúsculas e minúsculas).
  • Formato JSON: true ou false (sem distinção entre maiúsculas e minúsculas).
RECORD Uma coleção de um ou mais outros campos.
TIMESTAMP

Pode descrever os tipos de dados TIMESTAMP como indicações de tempo UNIX ou datas/horas de calendário. O BigQuery armazena dados TIMESTAMP internamente como uma data/hora UNIX com precisão de microssegundos.

Indicações de tempo UNIX

Um número decimal positivo ou negativo. Um número positivo especifica o número de segundos desde a época (1970-01-01 00:00:00 UTC) e um número negativo especifica o número de segundos antes da época. São preservadas até 6 casas decimais (precisão de microssegundos).

Strings de data e hora

Uma string de data e hora no formato YYYY-MM-DD HH:MM:SS. Os especificadores UTC e Z são suportados.

Pode fornecer um desvio de fuso horário nas suas strings de data e hora, mas o BigQuery não preserva o desvio após converter o valor para o respetivo formato interno. Se precisar de preservar os dados originais do fuso horário, armazene o desvio do fuso horário numa coluna separada. O zero à esquerda é obrigatório quando especifica um desvio de fuso horário de um único dígito.

As strings de data e hora têm de estar entre aspas quando usar o formato JSON.

Exemplos

Os exemplos seguintes mostram formas idênticas de descrever datas específicas, nos formatos de data/hora de string e de data/hora UNIX.

Evento Formato de data/hora UNIX Formato da string de data/hora
Terramoto menor (M4,2) perto de 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 pisa a Lua
-14182916
1969-07-20 20:18:04
1969-07-20 20:18:04 UTC
1969-07-20T20:18:04
Prazo para corrigir o erro do ano 10 000
253402300800
2.53402300800e11
10000-01-01 00:00
DATA O SQL antigo tem suporte limitado para DATE. Para mais informações, consulte o artigo Hora civil no SQL antigo.
HORA O SQL antigo tem suporte limitado para TIME. Para mais informações, consulte o artigo Hora civil no SQL antigo.
DATA/HORA O SQL antigo tem suporte limitado para DATETIME. Para mais informações, consulte o artigo Hora civil no SQL antigo.

Número exato no SQL antigo

Pode ler valores NUMERIC ou BIGNUMERIC em cláusulas não modificadoras, como SELECT list (with aliases), GROUP BY keys e campos de passagem em funções de janela, entre outros. No entanto, qualquer cálculo sobre valores NUMÉRICOS ou BIGNUMÉRICOS, incluindo comparações, produz resultados indefinidos.

As seguintes funções de conversão e conversão de tipo são suportadas no SQL antigo:

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

Hora civil no SQL antigo

Pode ler tipos de dados de hora civil (DATE, TIME e DATETIME) e processá-los com operadores não modificadores, como SELECT list (with aliases), GROUP BY keys e campos de passagem em funções de janela, etc. No entanto, qualquer outro cálculo sobre valores de hora civil, incluindo comparações, produz resultados indefinidos.

As seguintes funções de conversão e conversões são suportadas no SQL antigo:

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

Na prática, a SQL antiga interpreta os valores de tempo civil como números inteiros e as operações em números inteiros que considera serem valores de tempo civil produzem resultados inesperados.

Para calcular valores com tipos de dados de tempo civil, considere usar o GoogleSQL, que suporta todas as operações SQL nos tipos de dados DATE, DATETIME e TIME.

O que se segue?