Carga datos de CSV desde Cloud Storage

Carga archivos de CSV desde Cloud Storage

Cuando cargas datos de CSV desde Cloud Storage, puedes cargarlos en una tabla o partición nuevas. También puedes adjuntarlos a una tabla o partición existentes o reemplazar los datos de ellas. Cuando tus datos se cargan en BigQuery, se convierten en formato de columnas para Capacitor (formato de almacenamiento de BigQuery).

Cuando cargas datos de Cloud Storage en una tabla de BigQuery, el conjunto de datos que contiene la tabla debe estar en la misma ubicación regional o multirregional que el depósito de Cloud Storage.

Para obtener información sobre la carga de datos de CSV desde un archivo local, consulta la sección sobre Cómo cargar datos en BigQuery desde una fuente de datos local.

Limitaciones

Cuando cargues datos de CSV de Cloud Storage en BigQuery, ten en cuenta lo siguiente:

  • Los archivos de CSV no admiten datos anidados o repetidos.
  • Si usas la compresión gzip, BigQuery no puede leer los datos en paralelo. La carga de datos de CSV comprimidos en BigQuery es más lenta que la carga de datos sin comprimir.
  • No puedes incluir archivos comprimidos y descomprimidos en el mismo trabajo de carga.
  • Cuando cargas datos CSV o JSON, con los valores en las columnas DATE se debe usar el separador de guion (-) y la fecha debe estar en el siguiente formato: YYYY-MM-DD (año-mes-día).
  • Cuando cargas datos JSON o CSV, con los valores en las columnas TIMESTAMP se debe usar el separador de guion (-) para la parte de fecha de la marca de tiempo y la fecha debe estar en el siguiente formato: YYYY-MM-DD (año-mes-día). La parte de hh:mm:ss (horas-minutos-segundos) de la marca de tiempo debe usar el separador de dos puntos (:).

Codificación de CSV

BigQuery espera que los datos de CSV estén codificados en UTF-8. Si tienes archivos de CSV con datos codificados en formato ISO-8859-1 (también conocido como Latin-1), debes especificar la codificación de forma explícita cuando cargues tus datos para que puedan convertirse en UTF-8.

Los delimitadores en archivos de CSV pueden ser cualquier carácter de un solo byte ISO-8859-1. Para usar un carácter en el rango 128-255, debes codificar el carácter como UTF-8. BigQuery convierte la string en codificación ISO-8859-1 y usa el primer byte de la string codificada para dividir los datos en su estado binario sin procesar.

Permisos necesarios

Cuando cargas datos en BigQuery, necesitas permisos para ejecutar un trabajo de carga y cargar datos en tablas y particiones de BigQuery nuevas o existentes. Si cargas datos desde Cloud Storage, también necesitas permisos para acceder al depósito que contiene tus datos.

Permisos de BigQuery

Como mínimo, se requieren los siguientes permisos para cargar datos en BigQuery. Estos permisos son necesarios si cargas datos en una tabla o partición nueva, si reemplazas una tabla o partición o si adjuntas datos a ellas.

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.jobs.create

Las siguientes funciones de Cloud IAM predefinidas incluyen permisos bigquery.tables.create y bigquery.tables.updateData:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Las siguientes funciones de Cloud IAM predefinidas incluyen los permisos bigquery.jobs.create:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

Además, si un usuario tiene permisos bigquery.datasets.create, cuando crea un conjunto de datos, se le otorga el acceso bigquery.dataOwner. El acceso bigquery.dataOwner permite al usuario crear y actualizar tablas en el conjunto de datos a través de un trabajo de carga.

Si deseas obtener más información sobre las funciones de Cloud IAM y los permisos en BigQuery, consulta Control de acceso.

Permisos de Cloud Storage

Para cargar datos desde un depósito de Cloud Storage, debes tener permisos storage.objects.get. Si usas un comodín de URI, también debes tener permisos storage.objects.list.

Se puede otorgar la función storage.objectViewer de Cloud IAM predefinida para proporcionar permisos storage.objects.get y storage.objects.list.

Carga datos de CSV en una tabla

Puedes cargar datos de CSV de Cloud Storage en una tabla nueva de BigQuery de la siguiente manera:

  • Mediante GCP Console o la IU web clásica
  • Mediante el comando bq load de la CLI
  • Mediante una llamada al método jobs.insert de la API y la configuración de un trabajo de load
  • Mediante las bibliotecas cliente

Para cargar datos de CSV de Cloud Storage en una tabla nueva de BigQuery, sigue estos pasos:

Console

  1. Abre la IU web de BigQuery en GCP Console.
    Ir a GCP Console

  2. En el panel de navegación, en la sección Recursos, expande tu proyecto y selecciona un conjunto de datos.

  3. En el lado derecho de la ventana, en el panel de detalles, haz clic en Crear tabla (Create table). El proceso de carga de datos es el mismo que el proceso para crear una tabla vacía.

    Crear tabla

  4. En la página Crear tabla (Create table), en la sección Fuente (Source), realiza lo siguiente:

    • En Crear una tabla desde (Create table from), selecciona Cloud Storage.

    • En el campo de origen, busca o ingresa el URI de Cloud Storage. Ten en cuenta que no puedes incluir múltiples URI en GCP Console, pero se admiten comodines. El depósito de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla que quieres crear.

      Seleccionar archivo

    • En Formato de archivo (File format), selecciona CSV.

  5. En la página Crear tabla (Create table), en la sección Destino (Destination), realiza lo siguiente:

    • En Nombre del conjunto de datos (Dataset name), selecciona el conjunto de datos que corresponda.

      Ver conjunto de datos

    • Verifica que Tipo de tabla (Table type) esté configurado como Tabla nativa (Native table).

    • En el campo Nombre de tabla, ingresa el nombre de la tabla que quieres crear en BigQuery.

  6. En la sección Esquema, en Detección automática, marca la opción Parámetros de entrada y esquema para habilitar la detección automática de esquemas. También puedes ingresar la definición de esquema de forma manual como se indica a continuación:

    • Habilita Editar como texto y, luego, ingresa el esquema de la tabla como un arreglo JSON.

      Agregar esquema como arreglo de JSON

    • Usa Agregar campo (Add field) para ingresar el esquema de forma manual.

      Agregar definición de esquema con el botón Agregar campo (Add Field)

  7. Para particionar la tabla, elige tus opciones en la Configuración de la partición y el clúster (opcional):

    • Para crear una tabla particionada, haz clic en Sin particiones, selecciona Particionar por campo y elige una columna DATE o TIMESTAMP. Esta opción no está disponible si tu esquema no incluye una columna DATE o TIMESTAMP.
    • Para crear una tabla particionada por tiempo de transferencia, haz clic en Sin particiones y selecciona Particionar por tiempo de transferencia.
  8. En Filtro de partición, haz clic en el cuadro Requerir filtro de partición para solicitar a los usuarios que incluyan una cláusula WHERE que especifique las particiones que deben consultarse (opcional). Requerir un filtro de partición puede reducir el costo y mejorar el rendimiento. Para obtener más información, visita la sección sobre Cómo consultar tablas particionadas. Esta opción no está disponible si se selecciona Sin particiones.

  9. Para agrupar la tabla en clústeres, en el cuadro Orden de agrupamiento en clústeres, ingresa entre uno y cuatro nombres de campo (opcional). En la actualidad, el agrupamiento en clústeres solo es compatible con tablas particionadas.

  10. Haz clic en Opciones avanzadas (opcional).

    • En Preferencia de escritura, deja seleccionado Escribir si está vacío. Con esta opción, se crea una tabla nueva y se cargan tus datos en ella.
    • En Cantidad de errores permitidos, acepta el valor predeterminado de 0 o ingresa la cantidad máxima de filas con errores que pueden ignorarse. Si la cantidad de filas con errores excede este valor, el trabajo generará un mensaje invalid y se producirá un error.
    • En Valores desconocidos, marca Ignorar valores desconocidos para ignorar cualquier valor en una fila que no esté presente en el esquema de la tabla.
    • En Delimitador de campos, elige el carácter que separa las celdas en tu archivo CSV: Coma, Tabulación, Barra vertical o Personalizado. Si eliges Personalizado, debes ingresar el delimitador en el cuadro Delimitador de campos personalizado. El valor predeterminado es Coma.
    • En Filas de encabezado que se omitirán, ingresa la cantidad de filas de encabezado que se omitirán en la parte superior del archivo de CSV. El valor predeterminado es 0.
    • En Saltos de línea entrecomillados, marca Permitir saltos de línea entrecomillados para permitir secciones de datos entrecomillados que contengan caracteres de salto de línea en un archivo de CSV. El valor predeterminado es false.
    • En Filas irregulares, marca Permitir filas irregulares para aceptar filas en archivos de CSV a las que les falten columnas opcionales finales. Los valores faltantes se consideran nulos. Si no se marca esta opción, los registros en los que faltan columnas finales se tratan como registros incorrectos y, si hay demasiados, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es false.
    • En Encriptación, haz clic en Clave administrada por el cliente para usar una clave de Cloud Key Management Service. Si dejas la configuración de Clave administrada por Google, BigQuery encripta los datos en reposo.
  11. Haz clic en Crear tabla.

IU clásica

  1. Ve a la IU web de BigQuery.
    Ir a la IU web de BigQuery

  2. En el panel de navegación, desplázate sobre un conjunto de datos, haz clic en el ícono de flecha hacia abajo imagen del ícono de flecha hacia abajo y, luego, en Crear tabla nueva. El proceso de carga de datos es el mismo que el proceso para crear una tabla vacía.

  3. En la página Crear tabla, en la sección Datos fuente, haz lo siguiente:

    • Haz clic en Crear desde la fuente.
    • En Ubicación, selecciona Cloud Storage y, en el campo de origen, ingresa el URI de Cloud Storage. Ten en cuenta que no puedes incluir múltiples URI en la IU web de BigQuery, pero se admiten comodines. El depósito de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla que quieres crear.
    • En Formato de archivo, selecciona CSV.
  4. En la sección Tabla de destino, haz lo siguiente:

    • En Nombre de tabla, selecciona el conjunto de datos apropiado y, en el campo de nombre de tabla, ingresa el nombre de la tabla que quieres crear en BigQuery.
    • Verifica que Tipo de tabla esté configurado como Tabla nativa.
  5. En la sección Esquema, en Detección automática, marca la opción Parámetros de entrada y esquema para habilitar la detección automática de esquemas. También puedes ingresar la definición de esquema de forma manual como se indica a continuación:

    • Haz clic en Editar como texto (Edit as text) y, luego, ingresa el esquema de la tabla como un arreglo JSON.

      Agregar esquema como arreglo de JSON

    • Usa Agregar campo (Add Field) para ingresar el esquema de forma manual:

      Agregar esquema con agregar campos

  6. En la sección Opciones, realiza las siguientes instrucciones (opcional):

    • En Delimitador de campos, elige el carácter que separa las celdas en tu archivo CSV: Coma, Tabulación, Barra vertical o Personalizado. Si eliges Otro, debes ingresar el delimitador en el cuadro Delimitador de campos personalizado. El valor predeterminado es Coma.
    • En Filas de encabezado que se omitirán, ingresa la cantidad de filas de encabezado que se omitirán en la parte superior del archivo de CSV. El valor predeterminado es 0.
    • En Cantidad de errores permitidos, acepta el valor predeterminado de 0 o ingresa la cantidad máxima de filas con errores que pueden ignorarse. Si la cantidad de filas con errores excede este valor, el trabajo generará un mensaje invalid y se producirá un error.
    • En Permitir saltos de línea entrecomillados, activa la casilla para permitir secciones de datos entrecomillados que contienen caracteres de salto de línea en un archivo de CSV. El valor predeterminado es false.
    • En Permitir filas irregulares, marca la casilla para aceptar filas en los archivos CSV a las que les falten columnas opcionales finales. Los valores faltantes se consideran nulos. Si no se marca esta opción, los registros en los que faltan columnas finales se tratan como registros incorrectos y, si hay demasiados, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es false.
    • En Ignorar valores desconocidos, marca la casilla para ignorar cualquier valor de una fila que no esté presente en el esquema de la tabla.
    • En Preferencia de escritura, deja seleccionado Escribir si está vacío. Con esta opción, se crea una tabla nueva y se cargan tus datos en ella.
    • Para particionar la tabla, haz lo siguiente:
      • En Tipo de partición, haz clic en Ninguno y elige Día.
      • En Campo de partición, realiza las siguientes acciones:
      • Para crear una tabla particionada, elige una columna DATE o TIMESTAMP. Esta opción no está disponible si tu esquema no incluye una columna DATE o TIMESTAMP.
      • Para crear una tabla particionada por tiempo de transferencia, deja el valor predeterminado: _PARTITIONTIME.
      • Haz clic en el cuadro Requerir filtro de partición para solicitar a los usuarios que incluyan una cláusula WHERE que especifique las particiones que deben consultarse. Requerir un filtro de partición puede reducir el costo y mejorar el rendimiento. Para obtener más información, visita la sección sobre Cómo consultar tablas particionadas. Esta opción no está disponible si el Tipo de partición está configurado como Ninguno.
    • Para agrupar la tabla en clústeres, en el cuadro Campos de agrupamiento en clústeres, ingresa entre uno y cuatro nombres de campo.
    • En Encriptación de destino, elige Encriptación administrada por el cliente a fin de usar una clave de Cloud Key Management Service para encriptar la tabla. Si dejas la configuración Default, BigQuery encripta los datos en reposo con una clave administrada por Google.
  7. Haz clic en Crear tabla.

CLI

Usa el comando bq load, especifica CSV con la marca --source_format y, además, incluye un URI de Cloud Storage. Puedes incluir un solo URI, una lista de URI separados por comas o un URI que contenga un comodín. Proporciona el esquema intercalado con un archivo de definición de esquema o usa la detección automática de esquemas.

Proporciona la marca --location y configura el valor como tu ubicación (opcional).

Las siguientes son otras marcas opcionales:

  • --allow_jagged_rows: cuando se especifica, se aceptan filas en los archivos de CSV a las que les faltan columnas opcionales finales. Los valores faltantes se consideran nulos. Si no se marca esta opción, los registros en los que faltan columnas finales se tratan como registros incorrectos y, si hay demasiados, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es false.
  • --allow_quoted_newlines: cuando se especifica, permite secciones de datos entrecomillados que contienen caracteres de salto de línea en un archivo de CSV. El valor predeterminado es false.
  • --field_delimiter: el carácter que indica el límite entre las columnas en los datos. Se admiten \t y tab como delimitadores de tabulación. El valor predeterminado es ,.
  • --null_marker: una string personalizada opcional que representa un valor NULL en los datos de CSV.
  • --skip_leading_rows: especifica la cantidad de filas de encabezado que deben omitirse en la parte superior del archivo de CSV. El valor predeterminado es 0.
  • --quote: el carácter de comilla que se usa para encerrar registros. El valor predeterminado es ". Para indicar que no hay ningún carácter de comilla, usa una string vacía.
  • --max_bad_records: un número entero que especifica la cantidad máxima de registros incorrectos permitidos antes de que falle todo el trabajo. El valor predeterminado es 0. Como máximo, se muestran cinco errores de cualquier tipo, sin importar el valor de --max_bad_records.
  • --ignore_unknown_values: cuando se especifica, permite y, además, ignora los valores adicionales no reconocidos en datos de CSV o JSON.
  • --autodetect: cuando se especifica, habilita la detección automática de esquemas para los datos de CSV y JSON.
  • --time_partitioning_type: habilita la partición por tiempo en una tabla y establece el tipo de partición. En la actualidad, el único valor posible es DAY, que genera una partición por día. Esta marca es opcional cuando creas una tabla particionada en función de una columna DATE o TIMESTAMP.
  • --time_partitioning_expiration: un número entero que especifica (en segundos) cuándo se debe borrar una partición por tiempo. La hora de vencimiento se evalúa según la suma de la fecha de la partición en formato UTC más el valor del número entero.
  • --time_partitioning_field: la columna DATE o TIMESTAMP que se usa para crear una tabla particionada. Si la partición por tiempo está habilitada sin este valor, se crea una tabla particionada por tiempo de transferencia.
  • --require_partition_filter: cuando se habilita esta opción, se requiere que los usuarios incluyan una cláusula WHERE que especifique las particiones que deben consultarse. Requerir un filtro de partición puede reducir el costo y mejorar el rendimiento. Para obtener más información, visita la sección sobre Cómo consultar tablas particionadas.
  • --clustering_fields: una lista separada por comas de hasta cuatro nombres de columnas que se usan para crear una tabla agrupada en clústeres. Esta marca solo se puede usar con tablas particionadas.
  • --destination_kms_key: la clave de Cloud KMS para la encriptación de los datos de la tabla.

    Para obtener más información sobre las tablas particionadas, consulta los siguientes enlaces:

    Para obtener más información sobre las tablas agrupadas en clústeres, consulta el siguiente enlace:

    Para obtener más información sobre la encriptación de tablas, consulta el siguiente enlace:

Para cargar datos de CSV en BigQuery, ingresa el siguiente comando:

bq --location=location load \
--source_format=format \
dataset.table \
path_to_source \
schema

En este comando, ocurre lo siguiente:

  • location es tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes configurar el valor de la marca como asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • format es CSV.
  • dataset es un conjunto de datos existente.
  • table es el nombre de la tabla en la que cargas los datos.
  • path_to_source es un URI de Cloud Storage con calificación completa o una lista de URI separados por comas. También se admiten comodines.
  • schema es un esquema válido. El esquema puede ser un archivo JSON local o se puede escribir intercalado como parte del comando. También puedes usar la marca --autodetect en lugar de proporcionar una definición de esquema.

Ejemplos:

Con el siguiente comando, se cargan datos de gs://mybucket/mydata.csv en una tabla llamada mytable en mydataset. El esquema se define en un archivo de esquema local llamado myschema.json.

    bq load \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

Con el siguiente comando, se cargan datos de gs://mybucket/mydata.csv en una tabla llamada mytable en mydataset. El esquema se define en un archivo de esquema local llamado myschema.json. El archivo de CSV incluye dos filas de encabezado. Si no se especifica --skip_leading_rows, el comportamiento predeterminado es suponer que el archivo no contiene encabezados.

    bq load \
    --source_format=CSV \
    --skip_leading_rows=2
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

Con el siguiente comando, se cargan datos de gs://mybucket/mydata.csv en una tabla particionada por tiempo de transferencia llamada mytable en mydataset. El esquema se define en un archivo de esquema local llamado myschema.json.

    bq load \
    --source_format=CSV \
    --time_partitioning_type=DAY \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

Con el siguiente comando, se cargan datos de gs://mybucket/mydata.csv en una tabla llamada mytable en mydataset. La tabla se particiona según la columna mytimestamp. El esquema se define en un archivo de esquema local llamado myschema.json.

    bq load \
    --source_format=CSV \
    --time_partitioning_field mytimestamp \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

Con el siguiente comando, se cargan datos de gs://mybucket/mydata.csv en una tabla llamada mytable en mydataset. El esquema se detecta de forma automática.

    bq load \
    --autodetect \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv

Con el siguiente comando, se cargan datos de gs://mybucket/mydata.csv en una tabla llamada mytable en mydataset. El esquema se define intercalado en el formato field:data_type, field:data_type.

    bq load \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    qtr:STRING,sales:FLOAT,year:STRING

Con el siguiente comando, se cargan datos de varios archivos de gs://mybucket/ en una tabla llamada mytable en mydataset. El URI de Cloud Storage usa un comodín. El esquema se detecta de forma automática.

    bq load \
    --autodetect \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata*.csv

Con el siguiente comando, se cargan datos de varios archivos de gs://mybucket/ en una tabla llamada mytable en mydataset. El comando incluye una lista separada por comas de URI de Cloud Storage con comodines. El esquema se define en un archivo de esquema local llamado myschema.json.

    bq load \
    --source_format=CSV \
    mydataset.mytable \
    "gs://mybucket/00/*.csv","gs://mybucket/01/*.csv" \
    ./myschema.json

API

  1. Crea un trabajo de load que apunte a los datos de origen en Cloud Storage.

  2. Especifica tu ubicación en la propiedad location de la sección jobReference del recurso de trabajo (opcional).

  3. Los source URIs deben tener calificación completa y estar en el formato gs://bucket/object. Cada URI puede contener un carácter comodín “*”.

  4. Especifica el formato de datos de CSV mediante la configuración de la propiedad sourceFormat como CSV.

  5. Para verificar el estado del trabajo, llama a jobs.get(job_id*), en el que job_id es el ID del trabajo que la solicitud inicial muestra.

    • Si se muestra status.state = DONE, el trabajo se completó con éxito.
    • Si la propiedad status.errorResult está presente, la solicitud falló y ese objeto incluirá información que describe qué salió mal. Cuando las solicitudes fallan, no se crea ninguna tabla ni se cargan datos.
    • Si status.errorResult está ausente, el trabajo se completó con éxito, aunque puede haber algunos errores recuperables, como problemas en la importación de algunas filas. Los errores recuperables se enumeran en la propiedad status.errors del objeto de trabajo mostrado.

Notas de API:

  • Los trabajos de carga son atómicos y coherentes; si un trabajo de carga falla, ninguno de los datos estará disponible, mientras que, si se completa con éxito, todos los datos estarán disponibles.

  • Se recomienda que generes un ID único y lo pases como jobReference.jobId cuando llames a jobs.insert para crear un trabajo de carga. Este enfoque es más resistente a fallos de la red porque el cliente puede realizar consultas o reintentos con el ID de trabajo conocido.

  • Una llamada a jobs.insert en un ID de tarea determinado es idempotente. Puedes reintentarla tantas veces como desees en el mismo ID de tarea y, como máximo, una de esas operaciones tendrá éxito.

C#

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


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryLoadTableGcsCsv
{
    public void LoadTableGcsCsv(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.csv";
        var dataset = client.GetDataset(datasetId);
        var schema = new TableSchemaBuilder {
            { "name", BigQueryDbType.String },
            { "post_abbr", BigQueryDbType.String }
        }.Build();
        var destinationTableRef = dataset.GetTableReference(
            tableId: "us_states");
        // Create job configuration
        var jobOptions = new CreateLoadJobOptions()
        {
            // The source format defaults to CSV; line below is optional.
            SourceFormat = FileFormat.Csv,
            SkipLeadingRows = 1
        };
        // Create and run job
        var loadJob = client.CreateLoadJob(
            sourceUri: gcsURI, destination: destinationTableRef,
            schema: schema, options: jobOptions);
        loadJob.PollUntilCompleted();  // Waits for the job to complete.
        // Display the number of rows uploaded
        BigQueryTable table = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
    }
}

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración de Go incluidas 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 Go de BigQuery.

// 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.csv")
gcsRef.SkipLeadingRows = 1
gcsRef.Schema = bigquery.Schema{
	{Name: "name", Type: bigquery.StringFieldType},
	{Name: "post_abbr", Type: bigquery.StringFieldType},
}
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())
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración de Java incluidas 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 Java.

Job job = table.load(FormatOptions.csv(), sourceUri);
// Wait for the job to complete
try {
  Job completedJob =
      job.waitFor(
          RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
          RetryOption.totalTimeout(Duration.ofMinutes(3)));
  if (completedJob != null && completedJob.getStatus().getError() == null) {
    // Job completed successfully
  } else {
    // Handle error case
  }
} catch (InterruptedException e) {
  // Handle interrupted wait
}

Node.js

Antes de probar esta muestra, sigue las instrucciones de configuración para Node.js 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 Node.js.

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the CSV file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.csv';

async function loadCSVFromGCS() {
  // Imports a GCS file into a table with manually defined schema.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';
  // const tableId = 'my_table';

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const metadata = {
    sourceFormat: 'CSV',
    skipLeadingRows: 1,
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
      ],
    },
    location: 'US',
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), metadata);

  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

Antes de probar esta muestra, sigue las instrucciones de configuración de PHP 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 PHP.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId  = 'The Google project ID';
// $datasetId  = 'The BigQuery dataset ID';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table('us_states');

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.csv';
$schema = [
    'fields' => [
        ['name' => 'name', 'type' => 'string'],
        ['name' => 'post_abbr', 'type' => 'string']
    ]
];
$loadConfig = $table->loadFromStorage($gcsUri)->schema($schema)->skipLeadingRows(1);
$job = $table->runJob($loadConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Usa el método Client.load_table_from_uri() para cargar datos desde un archivo de CSV a Cloud Storage. Proporciona una definición de esquema explícita mediante la configuración de la propiedad LoadJobConfig.schema como una lista de objetos SchemaField.

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

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.schema = [
    bigquery.SchemaField("name", "STRING"),
    bigquery.SchemaField("post_abbr", "STRING"),
]
job_config.skip_leading_rows = 1
# The source format defaults to CSV, so the line below is optional.
job_config.source_format = bigquery.SourceFormat.CSV
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"

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))

Ruby

Antes de probar esta muestra, sigue las instrucciones de configuración para Ruby 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 Ruby.

require "google/cloud/bigquery"

def load_table_gcs_csv dataset_id = "your_dataset_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"
  table_id = "us_states"

  load_job = dataset.load_job table_id, gcs_uri, skip_leading: 1 do |schema|
    schema.string "name"
    schema.string "post_abbr"
  end
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done!  # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table(table_id)
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

Anexa o reemplaza una tabla con datos CSV

Puedes cargar datos adicionales en una tabla desde archivos de origen o cuando adjuntas resultados de consultas.

En la consola y en la IU web clásica de BigQuery, usa la opción de Write preference (Preferencia de escritura) para especificar qué acción tomar cuando cargues datos desde un archivo de origen o desde un resultado de consulta.

Cuando cargas datos adicionales en una tabla, tienes las siguientes opciones:

Opción de Console Opción de la IU web clásica Marcador CLI Propiedad de la API de BigQuery Descripción
Escribir si está vacía Escribir si está vacía Ninguna WRITE_EMPTY Solo escribe los datos si la tabla está vacía.
Adjuntar a la tabla Adjuntar a la tabla --noreplace o --replace=false; si no se especifica --[no]replace, la opción predeterminada es la de adjuntar WRITE_APPEND Adjunta los datos al final de la tabla (predeterminado).
Reemplazar tabla Reemplazar tabla --replace o --replace=true WRITE_TRUNCATE Borra todos los datos existentes de una tabla antes de escribir los datos nuevos.

Si cargas datos en una tabla existente, el trabajo de carga puede adjuntar los datos o reemplazar la tabla.

Puedes adjuntar datos a una tabla o reemplazarla de la siguiente manera:

  • Mediante GCP Console o la IU web clásica
  • Mediante el comando bq load de la CLI
  • Mediante una llamada al método jobs.insert de la API y la configuración de un trabajo de load
  • Mediante las bibliotecas cliente

Console

  1. Abre la IU web de BigQuery en GCP Console.
    Ir a GCP Console

  2. En el panel de navegación, en la sección Recursos, expande tu proyecto y selecciona un conjunto de datos.

  3. En el lado derecho de la ventana, en el panel de detalles, haz clic en Crear tabla (Create table). El proceso para adjuntar y reemplazar datos en un trabajo de carga es el mismo que se usa en la creación de una tabla en un trabajo de carga.

    Crear tabla

  4. En la página Crear tabla (Create table), en la sección Fuente (Source), realiza lo siguiente:

    • En Crear una tabla desde (Create table from), selecciona Cloud Storage.

    • En el campo de origen, busca o ingresa el URI de Cloud Storage. Ten en cuenta que no puedes incluir múltiples URI en la IU web de BigQuery, pero se admiten comodines. El depósito de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla a la que quieres adjuntar datos o reemplazar.

      Seleccionar archivo

    • En Formato de archivo (File format), selecciona CSV.

  5. En la página Crear tabla, en la sección Destino (Destination), realiza lo siguiente:

    • En Nombre del conjunto de datos (Dataset name), selecciona el conjunto de datos que corresponda.

      Seleccionar conjunto de datos

    • En el campo Nombre de tabla, ingresa el nombre de la tabla a la que quieres adjuntar datos o reemplazar en BigQuery.

    • Verifica que Tipo de tabla (Table type) esté configurado como Tabla nativa (Native table).

  6. En la sección Esquema, en Detección automática, marca la opción Parámetros de entrada y esquema para habilitar la detección automática de esquemas. También puedes ingresar la definición de esquema de forma manual como se indica a continuación:

    • Habilita Editar como texto y, luego, ingresa el esquema de la tabla como un arreglo JSON.

      Agregar esquema como arreglo de JSON

    • Usa Agregar campo (Add field) para ingresar el esquema de forma manual.

      Agregar definición de esquema con el botón Agregar campo (Add Field)

  7. En Configuración de clústeres y particiones, deja los valores predeterminados. No puedes convertir una tabla en una tabla particionada o agrupada en clústeres mediante una operación de agregado o reemplazo, y GCP Console no admite adjuntar datos a tablas particionadas o agrupadas en clústeres ni reemplazarlas en un trabajo de carga.

  8. Haz clic en Opciones avanzadas.

    • En Preferencia de escritura, elige Adjuntar a la tabla o Reemplazar tabla.
    • En Cantidad de errores permitidos, acepta el valor predeterminado de 0 o ingresa la cantidad máxima de filas con errores que pueden ignorarse. Si la cantidad de filas con errores excede este valor, el trabajo generará un mensaje invalid y se producirá un error.
    • En Valores desconocidos, marca Ignorar valores desconocidos para ignorar cualquier valor en una fila que no esté presente en el esquema de la tabla.
    • En Delimitador de campos, elige el carácter que separa las celdas en tu archivo CSV: Coma, Tabulación, Barra vertical o Personalizado. Si eliges Personalizado, debes ingresar el delimitador en el cuadro Delimitador de campos personalizado. El valor predeterminado es Coma.
    • En Filas de encabezado que se omitirán, ingresa la cantidad de filas de encabezado que se omitirán en la parte superior del archivo de CSV. El valor predeterminado es 0.
    • En Saltos de línea entrecomillados, marca Permitir saltos de línea entrecomillados para permitir secciones de datos entrecomillados que contengan caracteres de salto de línea en un archivo de CSV. El valor predeterminado es false.
    • En Filas irregulares, marca Permitir filas irregulares para aceptar filas en archivos de CSV a las que les falten columnas opcionales finales. Los valores faltantes se consideran nulos. Si no se marca esta opción, los registros en los que faltan columnas finales se tratan como registros incorrectos y, si hay demasiados, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es false.
    • En Encriptación, haz clic en Clave administrada por el cliente para usar una clave de Cloud Key Management Service. Si dejas la configuración de Clave administrada por Google, BigQuery encripta los datos en reposo.

      Reemplazar tabla

  9. Haz clic en Crear tabla.

IU clásica

  1. Ve a la IU web de BigQuery.
    Ir a la IU web de BigQuery

  2. En el panel de navegación, desplázate sobre un conjunto de datos, haz clic en el ícono de flecha hacia abajo imagen del ícono de flecha hacia abajo y, luego, en Crear tabla nueva. El proceso para adjuntar y reemplazar datos en un trabajo de carga es el mismo que se usa en la creación de una tabla en un trabajo de carga.

  3. En la página Crear tabla, en la sección Datos fuente, haz lo siguiente:

    • En Ubicación, selecciona Cloud Storage y, en el campo de origen, ingresa el URI de Cloud Storage. Ten en cuenta que no puedes ingresar múltiples un URI en la IU, pero se admiten comodines. El depósito de Cloud Storage debe estar en la misma ubicación que el conjunto de datos que contiene la tabla a la que quieres adjuntar datos o reemplazar.
    • En Formato de archivo, selecciona CSV.
  4. En la página Crear tabla, en la sección Tabla de destino, realiza lo siguiente:

    • En Nombre de tabla, elige el conjunto de datos adecuado y, en el campo de nombre de tabla, ingresa el nombre de la tabla a la que quieres adjuntar datos o reemplazar.
    • Verifica que Tipo de tabla (Table type) esté configurado como Tabla nativa (Native table).
  5. En la sección Esquema, ingresa la definición del esquema.

    • Para los archivos de CSV, puedes marcar la opción de Detección automática a fin de habilitar la detección automática de esquemas.

      vínculo de detección automática

    • También puedes ingresar la información del esquema de forma manual como se indica a continuación:

      • Haz clic en Edit as text (Editar como texto) y, luego, ingresa el esquema de la tabla como un arreglo de JSON:

        Agregar esquema como arreglo de JSON

      • Usa Agregar campo (Add Field) para ingresar el esquema de forma manual:

        Agregar esquema con agregar campos

  6. En la sección Opciones, realiza lo siguiente:

    • En Delimitador de campos, elige el carácter que separa las celdas en tu archivo CSV: Coma, Tabulación, Barra vertical o Personalizado. Si eliges Otro, debes ingresar el delimitador en el cuadro Delimitador de campos personalizado. El valor predeterminado es Coma.
    • En Filas de encabezado que se omitirán, ingresa la cantidad de filas de encabezado que se omitirán en la parte superior del archivo de CSV. El valor predeterminado es 0.
    • En Cantidad de errores permitidos, acepta el valor predeterminado de 0 o ingresa la cantidad máxima de filas con errores que pueden ignorarse. Si la cantidad de filas con errores excede este valor, el trabajo generará un mensaje invalid y se producirá un error.
    • En Permitir saltos de línea entrecomillados, activa la casilla para permitir secciones de datos entrecomillados que contienen caracteres de salto de línea en un archivo de CSV. El valor predeterminado es false.
    • En Permitir filas irregulares, marca la casilla para aceptar filas en los archivos CSV a las que les falten columnas opcionales finales. Los valores faltantes se consideran nulos. Si no se marca esta opción, los registros en los que faltan columnas finales se tratan como registros incorrectos y, si hay demasiados, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es false.
    • En Ignorar valores desconocidos, marca la casilla para ignorar cualquier valor de una fila que no esté presente en el esquema de la tabla.
    • En Preferencia de escritura, elige Adjuntar a la tabla o Reemplazar tabla.
    • Deja los valores predeterminados en Tipo de partición, Campo de partición, Requerir filtro de partición y Campos de agrupamiento en clústeres. No puedes convertir una tabla en una tabla particionada o agrupada en clústeres mediante una operación de agregado o reemplazo, y la IU web no admite agregar datos a tablas particionadas o agrupadas en clústeres ni reemplazarlas en un trabajo de carga.
    • En Encriptación de destino, elige Encriptación administrada por el cliente a fin de usar una clave de Cloud Key Management Service para encriptar la tabla. Si dejas la configuración Default, BigQuery encripta los datos en reposo con una clave administrada por Google.
  7. Haz clic en Crear tabla.

CLI

Usa el comando bq load, especifica CSV con la marca --source_format y, además, incluye un URI de Cloud Storage. Puedes incluir un solo URI, una lista de URI separados por comas o un URI que contenga un comodín.

Proporciona el esquema intercalado con un archivo de definición de esquema o usa la detección automática de esquemas.

Especifica la marca --replace para reemplazar la tabla. Usa la marca --noreplace para adjuntar datos a la tabla. Si no se especifica ninguna marca, se adjuntan datos de manera predeterminada.

Es posible modificar el esquema de la tabla cuando adjuntas datos a ella o la reemplazas. Para obtener más información sobre los cambios de esquema admitidos durante una operación de carga, consulta la sección sobre Cómo modificar esquemas de tablas.

Proporciona la marca --location y configura el valor como tu ubicación (opcional).

Las siguientes son otras marcas opcionales:

  • --allow_jagged_rows: cuando se especifica, se aceptan filas en los archivos de CSV a las que les faltan columnas opcionales finales. Los valores faltantes se consideran nulos. Si no se marca esta opción, los registros en los que faltan columnas finales se tratan como registros incorrectos y, si hay demasiados, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es false.
  • --allow_quoted_newlines: cuando se especifica, permite secciones de datos entrecomillados que contienen caracteres de salto de línea en un archivo de CSV. El valor predeterminado es false.
  • --field_delimiter: el carácter que indica el límite entre las columnas en los datos. Se admiten \t y tab como delimitadores de tabulación. El valor predeterminado es ,.
  • --null_marker: una string personalizada opcional que representa un valor NULL en los datos de CSV.
  • --skip_leading_rows: especifica la cantidad de filas de encabezado que deben omitirse en la parte superior del archivo de CSV. El valor predeterminado es 0.
  • --quote: el carácter de comilla que se usa para encerrar registros. El valor predeterminado es ". Para indicar que no hay ningún carácter de comilla, usa una string vacía.
  • --max_bad_records: un número entero que especifica la cantidad máxima de registros incorrectos permitidos antes de que falle todo el trabajo. El valor predeterminado es 0. Como máximo, se muestran cinco errores de cualquier tipo, sin importar el valor de --max_bad_records.
  • --ignore_unknown_values: cuando se especifica, permite y, además, ignora los valores adicionales no reconocidos en datos de CSV o JSON.
  • --autodetect: cuando se especifica, habilita la detección automática de esquemas para los datos de CSV y JSON.
  • --destination_kms_key: la clave de Cloud KMS para la encriptación de los datos de la tabla.
bq --location=location load \
--[no]replace \
--source_format=format \
dataset.table \
path_to_source \
schema

En este comando, ocurre lo siguiente:

  • location es tu ubicación. La marca --location es opcional. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • format es CSV.
  • dataset es un conjunto de datos existente.
  • table es el nombre de la tabla en la que cargas los datos.
  • path_to_source es un URI de Cloud Storage con calificación completa o una lista de URI separados por comas. También se admiten comodines.
  • schema es un esquema válido. El esquema puede ser un archivo JSON local o se puede escribir intercalado como parte del comando. También puedes usar la marca --autodetect en lugar de proporcionar una definición de esquema.

Ejemplos:

Con el siguiente comando, se cargan datos de gs://mybucket/mydata.csv y se reemplaza una tabla llamada mytable en mydataset. El esquema se define mediante la detección automática de esquemas.

    bq load \
    --autodetect \
    --replace \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv

Con el siguiente comando, se cargan datos de gs://mybucket/mydata.csv y se adjuntan datos en una tabla llamada mytable en mydataset. El esquema se define mediante un archivo de esquema JSON: myschema.json.

    bq load \
    --noreplace \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

API

  1. Crea un trabajo de load que apunte a los datos de origen en Cloud Storage.

  2. Especifica tu ubicación en la propiedad location de la sección jobReference del recurso de trabajo (opcional).

  3. Los source URIs deben tener calificación completa y estar en el formato gs://bucket/object. Puedes incluir varios URI en una lista separada por comas. Ten en cuenta que también se admiten comodines.

  4. Especifica el formato de datos mediante la configuración de la propiedad configuration.load.sourceFormat como CSV.

  5. Especifica la preferencia de escritura mediante la configuración de la propiedad configuration.load.writeDisposition como WRITE_TRUNCATE o WRITE_APPEND.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración de Go incluidas 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 Go de BigQuery.

// 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.csv")
gcsRef.SourceFormat = bigquery.CSV
gcsRef.AutoDetect = true
gcsRef.SkipLeadingRows = 1
loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
loader.WriteDisposition = bigquery.WriteTruncate

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())
}

Node.js

Antes de probar esta muestra, sigue las instrucciones de configuración para Node.js 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 Node.js.

Para reemplazar las filas en una tabla existente, configura el valor writeDisposition en el parámetro metadata como 'WRITE_TRUNCATE'.

// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the CSV file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.csv';

async function loadCSVFromGCSTruncate() {
  /**
   * Imports a GCS file into a table and overwrites
   * table data if table already exists.
   */

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset';
  // const tableId = 'my_table';

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const metadata = {
    sourceFormat: 'CSV',
    skipLeadingRows: 1,
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
      ],
    },
    // Set the write disposition to overwrite existing table data.
    writeDisposition: 'WRITE_TRUNCATE',
    location: 'US',
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), metadata);
  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

Antes de probar esta muestra, sigue las instrucciones de configuración de PHP 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 PHP.

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId = 'The BigQuery table ID';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$table = $bigQuery->dataset($datasetId)->table($tableId);

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.csv';
$loadConfig = $table->loadFromStorage($gcsUri)->skipLeadingRows(1)->writeDisposition('WRITE_TRUNCATE');
$job = $table->runJob($loadConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});

// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración de Python incluidas en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para reemplazar las filas de una tabla existente, configura la propiedad LoadJobConfig.write_disposition como la constante de SourceFormat WRITE_TRUNCATE.

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('existing_table')

job_config = bigquery.LoadJobConfig()
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job_config.skip_leading_rows = 1
# The source format defaults to CSV, so the line below is optional.
job_config.source_format = bigquery.SourceFormat.CSV
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"
load_job = client.load_table_from_uri(
    uri, table_ref, 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(table_ref)
print("Loaded {} rows.".format(destination_table.num_rows))

Opciones de CSV

Para cambiar la forma en que BigQuery analiza los datos de CSV, especifica opciones adicionales en la consola, la IU clásica, la CLI o la API.

Para obtener más información sobre el formato CSV, consulta RFC 4180.

Opción CSV Opción de Console Opción de la IU clásica Marcador CLI Propiedad de la API de BigQuery Descripción
Delimitador de campos Delimitador de campo: coma, tabulador, barra vertical, personalizado Delimitador de campo: coma, tabulador, barra vertical, otro -F o --field_delimiter fieldDelimiter El separador para campos en un archivo de CSV (opcional). El separador puede ser cualquier carácter ISO-8859-1 de un solo byte. Para usar un carácter del rango 128-255, debes codificar el carácter como UTF8. BigQuery convierte la string en codificación ISO-8859-1 y usa el primer byte de la string codificada para dividir los datos en su estado binario sin procesar. BigQuery también admite la secuencia de escape “\t” para especificar un separador de tabulador. El valor predeterminado es una coma (“,”).
Filas del encabezado Filas del encabezado que se omitirán Filas del encabezado que se omitirán --skip_leading_rows skipLeadingRows Un número entero que indica la cantidad de filas de encabezado en los datos de origen (opcional).
Cantidad de registros incorrectos permitidos Cantidad de errores permitidos Cantidad de errores permitidos --max_bad_records maxBadRecords La cantidad máxima de registros erróneos que BigQuery puede ignorar cuando ejecuta el trabajo (opcional). Si el número de registros incorrectos excede este valor, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es 0, por lo que es obligatorio que todos los registros sean válidos.
Caracteres de saltos de línea Permitir saltos de línea en secciones entrecomilladas Permitir saltos de línea en secciones entrecomilladas --allow_quoted_newlines allowQuotedNewlines Indica si se deben permitir las secciones de datos entrecomillados que contienen caracteres de saltos de línea en un archivo de CSV (opcional). El valor predeterminado es falso.
Valores nulos personalizados Ninguna Ninguna --null_marker nullMarker Especifica una string que representa un valor nulo en un archivo de CSV (opcional). Por ejemplo, si especificas “\N”, BigQuery interpreta “\N” como un valor nulo cuando se carga un archivo CSV. El valor predeterminado es una string vacía. Si estableces esta propiedad como un valor personalizado, BigQuery muestra un error si hay una string vacía para todos los tipos de datos, excepto STRING y BYTE. Para las columnas STRING y BYTE, BigQuery interpreta la string vacía como un valor vacío.
Columnas opcionales finales Permitir filas irregulares Permitir filas irregulares --allow_jagged_rows allowJaggedRows Acepta las filas que no contienen columnas opcionales finales (opcional). Los valores que faltan se consideran nulos. Si es falso, los registros en los que faltan columnas finales se tratan como registros incorrectos, y si hay demasiados, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es falso. Aplica solo a CSV, se ignora para otros formatos.
Valores desconocidos Ignorar valores desconocidos Ignorar valores desconocidos --ignore_unknown_values ignoreUnknownValues Indica si BigQuery debe permitir valores adicionales que no estén representados en el esquema de la tabla (opcional). Si es verdadero, los valores adicionales se ignoran. Si es falso, los registros con columnas adicionales se tratan como registros incorrectos, y si hay demasiados, se muestra un error no válido en el resultado del trabajo. El valor predeterminado es false. La propiedad sourceFormat determina qué es lo que BigQuery trata como un valor adicional:
  • CSV: columnas finales
  • JSON: valores con nombre que no coinciden con ningún nombre de columna
Comillas Ninguna Ninguna --quote quote El valor que se usa para entrecomillar secciones de datos en un archivo de CSV (opcional). BigQuery convierte la string en codificación ISO-8859-1 y luego usa el primer byte de la string codificada para dividir los datos en su estado binario sin procesar. El valor predeterminado es una comilla doble (“”). Si tus datos no contienen secciones citadas, establece el valor de la propiedad como una string vacía. Si tus datos contienen caracteres de saltos de línea entrecomillados, también debes establecer la propiedad allowQuotedNewlines como true.
Codificación Ninguna Ninguna -E o --encoding encoding La codificación de caracteres de los datos (opcional). Los valores admitidos son UTF-8 o ISO-8859-1. El valor predeterminado es UTF-8. BigQuery decodifica los datos luego de la división de los datos binarios sin procesar con los valores de las propiedades quote y fieldDelimiter.
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

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