Usa la detección automática de esquemas
Detección automática de esquemas
La detección automática de esquemas permite que BigQuery infiera el esquema para los datos de CSV, JSON u Hojas de cálculo de Google. La detección automática de esquemas está disponible cuando cargas datos en BigQuery y cuando consultas una fuente de datos externa.
Cuando la detección automática está habilitada, BigQuery infiere el tipo de datos para cada columna. BigQuery selecciona un archivo aleatorio en la fuente de datos y analiza hasta las primeras 500 filas de datos para usar como muestra representativa.
Luego, BigQuery examina cada campo y trata de asignarle un tipo de datos según los valores de la muestra. Si todas las filas de una columna están vacías, la detección automática se establecerá de forma predeterminada en el tipo de datos STRING
para la columna.
Si no habilitas la detección automática de esquemas para los datos de formato CSV, JSON o de Hojas de cálculo de Google, debes proporcionar el esquema de forma manual cuando crees la tabla.
No es necesario habilitar la detección automática de esquemas para los archivos de exportación de Avro, Parquet, ORC, Firestore export o Datastore. Estos formatos de archivo son autodescriptivos, por lo que BigQuery infiere de forma automática el esquema de tabla a partir de los datos de origen. Para los archivos de Parquet, Avro y Orc, puedes proporcionar un esquema explícito a fin de anular el esquema inferido.
Puedes ver el esquema detectado de una tabla de las formas siguientes:
- Uso de consola de Google Cloud.
- El comando
bq show
de la herramienta de línea de comandos de bq
En ocasiones, cuando BigQuery detecta esquemas, puede cambiar el nombre de un campo para que sea compatible con la sintaxis de GoogleSQL.
Para obtener más información sobre las conversiones de tipos de datos, consulta las siguientes páginas:
- Conversión de tipos de datos cuando se cargan datos desde Datastore
- Conversión de tipos de datos cuando se cargan datos desde Firestore
- Conversiones de Avro
- Conversiones de Parquet
- Conversiones de ORC
Carga datos con la detección automática de esquemas
Para habilitar la detección automática de esquemas cuando se cargan datos, usa uno de los siguientes enfoques:
- En la consola de Google Cloud, en la sección Esquema, en Detección automática, marca la opción Esquema y parámetros de entrada.
- En la herramienta de línea de comandos de
bq load
, usa el comando--autodetect
con el parámetro .
Cuando la detección automática de esquemas está habilitada, BigQuery hace un esfuerzo para inferir automáticamente el esquema de los archivos CSV y JSON.
La lógica de detección automática infiere los tipos de campo del esquema mediante la lectura de las primeras 500 filas de datos. Las líneas iniciales se omiten si la marca --skip_leading_rows
está presente. Los tipos de campo se basan en las filas que tienen más campos.
Por lo tanto, la detección automática debería funcionar siempre y cuando haya al menos una fila de datos que tenga valores en cada columna o campo.
La detección automática de esquemas no se usa con los archivos Avro, ORC o Parquet, ni con los archivos de exportación de Firestore o Datastore. Cuando cargas estos archivos en BigQuery, el esquema de la tabla se recupera de forma automática de los datos de origen autodescriptivos.
Para usar la detección automática de esquemas cuando cargas datos JSON o CSV, haz lo siguiente:
Console
En la consola de Google Cloud, ve a la página de BigQuery.
En el panel Explorador, expande tu proyecto y elige un conjunto de datos.
Expande la opción Acciones
y haz clic en Abrir.En el panel de detalles, haz clic en Crear tabla
(Create table).En la sección Fuente (Source) de la página Crear tabla (Create table), haz lo siguiente:
- En Crear tabla desde, selecciona el tipo de fuente que desees.
En el campo de origen, busca el depósito Archivo/Cloud Storage o ingresa el URI de Cloud Storage. Ten en cuenta que no puedes incluir varios URI en la consola de Google Cloud, pero se admiten comodines. El bucket de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla que quieres crear.
En Formato del archivo (File format), selecciona CSV o JSON.
En la página Crear tabla, en la sección Destino, realiza lo siguiente:
En Nombre del conjunto de datos (Dataset name), elige el conjunto de datos que corresponda.
En el campo Nombre de tabla, escribe el nombre de la tabla que quieres crear.
Verifica que Tipo de tabla esté configurado como Tabla nativa.
Haga clic en Create table.
bq
Ejecuta el comando bq load
con el parámetro --autodetect
.
Opcional: Proporciona la marca --location
y configura el valor en tu ubicación.
Con el siguiente comando, se carga un archivo mediante la detección automática de esquemas:
bq --location=LOCATION load \ --autodetect \ --source_format=FORMAT \ DATASET.TABLE \ PATH_TO_SOURCE
Reemplaza lo siguiente:
LOCATION
: El nombre de tu ubicación. La marca--location
es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, configura el valor de la marca comoasia-northeast1
. Puedes configurar un valor predeterminado para la ubicación mediante el archivo .bigqueryrc.FORMAT
: porNEWLINE_DELIMITED_JSON
oCSV
.DATASET
: Es el conjunto de datos que contiene la tabla en la que deseas cargar los datos.TABLE
: Es el nombre de la tabla en la que se están cargando los datos.PATH_TO_SOURCE
: Es la ubicación del archivo CSV o JSON.
Ejemplos:
Ingresa el siguiente comando para cargar myfile.csv
desde tu máquina local en una tabla llamada mytable
que se almacena en un conjunto de datos llamado mydataset
.
bq load --autodetect --source_format=CSV mydataset.mytable ./myfile.csv
Ingresa el siguiente comando para cargar myfile.json
desde tu máquina local en una tabla llamada mytable
que se almacena en un conjunto de datos llamado mydataset
.
bq load --autodetect --source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable ./myfile.json
API
Crea un trabajo
load
orientado a los datos de origen. Para obtener información sobre la creación de trabajos, consulta Ejecuta trabajos de BigQuery de manera programática. Especifica tu ubicación en la propiedadlocation
de la secciónjobReference
.Para especificar el formato de datos, configura la propiedad
sourceFormat
. Para usar la detección automática de esquemas, este valor se debe configurar comoNEWLINE_DELIMITED_JSON
oCSV
.Usa la propiedad
autodetect
para establecer la detección automática de esquemas entrue
.
Go
Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Node.js
Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
PHP
Antes de probar este ejemplo, sigue las instrucciones de configuración para PHP incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para PHP.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Python
Para habilitar la detección automática de esquemas, configura la propiedad LoadJobConfig.autodetect como True
.
Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Ruby
Antes de probar este ejemplo, sigue las instrucciones de configuración para Ruby incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Ruby.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Detección automática de esquemas para fuentes de datos externas
La detección automática de esquemas se puede usar con fuentes externas de datos CSV, JSON y de Hojas de cálculo de Google. Cuando la detección automática de esquemas está habilitada, BigQuery hace un esfuerzo para inferir automáticamente el esquema de los datos de origen. Si no habilitas la detección automática de esquemas para estas fuentes, debes proporcionar un esquema explícito.
No necesitas habilitar la detección automática de esquemas cuando consultas archivos de exportación externos de Avro, Parquet, ORC, Firestore export o Datastore. Estos formatos de archivo son autodescriptivos, por lo que BigQuery infiere de forma automática el esquema de tabla a partir de los datos de origen. Para los archivos de Parquet, Avro y Orc, puedes proporcionar un esquema explícito a fin de anular el esquema inferido.
Con la consola de Google Cloud, puedes habilitar la detección automática de esquemas si marcas la opción Esquema y parámetros de entrada en Detección automática.
Mediante la herramienta de línea de comandos de bq, puedes habilitar la detección automática de esquemas mediante la creación de un archivo de definición de tablas para datos de CSV, de JSON o de Hojas de cálculo de Google. Cuando uses la herramienta bq para crear un archivo de definición de tablas, pasa la marca --autodetect
al comando mkdef
para habilitar la detección automática de esquemas o la marca --noautodetect
para inhabilitar la detección automática.
Cuando usas la marca --autodetect
, autodetect
se configura como true
en el archivo de definición de tablas. Cuando usas la marca --noautodetect
, autodetect
se configura como false
. Si no proporcionas una definición de esquema para la fuente de datos externa cuando creas una definición de tablas y no usas las marcas --noautodetect
o --autodetect
, autodetect
se configura de forma predeterminada como true
.
Cuando crees un archivo de definición de tablas mediante la API, configura el valor de la propiedad autodetect
como true
o false
. La detección automática se habilita con la configuración de autodetect
como true
Configurar autodetect
como false
inhabilita la detección automática.
Detalles de la detección automática
Además de detectar los detalles del esquema, la detección automática reconoce lo siguiente:
Compresión
BigQuery reconoce la compresión de archivos compatible con gzip cuando se abre un archivo.
Valores de fecha y hora
BigQuery detecta los valores de fecha y hora según el formato de los datos de origen.
Los valores de las columnas DATE
deben tener el siguiente formato: YYYY-MM-DD
.
Los valores en las columnas TIME
deben tener el siguiente formato: HH:MM:SS[.SSSSSS]
(el componente de segundos fraccionarios es opcional).
Para las columnas TIMESTAMP
, BigQuery detecta varios formatos de marca de tiempo, entre los que se incluyen los siguientes:
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSSSSS
YYYY/MM/DD HH:MM
Una marca de tiempo también puede contener un desplazamiento de UTC o el designador de zona UTC (“Z”).
Estos son algunos ejemplos de los valores que BigQuery detectará de manera automática como valores de marca de tiempo:
- 2018-08-19 12:11
- 2018-08-19 12:11:35.22
- 2018/08/19 12:11
- 2018-08-19 07:11:35.220 -05:00
Si BigQuery no reconoce el formato, cargará la columna como un tipo de datos string. En ese caso, es posible que debas procesar de forma previa los datos de origen antes de cargarlos. Por ejemplo, si exportas datos CSV desde una hoja de cálculo, configura el formato de fecha para que coincida con uno de los ejemplos que se muestran aquí. Como alternativa, puedes transformar los datos después de cargarlos en BigQuery.
Detección automática de esquemas para datos CSV
Delimitador CSV
BigQuery detecta los siguientes delimitadores:
- coma ( , )
- barra vertical ( | )
- tabulador ( \t )
Encabezado CSV
BigQuery infiere los encabezados mediante la comparación de la primera fila del archivo con otras filas en el archivo. Si la primera línea solo contiene cadenas y las otras contienen otros tipos de datos, BigQuery supone que la primera fila es una fila de encabezado. BigQuery asigna nombres de columnas según los nombres de campo en la fila del encabezado. Los nombres pueden modificarse a fin de cumplir con las reglas de nomenclatura para las columnas en BigQuery. Por ejemplo, los espacios se reemplazarán con guiones bajos.
De lo contrario, BigQuery supone que la primera fila es una fila de datos y asigna nombres de columnas genéricos como string_field_1
. Ten en cuenta que, después de que se crea una tabla, los nombres de las columnas no se pueden actualizar en el esquema, pero puedes cambiar los nombres de forma manual después de que se crea la tabla. Otra opción es proporcionar un esquema explícito, en lugar de usar la detección automática.
Es posible que tengas un archivo CSV con una fila de encabezado, en la que todos los campos de datos sean strings. En ese caso, BigQuery no detectará de manera automática que la primera fila es un encabezado. Usa la opción --skip_leading_rows
para omitir la fila de encabezado. De lo contrario, el encabezado se importará como datos. También considera proporcionar un esquema explícito en este caso para que puedas asignar nombres de columnas.
Saltos de línea con comillas en CSV
BigQuery detecta los caracteres de línea nueva con comillas dentro de un campo CSV y no interpreta el carácter con comillas de la línea nueva como un límite de fila.
Detección automática de esquemas para datos JSON
Campos repetidos y anidados en JSON
BigQuery infiere los campos anidados y repetidos en archivos JSON. Si el valor de un campo es un objeto JSON, BigQuery carga la columna como un tipo RECORD
. Si el valor de un campo es un array, BigQuery carga la columna como una columna repetida. Para ver un ejemplo de datos JSON con datos anidados y repetidos, consulta Carga datos JSON anidados y repetidos.
Conversión de strings
Si habilitas la detección automática de esquemas, BigQuery convierte las strings en tipos booleanos, numéricos o de fecha y hora cuando sea posible. Por ejemplo, con los siguientes datos de JSON, la detección automática de esquemas convierte el campo id
en una columna INTEGER
:
{ "name":"Alice","id":"12"}
{ "name":"Bob","id":"34"}
{ "name":"Charles","id":"45"}
Si deseas obtener más información, consulta Carga datos JSON desde Cloud Storage.
Detección automática de esquemas para Hojas de cálculo de Google
En el caso de las Hojas de cálculo, BigQuery detecta de forma automática si la primera fila es una fila de encabezado, similar a la detección automática de los archivos CSV. Si se identifica una primera línea como encabezado, BigQuery asigna nombres de columnas según los nombres de campo en la fila del encabezado y omite la fila. Los nombres pueden modificarse a fin de cumplir con las reglas de nomenclatura para las columnas en BigQuery. Por ejemplo, los espacios se reemplazarán con guiones bajos.
Seguridad de las tablas
Para controlar el acceso a las tablas en BigQuery, consulta Introducción a los controles de acceso a tablas.