Tipos de dados do SQL legado

Neste documento, detalharemos os tipos de dados aceitos pela sintaxe de consulta SQL legada do BigQuery. A sintaxe de consulta de preferência para o BigQuery é o GoogleSQL. Para saber mais sobre os tipos de dados no GoogleSQL, consulte os tipos de dados do GoogleSQL.

Tipos de dados do SQL legado

Os dados podem ser dos tipos a seguir:

Tipo de dado Valores possíveis
STRING Dados de caracteres de comprimento variável (UTF-8).
BYTES Dados binários de comprimento variável.
  • Os dados BYTES importados precisam ser codificados em base64, exceto os do Avro, que o BigQuery pode ler e converter.
  • Os dados BYTES lidos a partir de uma tabela do BigQuery são codificados em base64, a menos que você os exporte para o formato Avro. Nesse caso, o tipo de dados BYTES do Avro é válido.
INTEGER

Inteiro assinado de 64 bits.

Se você estiver usando a API BigQuery para carregar um número inteiro fora do intervalo de [-253+1, 253-1) (na maioria dos casos, isso significa maior que 9.007.199.254.740.991), em uma coluna de números inteiros (INT64), você precisa transmiti-la como uma string para evitar o corrompimento dos dados. Esse problema é causado por uma limitação no tamanho inteiro em JSON/ECMAScript. Para mais informações, consulte a seção "Números" da RFC 7159.

FLOAT Formato de ponto flutuante de precisão dupla.
NUMERIC O SQL legado tem suporte limitado para NUMERIC. Para mais informações, consulte NUMERIC exato no SQL legado.
BIGNUMERIC O suporte ao SQL legado é limitado. Para mais informações, consulte Numeric exato no SQL legado.
BOOLEANO
  • Formato CSV: 1 ou 0, true ou false, t ou f, yes ou no, ou y ou n (não diferenciam maiúsculas de minúsculas).
  • Formato JSON: true ou false (não diferenciam maiúsculas de minúsculas).
RECORD Um conjunto de um ou mais campos.
TIMESTAMP

É possível descrever os tipos de dados TIMESTAMP como datas do calendário ou carimbos de data/hora do UNIX. O BigQuery armazena dados TIMESTAMP internamente como um carimbo de data/hora do UNIX com precisão de microssegundos.

Carimbos de data/hora do UNIX

Um número decimal positivo ou negativo. Um número positivo especifica o número de segundos a partir do início da época (01/01/1970, 00h00m00s UTC), e um número negativo especifica o número de segundos antes disso. Até seis casas decimais com precisão de microssegundos são mantidas.

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 compatíveis.

É possível fornecer uma compensação de fuso horário nas strings de data e hora, mas o BigQuery não mantém a diferença após converter o valor no formato interno dele. Se for necessário manter os dados de acordo com o fuso horário original, armazene essa diferença em uma coluna separada. O zero inicial é necessário quando você especifica uma diferença de fuso horário de um dígito.

As strings de data e hora precisam estar entre aspas ao usar o formato JSON.

Exemplos

Os exemplos a seguir mostram maneiras idênticas de descrever datas específicas, nos formatos de strings de data e hora e carimbos de data/hora do UNIX.

Evento Formato de carimbo de data/hora do UNIX Formato da string de data/hora
Terremoto pequeno (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 na Lua

-14182916

1969-07-20 20:18:04
1969-07-20 20:18:04 UTC
1969-07-20T20:18:04
Prazo para a correção do bug do milênio

253402300800
2.53402300800e11

10000-01-01 00:00
DATE O SQL legado tem compatibilidade limitada para DATE. Para mais informações, consulte Hora civil no SQL legado.
TIME O SQL legado tem compatibilidade limitada para TIME. Para mais informações, consulte Hora civil no SQL legado.
DATETIME O SQL legado tem suporte limitado para DATETIME. Para mais informações, consulte Hora civil no SQL legado.

Numérico exato no SQL legado

É possível ler valores NUMERIC ou BIGNUMERIC em cláusulas inalteráveis, como SELECT list (with aliases), GROUP BY keys e campos de passagem em funções analíticas, e assim por diante. No entanto, qualquer cálculo com valores NUMERIC ou BIGNUMERIC, incluindo comparações, produz resultados indefinidos.

As seguintes funções de cast e conversão têm suporte no SQL legado:

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

Hora civil no SQL legado

É possível 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 analíticas etc. No entanto, outros cálculos sobre valores de hora civil, incluindo comparações, produzem resultados indefinidos.

Os seguintes casts e funções de conversão são compatíveis no SQL legado:

  • 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, o SQL legado interpreta os valores de hora civil como números inteiros, e as operações sobre números inteiros que você acha que são valores de hora civil produzem resultados inesperados.

Para calcular valores usando tipos de dados de hora civil, utilize o GoogleSQL, que é compatível com todas as operações SQL nos tipos de dados DATE, DATETIME e TIME.

A seguir