Tipos de datos de SQL antiguo

En este documento se detallan los tipos de datos admitidos por la sintaxis de consulta de SQL antiguo de BigQuery. La sintaxis de consulta preferida para BigQuery es GoogleSQL. Para obtener información sobre los tipos de datos de GoogleSQL, consulta los tipos de datos de GoogleSQL.

Tipos de datos de SQL antiguo

Sus datos pueden incluir los siguientes tipos de datos:

Tipo de datos Posibles valores
STRING Datos de caracteres de longitud variable (UTF-8).
BYTES Datos binarios de longitud variable.
  • Los datos BYTES importados deben estar codificados en base64, excepto los datos BYTES de Avro, que BigQuery puede leer y convertir.
  • Los datos de BYTES leídos de una tabla de BigQuery están codificados en base64, a menos que los exportes al formato Avro, en cuyo caso se aplica el tipo de datos de bytes de Avro.
INTEGER

Número entero firmado de 64 bits.

Si usas la API de BigQuery para cargar un número entero fuera del intervalo [-253+1, 253-1] (en la mayoría de los casos, esto significa que es mayor que 9.007.199.254.740.991) en una columna de números enteros (INT64), debes enviarlo como una cadena para evitar que los datos se dañen. Este problema se debe a una limitación en el tamaño de los números enteros en JSON o ECMAScript. Para obtener más información, consulta la sección de números de RFC 7159.

FLOAT Formato de punto flotante de doble precisión.
NUMERIC El lenguaje SQL antiguo tiene una compatibilidad limitada con NUMERIC. Para obtener más información, consulta Números exactos en SQL antiguo.
BIGNUMERIC El lenguaje SQL antiguo tiene una compatibilidad limitada con BIGNUMERIC. Para obtener más información, consulta Números exactos en SQL antiguo.
BOOLEAN
  • Formato CSV: 1 o 0, true o false, t o f, yes o no, o y o n (sin distinción entre mayúsculas y minúsculas).
  • Formato JSON: true o false (sin distinción entre mayúsculas y minúsculas).
RECORD Una colección de uno o varios campos.
TIMESTAMP

Puedes describir los tipos de datos TIMESTAMP como marcas de tiempo UNIX o como fechas y horas de calendario. BigQuery almacena los datos de TIMESTAMP internamente como una marca de tiempo UNIX con precisión de microsegundos.

Marcas de tiempo UNIX

Un número decimal positivo o negativo. Un número positivo especifica el número de segundos transcurridos desde el inicio del registro de tiempo (1 de enero de 1970 a las 00:00:00 UTC), y un número negativo especifica el número de segundos anteriores al inicio del registro de tiempo. Se conservan hasta 6 decimales (precisión de microsegundos).

Cadenas de fecha y hora

Una cadena de fecha y hora con el formato YYYY-MM-DD HH:MM:SS. Se admiten los especificadores UTC y Z.

Puede proporcionar una diferencia horaria en las cadenas de fecha y hora, pero BigQuery no conserva la diferencia después de convertir el valor a su formato interno. Si necesitas conservar los datos de la zona horaria original, almacena la diferencia horaria en una columna independiente. El cero inicial es obligatorio cuando se especifica una diferencia horaria de un solo dígito.

Las cadenas de fecha y hora deben incluirse entre comillas cuando se usa el formato JSON.

Ejemplos

En los siguientes ejemplos se muestran formas idénticas de describir fechas específicas, tanto en formato de marca de tiempo de UNIX como en formato de cadena de fecha y hora.

Evento Formato de marca de tiempo UNIX Formato de cadena de fecha y hora
Terremoto de magnitud 4,2 cerca 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 la Luna
-14182916
1969-07-20 20:18:04
1969-07-20 20:18:04 UTC
1969-07-20T20:18:04
Fecha límite para corregir el error del año 10.000
253402300800
2.53402300800e11
10000-01-01 00:00
FECHA El lenguaje SQL antiguo tiene una compatibilidad limitada con DATE. Para obtener más información, consulta Hora civil en SQL antiguo.
HORA El SQL antiguo tiene una compatibilidad limitada con TIME. Para obtener más información, consulta Hora civil en SQL antiguo.
DATETIME SQL antiguo tiene una compatibilidad limitada con DATETIME. Para obtener más información, consulta Hora civil en SQL antiguo.

Numérico exacto en SQL antiguo

Puede leer valores NUMERIC o BIGNUMERIC en cláusulas que no modifican, como SELECT list (with aliases) y GROUP BY keys, y campos de transferencia en funciones de ventana, etc. Sin embargo, cualquier cálculo sobre valores NUMERIC o BIGNUMERIC, incluidas las comparaciones, produce resultados indefinidos.

Las siguientes funciones de conversión y conversión de tipo se admiten en SQL antiguo:

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

Hora civil en SQL antiguo

Puede leer tipos de datos de hora civil (DATE, TIME y DATETIME) y procesarlos con operadores no modificadores, como SELECT list (with aliases) y GROUP BY keys, así como campos de paso en funciones de ventana, etc. Sin embargo, cualquier otro cálculo sobre valores de hora civil, incluidas las comparaciones, produce resultados indefinidos.

En SQL antiguo se admiten las siguientes funciones de conversión y de conversión de tipos:

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

En la práctica, el SQL antiguo interpreta los valores de hora civil como números enteros, y las operaciones con números enteros que crees que son valores de hora civil producen resultados inesperados.

Para calcular valores con tipos de datos de hora civil, considera GoogleSQL, que admite todas las operaciones de SQL en los tipos de datos DATE, DATETIME y TIME.

Siguientes pasos