Usa la detección automática de esquemas

Detección automática de esquemas

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 inicia el proceso de inferencia mediante la selección de un archivo aleatorio en la fuente de datos y el análisis de hasta 100 filas de datos a fin de usarlas como muestra representativa. BigQuery examina cada fila y, luego, intenta asignar un tipo de datos a ese campo en función de los valores en la muestra.

A fin de ver el esquema detectado para una tabla, haz lo siguiente:

  • Usa el comando bq show de la herramienta de línea de comandos.
  • Usa la IU web de BigQuery para ver el esquema de la tabla.

En ocasiones, cuando BigQuery detecta esquemas, puede cambiar el nombre de un campo para que sea compatible con la sintaxis SQL de BigQuery.

Para obtener información sobre las conversiones de tipos de datos, consulta lo siguiente:

Carga datos con la detección automática de esquemas

Para habilitar la detección automática de esquemas cuando se cargan datos, haz lo siguiente:

  • IU web de BigQuery: en la sección Schema (esquema), marca la opción Automatically detect (detectar de forma automática).
  • CLI: usa el comando bq load con el parámetro --autodetect.

Cuando está habilitado, BigQuery trata de inferir de forma automática el esquema para los archivos CSV y JSON.

La detección automática de esquemas no se usa con archivos Avro, Parquet, ORC ni archivos de exportación de Cloud Firestore o Cloud 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:

IU web

  1. Dirígete a la IU web de BigQuery.
    Ir a la IU web de BigQuery

  2. Haz clic en el ícono de flecha hacia abajo ícono de flecha hacia abajo junto al nombre de tu conjunto de datos en el menú de navegación y haz clic en Create new table (crear tabla nueva).

    Nota: En la IU, el proceso para cargar datos es el mismo que se utiliza a fin de crear una tabla.
  3. En la página Create table (crear tabla), haz lo siguiente:

    • En Source Data (datos de origen), haz clic en Create from source (crear desde la fuente).
    • En Destination Table (tabla de destino), selecciona tu conjunto de datos y luego ingresa el nombre de la tabla en el campo Destination table name (nombre de la tabla de destino).
    • En Schema (esquema), haz clic en Automatically detect (detectar de forma automática) para determinar el esquema.

      vínculo de detección automática

    • Haz clic en Crear tabla.

CLI

Ejecuta el comando bq load con el parámetro --autodetect. Proporciona la marca --location y establece el valor en tu ubicación.

El siguiente comando carga un archivo mediante la detección automática de esquemas:

bq --location=[LOCATION] load --autodetect --source_format=[FORMAT] [DATASET].[TABLE] [PATH_TO_SOURCE]

Donde:

  • [LOCATION] es 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 como asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • [FORMAT] es NEWLINE_DELIMITED_JSON o CSV.
  • [DATASET] es el conjunto de datos que contiene la tabla en la que cargas los datos.
  • [TABLE] es el nombre de la tabla en la que cargas los datos.
  • [PATH_TO_SOURCE] es la ubicación del archivo CSV o JSON.

Ejemplos:

Ingresa el comando siguiente para cargar myfile.csv desde tu máquina local en una tabla llamada mytable que se almacena en un conjunto de datos llamado mydataset. mydataset se creó en la ubicación multirregión US.

bq --location=US load --autodetect --source_format=CSV mydataset.mytable ./myfile.csv

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. mydataset se creó en la región asia-northeast1.

bq --location=asia-northeast1 load --autodetect --source_format=CSV mydataset.mytable ./myfile.csv

API

  1. Crea un trabajo de carga 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 propiedad location de la sección jobReference.

  2. Configura la propiedad configuration.load.sourceFormat para especificar el formato de los datos. Para usar la detección automática de esquemas, este valor se debe configurar como NEWLINE_DELIMITED_JSON o CSV.

  3. Configura la detección automática de esquemas como true mediante la propiedad configuration.load.autodetect.

Go

Antes de probar esta muestra, sigue las instrucciones de configuración para Go de la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.json")
gcsRef.SourceFormat = bigquery.JSON
gcsRef.AutoDetect = true
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
loader.WriteDisposition = bigquery.WriteEmpty

job, err := loader.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}

if status.Err() != nil {
	return fmt.Errorf("Job completed with error: %v", status.Err())
}

Python

Antes de probar esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. A fin de obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para habilitar la detección automática de esquemas, configura la propiedad LoadJobConfig.autodetect como True.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.autodetect = True
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'
load_job = client.load_table_from_uri(
    uri,
    dataset_ref.table('us_states'),
    job_config=job_config)  # API request
print('Starting job {}'.format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print('Job finished.')

destination_table = client.get_table(dataset_ref.table('us_states'))
print('Loaded {} rows.'.format(destination_table.num_rows))

Detección automática de esquemas para fuentes de datos externas

Para habilitar la detección automática de esquemas en la IU web cuando creas una tabla vinculada a una fuente de datos externa, marca la opción Automatically detect (detectar de forma automática). Cuando se habilita, BigQuery trata de inferir de forma automática el esquema para las fuentes de datos externas CSV y JSON.

En este momento, no puedes usar la IU web a fin de habilitar la detección automática de esquemas para las fuentes de datos externas de las Hojas de cálculo de Google. Además, la detección automática de esquemas no se usa con archivos Avro ni archivos de exportación de Cloud Firestore o Cloud Datastore. Cuando creas una tabla vinculada a uno de estos tipos de archivos, BigQuery recupera de forma automática el esquema de los datos de origen autodescriptivos.

Con la CLI, puedes habilitar la detección automática de esquemas mediante la creación de un archivo de definición de tablas para datos CSV, JSON o de Hojas de cálculo de Google. Cuando usas la CLI con el fin de crear un archivo de definición de tablas, puedes pasar la marca --autodetect al comando mkdef para habilitar la detección automática de esquemas o la marca --noautodetect a fin de inhabilitarla.

Cuando usas la marca --autodetect, la configuración “detección automática” se establece como true en el archivo de definición de tablas. Cuando usas la marca --noautodetect, la configuración "autodetect" se establece como false. Si no proporcionas una definición de esquemas para la fuente de datos externa cuando creas una definición de tabla y no usas las marcas --noautodetect o --autodetect, la configuración "autodetect" se establece de forma predeterminada como true.

Cuando creas un archivo de definición de tablas con la API, configura el valor de la propiedad "autodetect" como true o false. Configurar autodetect como true habilita la detección automática. Configurar autodetect como false la inhabilita.

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.

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 conjunto de datos. Si la primera línea contiene solo strings y las otras no, BigQuery supone que la primera fila es una fila de encabezado.

Líneas nuevas con comillas 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.

Fechas

Cuando usas la detección de esquemas en datos JSON o CSV, los valores en las columnas DATE deben usar un guion (-) como separador y deben seguir este formato: YYYY-MM-DD (año-mes-día).

Marcas de tiempo

BigQuery detecta una amplia gama de formatos de marca de tiempo, entre los cuales se incluyen los siguientes:

  • yyyy-mm-dd
  • yyyy-mm-dd hh:mm:ss
  • yyyy-mm-dd hh:mm:ss.mmm

Una marca de tiempo también puede contener una compensación UTC y el designador de zona UTC Z. También se admiten valores de marca de tiempo basados en números enteros.

Cuando usas la detección de esquemas en datos JSON o CSV, los valores en las columnas TIMESTAMP deben usar un guion (-) como separador para la parte correspondiente a la fecha, la cual debe seguir este formato: YYYY-MM-DD (año-mes-día). La parte hh:mm:ss (horas-minutos-segundos) de la marca de tiempo debe usar dos puntos (:) como separador.

Ejemplos de marca de tiempo

Los siguientes son ejemplos de formatos de marca de tiempo que BigQuery detecta de forma automática:

  • 253402300799
  • 2018-07-05 12:54:00 UTC
  • 2018-08-19 07:11:35.220 -05:00
  • 2018-08-19 12:11:35.220 UTC
  • 2018-08-19T12:11:35.220Z
  • 2.53402300799e11
  • 2018-08-19 12:11:35.220000
  • 2018-08-19 12:11:35.220
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.