Carga datos de CSV desde Cloud Storage

Carga archivos de CSV desde Cloud Storage

Cuando cargas datos de CSV desde Cloud Storage, puedes subirlos en una tabla o una partición nuevas. También puedes adjuntarlos a una tabla o una 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 Carga datos desde una fuente de datos local.

Limitaciones

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

  • 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 de CSV o JSON, los valores en las columnas DATE deben 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 hh:mm:ss (hora-minuto-segundo) de la marca de tiempo debe usar dos puntos (:) como separador.

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

Para cargar datos en BigQuery, se requieren, como mínimo, los siguientes permisos. Estos permisos son necesarios si los datos se cargan en una tabla o una partición nueva, o si se agrega o reemplaza una tabla o una partición.

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

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

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

Las siguientes funciones predefinidas de Cloud IAM 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 de bigquery.dataOwner permite que el usuario cree y actualice tablas en el conjunto de datos a través de un trabajo de carga.

Para obtener más información sobre las funciones y los permisos de Cloud IAM en BigQuery, consulta Funciones y permisos predefinidos.

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.

La función de Cloud IAM predefinida storage.objectViewer puede otorgarse para proporcionar los 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 de BigQuery nueva de la siguiente manera:

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

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

Console

  1. Abre la IU web de BigQuery en Cloud Console.
    Ir a Cloud 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) haz esto:

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

    • En el campo de fuente, busca o ingresa el URI de Cloud Storage. Ten en cuenta que no puedes incluir varios URI en Cloud 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

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

  5. En la página Crear tabla, en la sección Destino (Destination), sigue estos pasos:

    • 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

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

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

  9. Para agrupar la tabla, en la casilla 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ía. Con esta opción, se crea una tabla nueva y se cargan los 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 fallará.
    • 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 la casilla 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 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 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.
    • Para Encriptación, haz clic en Clave administrada por el cliente a fin de usar una Clave de servicio de administración de claves. Si dejas establecida la configuración 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, coloca el cursor 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 de origen, realiza los siguientes pasos:

    • Haz clic en Crear desde el origen.
    • 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 varios URI en la IU web de BigQuery, pero sí 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.
    • Para Formato de archivo (File format), selecciona CSV.
  4. En la sección Tabla de destino, sigue estos pasos:

    • En Nombre de tabla, selecciona el conjunto de datos que corresponda 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 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, sigue estos pasos (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, ingresa el delimitador en la casilla Delimitador de campo 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 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 fallará.
    • 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 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ía. Con esta opción, se crea una tabla nueva y se cargan los datos en ella.
    • Para realizar la partición de la tabla, sigue estos pasos:
      • Para Tipo de partición, haz clic en Ninguna 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 estará disponible si el 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 la casilla Exigir filtro de partición para solicitar a los usuarios que incluyan una cláusula WHERE que especifique las particiones que desean consultar. Exigir un filtro de partición puede reducir los costos y mejorar el rendimiento. Para obtener más información, lee la sección Cómo consultar tablas particionadas. Esta opción no estará disponible si el Tipo de partición está configurado como Ninguno.
    • Para agrupar en clústeres la tabla, en la casilla Agrupar campos, ingresa entre uno y cuatro nombres de campo.
    • En Encriptación de destino, elige Encriptación administrada por el cliente para usar una Clave del servicio de administración de claves 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 único URI, una lista de URI separados por comas o un URI que contenga un comodín. Proporciona el esquema intercalado en un archivo de definición de esquema o usa la detección automática de esquemas.

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

Las siguientes son otras marcas opcionales:

  • --allow_jagged_rows: cuando se especifica, acepte filas en 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 CSV. El valor predeterminado es false.
  • --field_delimiter: el carácter que indica el límite entre las columnas en los datos. \t y tab pueden ser 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 se omiten en la parte superior del archivo CSV. El valor predeterminado es 0.
  • --quote: el carácter de comillas que se usará 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 --max_bad_records.
  • --ignore_unknown_values: cuando se especifica, permite y, además, ignora valores extra no reconocidos en datos de CSV o JSON.
  • --autodetect: cuando se especifica, habilita la detección automática del esquema para los datos de formato CSV y JSON.
  • --time_partitioning_type: habilita las particiones basadas en el tiempo en una tabla y establece el tipo de partición. En este momento, el único valor posible es DAY, que genera una partición por día. Esta marca es opcional cuando se crea una tabla particionada en una columna DATE o TIMESTAMP.
  • --time_partitioning_expiration: un número entero que especifica (en segundos) cuándo se debe borrar una partición basada en el 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 basada en el tiempo se habilita sin este valor, se creará una tabla particionada por tiempo de transferencia.
  • --require_partition_filter: cuando se habilita esta opción, se solicita a los usuarios que incluyan una cláusula WHERE que especifique las particiones que se desean consultar. Exigir un filtro de partición puede reducir los costos y mejorar el rendimiento. Para obtener más información, lee la sección Cómo consultar tablas particionadas.
  • --clustering_fields: una lista separada por comas de hasta cuatro nombres de columna que se usa para crear una tabla agrupada en clústeres. Esta marca solo se puede usar con tablas particionadas.
  • --destination_kms_key: la clave de KMS para la encriptación de los datos de la tabla.

    Para obtener más información sobre tablas particionadas, consulta los siguientes artículos:

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

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

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

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

Donde:

  • location es tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes establecer 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 completamente calificado 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 puede usar la marca --autodetect en lugar de proporcionar una definición de esquema.

Ejemplos:

El siguiente comando carga 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

El siguiente comando carga 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 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

El siguiente comando carga datos de gs://mybucket/mydata.csv a 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

El siguiente comando carga datos de gs://mybucket/mydata.csv a una tabla particionada llamada mytable en mydataset. La tabla está particionada en 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

El siguiente comando carga 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

El siguiente comando carga 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

El siguiente comando carga datos de varios archivos en 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

El siguiente comando carga datos de varios archivos en 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 load que apunte a los datos de origen en Cloud Storage.

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

  3. La propiedad source URIs debe estar completamente calificada en el formato gs://bucket/object. Cada URI puede contener un carácter comodín “*”.

  4. Configura la propiedad sourceFormat como CSV para especificar el formato de datos de 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 muestra la solicitud inicial.

    • Si se muestra status.state = DONE, el trabajo se completó de forma correcta.
    • Si la propiedad status.errorResult está presente, la solicitud falló y ese objeto incluirá información que describirá qué salió mal. Cuando una solicitud falla, 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 cuando se importan algunas filas. Los errores recuperables se enumeran en la propiedad status.errors del objeto de trabajo que se muestra.

Notas de API:

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

  • Como práctica recomendada, genera un ID único y pásalo como jobReference.jobId cuando llames a jobs.insert para crear un trabajo de carga. Este enfoque es más resistente al fallo de la red porque el cliente puede sondear o reintentar con el ID de trabajo conocido.

  • Llamar a jobs.insert en un ID de trabajo determinado es idempotente. Puedes intentar tantas veces como desees en el mismo ID de trabajo y, a lo sumo, una de esas operaciones tendrá éxito.

C#

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# que se encuentran en Guía de inicio rápido: usa bibliotecas cliente. Si deseas obtener 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 Guía de inicio rápido: usa 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.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 Guía de inicio rápido: usa 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 Guía de inicio rápido: usa 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 Guía de inicio rápido: usa 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 Guía de inicio rápido: usa bibliotecas cliente. A fin de 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 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 de Ruby en Guía de inicio rápido: usa 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 de 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 IU web clásica Marcador CLI Propiedad de la API de BigQuery Descripción
Escribir si está vacía Escribir si está vacía Ninguno WRITE_EMPTY Solo escribe los datos si la tabla está vacía.
Agregar a la tabla Agregar a la tabla --noreplace o --replace=false; si --[no]replace no está especificado, la opción predeterminada es agregar 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 o reemplazar una tabla con las siguientes opciones:

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

Console

  1. Abre la IU web de BigQuery en Cloud Console.
    Ir a Cloud 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 el de crear una tabla en un trabajo de carga.

    Crear tabla

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

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

    • En el campo de fuente, busca o ingresa el URI de Cloud Storage. Ten en cuenta que no puedes incluir varios URI en la IU web de BigQuery, pero sí se admiten comodines. El depósito de Cloud Storage debe encontrarse en la misma ubicación que el conjunto de datos que contiene la tabla que agregas o reemplazas.

      Seleccionar archivo

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

  5. En la página Crear tabla, en la sección Destino (Destination), sigue estos pasos:

    • 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 que quieres agregar 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

  7. En Configuración de partición y clústeres, deja los valores predeterminados. No se puede adjuntar ni reemplazar una tabla para convertirla en una tabla particionada o agrupada en clústeres; Cloud Console no admite que se adjunten ni reemplacen tablas particionadas o agrupadas en un trabajo de carga.

  8. Haz clic en Opciones avanzadas (Advanced options).

    • En Preferencia de escritura (Write preference), elige Adjuntar a la tabla (Append to table) o Reemplazar tabla (Overwrite table).
    • 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 fallará.
    • 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 la casilla 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 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 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.
    • Para Encriptación, haz clic en Clave administrada por el cliente a fin de usar una Clave de servicio de administración de claves. Si dejas establecida la configuración 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, coloca el cursor 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 el de crear una tabla en un trabajo de carga.

  3. En la página Crear tabla, en la sección Datos de origen, realiza los siguientes pasos:

    • 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 varios URI en la IU, pero sí se admiten comodines. El depósito de Cloud Storage debe encontrarse en la misma ubicación que el conjunto de datos que contiene la tabla que agregas o reemplazas.
    • Para Formato de archivo, selecciona CSV.
  4. En la página Crear tabla, en la sección Tabla de destino (Destination table), haz esto:

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

    • Para los archivos de CSV, puedes marcar la opción de Detección automática (Automatically detect) 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 de la siguiente manera:

      • Haz clic en 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. Haz esto en la sección Opciones:

    • 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, ingresa el delimitador en la casilla Delimitador de campo 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 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 fallará.
    • 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 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, Campos de partición, Exigir filtro de partición y Campos de agrupamiento. No puedes agregar ni reemplazar una tabla para convertirla en una tabla particionada o agrupada; la IU web no admite agregar ni reemplazar tablas particionadas o agrupadas en un trabajo de carga.
    • En Encriptación de destino, elige Encriptación administrada por el cliente para usar una Clave del servicio de administración de claves 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 único URI, una lista de URI separados por comas o un URI que contenga un comodín.

Proporciona el esquema intercalado en 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 agregan 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 Modifica esquemas de tablas.

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

Las siguientes son otras marcas opcionales:

  • --allow_jagged_rows: cuando se especifica, acepte filas en 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 CSV. El valor predeterminado es false.
  • --field_delimiter: el carácter que indica el límite entre las columnas en los datos. \t y tab pueden ser 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 se omiten en la parte superior del archivo CSV. El valor predeterminado es 0.
  • --quote: el carácter de comillas que se usará 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 --max_bad_records.
  • --ignore_unknown_values: cuando se especifica, permite y, además, ignora valores extra no reconocidos en datos de CSV o JSON.
  • --autodetect: cuando se especifica, habilita la detección automática del esquema para los datos de formato CSV y JSON.
  • --destination_kms_key: la clave de 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

donde:

  • 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 completamente calificado 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 puede usar la marca --autodetect en lugar de proporcionar una definición de esquema.

Ejemplos:

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

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

El siguiente comando carga datos desde gs://mybucket/mydata.csv y adjunta datos a 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 load que apunte a los datos de origen en Cloud Storage.

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

  3. La propiedad source URIs debe estar completamente calificada 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. Para especificar el formato de los datos, establece la propiedad configuration.load.sourceFormat en CSV.

  5. Para especificar la preferencia de escritura, configura 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 Guía de inicio rápido: usa 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.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 Guía de inicio rápido: usa 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, establece el valor writeDisposition en el parámetro metadata en '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 Guía de inicio rápido: usa 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 Guía de inicio rápido: usa bibliotecas cliente. A fin de 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 WRITE_TRUNCATE de SourceFormat.

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

Carga datos de CSV con particiones de subárbol

BigQuery admite la carga de datos de CSV con particiones de subárbol almacenados en Cloud Storage y propagará las columnas de partición de subárbol como columnas en la tabla administrada de BigQuery de destino. Para obtener más información, consulta la página sobre cómo cargar datos particionados de forma externa de Cloud Storage.

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 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 del 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 la cantidad 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 CSV (opcional). El valor predeterminado es falso.
Valores nulos personalizados Ninguna Ninguno --null_marker nullMarker Especifica una string que representa un valor nulo en un archivo 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 falso. Con la propiedad sourceFormat, se 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
Cotización Ninguna Ninguno --quote quote El valor que se usa para entrecomillar secciones de datos en un archivo 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 entrecomilladas, establece el valor de la propiedad en una string vacía. Si tus datos contienen caracteres de salto de línea entrecomillados, también debes establecer la propiedad allowQuotedNewlines en true.
Codificación Ninguna Ninguno -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 mediante 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.