Carga datos de CSV desde Google Cloud Storage

Carga archivos de CSV desde Cloud Storage

Cuando cargas datos de CSV desde Cloud Storage, puedes subirlos 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 Sube 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. Cargar datos de CSV comprimidos en BigQuery es más lento que subir datos sin comprimir.
  • Cuando cargas datos 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 cargues datos de JSON o CSV, los valores en las columnas TIMESTAMP deben 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 de proyecto o de conjuntos de datos que te permitan cargar datos en tablas y particiones de BigQuery nuevas o existentes. Si cargas datos de Cloud Storage, también necesitarás acceso al depósito que contiene tus datos.

Permisos de BigQuery

Cuando cargues datos en BigQuery desde Cloud Storage, se te debe otorgar la función bigquery.dataOwner o bigquery.dataEditor a nivel de proyecto o a nivel de conjunto de datos. Ambas funciones otorgan a los usuarios y grupos el permiso para cargar datos en una tabla nueva, agregarlos a una tabla existente o reemplazarlos.

Otorgar las funciones a nivel de proyecto le da al usuario o al grupo permiso para cargar datos en tablas en cada conjunto de datos del proyecto. Otorgar las funciones a nivel de conjunto de datos le da al usuario o al grupo la capacidad para cargar datos solo en las tablas de ese conjunto de datos.

Para obtener más información sobre la configuración del acceso al conjunto de datos, consulta Controla el acceso al conjunto de datos. Para obtener más información sobre las funciones de IAM en BigQuery, consulta Control de acceso.

Permisos de Cloud Storage

Para cargar datos desde un depósito de Cloud Storage, se te deben otorgar permisos storage.objects.get en el nivel del proyecto o en ese depósito individual. Si usas un comodín de URI, también debes tener los permisos de storage.objects.list.

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

Carga datos de CSV en una tabla

Sigue los pasos a continuación para cargar datos de CSV de Cloud Storage en una tabla de BigQuery nueva o adjuntar datos a una tabla existente:

IU web

  1. Dirígete 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 haz clic en Create new table (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 Create Table (Crear tabla), en la sección Source Data (Datos de origen), selecciona lo siguiente:

    • En Location (Ubicación), selecciona Google 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 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 vas a crear.
    • Para File format (Formato de archivo), selecciona Comma-separated values (CSV) (Valores separados por comas).
  4. En la página Create Table, en la sección Destination Table (Tabla de destino), haz lo siguiente:

    • En Table name (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 vas a crear en BigQuery.
    • Verifica que Table type (Tipo de tabla) esté configurado como Native table (Tabla nativa).
  5. En la sección Schema (Esquema), ingresa la definición del esquema.

    • Ingresa la información del esquema de forma manual de la siguiente manera:

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

        Agregar un esquema como arreglo de JSON

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

        Agregar esquema con agregar campos

  6. Selecciona los elementos aplicables en la sección Options (Opciones) y haz clic en Create table. Para obtener información sobre las opciones disponibles, consulta las Opciones de CSV.

Línea de comandos

Usa el comando bq load, especifica CSV como el 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 la marca --location y configura el valor en tu ubicación.

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 configurar el valor de la marca en 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 totalmente 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 puedes usar la marca --autodetect en lugar de proporcionar una definición de esquema.

Además, puedes agregar marcas para las opciones de CSV que te permiten controlar cómo BigQuery analiza tus datos. Por ejemplo, puedes usar la marca --skip_leading_rows a fin de ignorar las filas del encabezado en el archivo de CSV y la marca --encoding para identificar la codificación de caracteres de los datos.

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. mybucket y mydataset se crean en la ubicación multirregión US.

    bq --location=US 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 intercalado en el formato [FIELD]:[DATA_TYPE], [FIELD]:[DATA_TYPE]. mybucket y mydataset se crean en la ubicación multirregión US.

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

    Cuando especificas el esquema en la línea de comandos, no puedes incluir un tipo de RECORD (STRUCT), una descripción de campo ni especificar el modo de campo. Todos los modos de campo están predeterminados en NULLABLE. Para incluir descripciones de campo, modos y tipos de RECORD, proporciona en su lugar un archivo de esquema 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. La marca --skip_leading_rows se usa para ignorar las primeras dos filas del encabezado en el archivo de CSV. mybucket y mydataset se crean en la ubicación multirregión asia-northeast1.

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

API

Configura las siguientes propiedades para cargar datos CSV con la API.

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

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

  3. Los URI de origen deben estar calificados por completo en el formato gs://[BUCKET]/[OBJECT]. Cada URI puede contener un carácter comodín “*”.

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

  5. Para verificar el estado del trabajo, llama a jobs.get([JOB_ID]*), en el que [JOB_ID] es el ID del trabajo mostrado por la solicitud inicial.

    • Si status.state = DONE está presente, 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 falla una solicitud, no se crea ninguna tabla ni se agregan datos.
    • Si status.errorResult está ausente, el trabajo se completó con éxito, aunque puede haber algunos errores no fatales, como problemas cuando se importan algunas filas. Los errores no fatales se enumeran en la propiedad status.errors del objeto del 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, y si un trabajo de carga se realiza con éxito, todos los datos estarán disponibles.

  • Como recomendación, 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() con un ID de trabajo dado es idempotente, en otras palabras, puedes volver a intentarlo tantas veces como desees con el mismo ID de trabajo y, al menos, una de las 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. A fin de 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 esta muestra, sigue las instrucciones de configuración para Go 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 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 esta muestra, sigue las instrucciones de configuración para Java que se encuentran 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 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.

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";
// const datasetId = "my_dataset";
// const tableId = "my_table";

/**
 * 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';

// Instantiates clients
const bigquery = new BigQuery({
  projectId: projectId,
});

const storage = new Storage({
  projectId: projectId,
});

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

// Loads data from a Google Cloud Storage file into the table
bigquery
  .dataset(datasetId)
  .table(tableId)
  .load(storage.bucket(bucketName).file(filename), metadata)
  .then(results => {
    const job = results[0];

    // 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;
    }
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

PHP

Antes de probar esta muestra, sigue las instrucciones de configuración para 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 esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. 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 con la configuración de la propiedad LoadJobConfig.schema en 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

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

IU web

  1. Dirígete 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 haz clic en Create new table. El proceso de carga de datos es el mismo que el proceso para crear una tabla vacía.

  3. En la página Create Table, en la sección Source Data, selecciona lo siguiente:

    • En Location, selecciona Google 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 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 vas a crear.
    • Para File format selecciona Comma-separated values (CSV).
  4. En la página Create Table, en la sección Destination Table, haz lo siguiente:

    • En Table name, selecciona el conjunto de datos que corresponda y en el campo de nombre de tabla ingresa el nombre de la tabla que vas a crear en BigQuery.
    • Verifica que Table type esté configurado como Native table.
  5. En la sección Schema (Esquema), marca la opción Auto-detect (Detección automática) para habilitar la detección automática de esquemas.

    vínculo de detección automática

  6. Selecciona los elementos aplicables en la sección Options y haz clic en Create table. Para obtener información sobre las opciones disponibles, consulta las Opciones de CSV.

Línea de comandos

Usa el comando bq load, especifica CSV como el 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 la marca --location y configura el valor en tu ubicación.

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

donde:

  • [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 en asia-northeast1. Puedes configurar un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • La marca --autodetect habilita la detección automática de esquemas.
  • [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 totalmente calificado o una lista de URI separados por comas. También se admiten comodines.

Además, puedes agregar marcas para las opciones de CSV que te permiten controlar cómo BigQuery analiza tus datos. Por ejemplo, puedes usar la marca --skip_leading_rows a fin de ignorar las filas del encabezado en el archivo de CSV y la marca --encoding para identificar la codificación de caracteres de los datos.

Ejemplos:

  • El siguiente comando carga datos de gs://mybucket/mydata.csv en una tabla llamada mytable en mydataset. El esquema se define mediante la detección automática de esquemas. mybucket y mydataset se crean en la ubicación multirregión US.

    bq --location=US 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 URI de Cloud Storage usa un comodín y el esquema se define mediante la detección automática de esquemas. mybucket y mydataset se crean en la región asia-northeast1.

    bq --location=asia-northeast1 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. El esquema se define mediante la detección automática de esquemas. mybucket y mydataset se crean en la región asia-northeast1.

    bq --location=asia-northeast1 load --autodetect --source_format=CSV mydataset.mytable "gs://mybucket/myfile.csv,gs://mybucket/myfile2.csv"
    

API

Configura las siguientes propiedades para cargar datos CSV con la API.

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

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

  3. Los URI de origen deben estar calificados por completo en el formato gs://[BUCKET]/[OBJECT]. Cada URI puede contener un carácter comodín “*”.

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

  5. Para verificar el estado del trabajo, llama a jobs.get([JOB_ID]*), en el que [JOB_ID] es el ID del trabajo mostrado por la solicitud inicial.

    • Si status.state = DONE está presente, 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 falla una solicitud, no se crea ninguna tabla ni se agregan datos.
    • Si status.errorResult está ausente, el trabajo se completó con éxito, aunque puede haber algunos errores no fatales, como problemas cuando se importan algunas filas. Los errores no fatales se enumeran en la propiedad status.errors del objeto del 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, y si un trabajo de carga se realiza con éxito, todos los datos estarán disponibles.

  • Como recomendación, 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() con un ID de trabajo dado es idempotente, en otras palabras, puedes volver a intentarlo tantas veces como desees con el mismo ID de trabajo y, al menos, una de las operaciones tendrá éxito.

Go

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

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)

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.

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";
// const datasetId = "my_dataset";
// const tableId = "my_table";

/**
 * 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';

// Instantiates clients
const bigquery = new BigQuery({
  projectId: projectId,
});

const storage = new Storage({
  projectId: projectId,
});

// Configure the load job. For full list of options, see:
// https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
const metadata = {
  sourceFormat: 'CSV',
  skipLeadingRows: 1,
  autodetect: true,
};

// Loads 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 para 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';
$loadConfig = $table->loadFromStorage($gcsUri)->autodetect(true)->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 esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Establece la propiedad LoadJobConfig.autodetect como True para que BigQuery infiera el esquema desde una muestra de los datos de entrada:

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

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.autodetect = True
job_config.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))

Reemplaza una tabla con datos de CSV

Puedes cargar datos adicionales en una tabla desde los archivos de origen o cuando agregas los resultados de la consulta. Si el esquema de los datos no coincide con el esquema de la tabla o partición de destino, puedes actualizar el esquema cuando agregues o reemplaces los datos.

Si actualizas el esquema cuando agregas datos, BigQuery te permitirá realizar las siguientes acciones:

  • Agregar campos nuevos
  • Cambiar los campos REQUIRED por NULLABLE

Si reemplazas una tabla, el esquema siempre se reemplaza. Las actualizaciones de esquema no están restringidas cuando reemplazas una tabla.

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 realizar cuando cargues datos desde un archivo de origen o desde un resultado de consulta. La CLI y la API incluyen las siguientes opciones:

Opción de Console Opción de la IU clásica Marca de CLI Propiedad de la API de BigQuery Descripción
Write if empty (Escribir si está vacía) Write if empty Ninguna WRITE_EMPTY Escribe los datos solo si la tabla está vacía.
Append to table (Agregar a la tabla) Append to table --noreplace o --replace=false; si --[no]replace no se especifica, el valor predeterminado es agregar WRITE_APPEND (Predeterminado) Agrega los datos al final de la tabla.
Overwrite table (Sobrescribir tabla) Overwrite table --replace o --replace=true WRITE_TRUNCATE Borra todos los datos existentes de una tabla antes de escribir los datos nuevos.

De manera predeterminada, los trabajos de carga adjuntarán datos a una tabla, a menos que se altere la disposición de escritura. Si, en cambio, deseas reemplazar los datos con los datos de un trabajo de carga, puedes optar por reemplazar los datos en una tabla de BigQuery:

IU web

  1. Dirígete 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 haz clic en Create new table. El proceso de carga de datos es el mismo que el proceso para crear una tabla vacía.

  3. En la página Create Table, en la sección Source Data, selecciona lo siguiente:

    • En Location, selecciona Google 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 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 o reemplazar.
    • Para File format selecciona Comma-separated values (CSV).
  4. En la página Create Table, en la sección Destination Table, haz lo siguiente:

    • En Table name, elige el conjunto de datos apropiado y, en el campo de nombre de la tabla, ingresa el nombre de la tabla que quieres crear o reemplazar.
    • Verifica que Table type esté configurado como Native table.
  5. En la sección Schema, ingresa la definición del esquema.

    • Para los archivos de CSV, puedes marcar la opción de Auto-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 Edit as text y luego ingresa el esquema de la tabla como un arreglo de JSON:

        Agregar un esquema como arreglo de JSON

      • Usa Add Field para ingresar el esquema de forma manual:

        Agregar esquema con agregar campos

  6. En la sección Options, para Write preference, elige Write if empty, Append to table, o bien, Overwrite table.

    Agregar esquema con agregar campos

  7. Haz clic en Create Table.

Línea de comandos

Ingresa el comando bq load con la marca --replace para reemplazar la tabla. Proporciona la marca --location y configura el valor en tu ubicación. Usa la marca --noreplace para agregar datos a una tabla. Si no se especifica ninguna marca, se agregan datos de manera predeterminada.

Cuando agregas o reemplazas una tabla, puedes usar la marca --schema_update_option para actualizar el esquema de la tabla de destino con el esquema de los datos nuevos. Se pueden usar las siguientes opciones con la marca --schema_update_option:

  • ALLOW_FIELD_ADDITION: agrega campos nuevos al esquema. Los campos nuevos no pueden ser REQUIRED.
  • ALLOW_FIELD_RELAXATION: cambia los campos obligatorios a nulos. Repite esta opción para especificar una lista de valores.
bq --location=[LOCATION] load --[no]replace [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.
  • [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 totalmente 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 puedes usar la marca --autodetect en lugar de proporcionar una definición de esquema.

Además, puedes agregar marcas para las opciones de CSV que te permiten controlar cómo BigQuery analiza tus datos de CSV. Por ejemplo, puedes usar la marca --skip_leading_rows a fin de ignorar las filas del encabezado en el archivo de CSV y la marca --encoding para identificar la codificación de caracteres de los datos.

Ejemplos:

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

    bq --location=US load --autodetect --replace --source_format=CSV mydataset.mytable gs://mybucket/mydata.csv
    
  • El siguiente comando carga datos de gs://mybucket/mydata.csv y agrega los datos en una tabla llamada mytable en mydataset. El esquema se define con un archivo de esquema JSON: myschema.json. mybucket y mydataset se crean en la ubicación multirregión US.

    bq --location=US load --autodetect --noreplace --source_format=CSV mydataset.mytable gs://mybucket/mydata.csv ./myschema.json
    
  • El siguiente comando carga datos de gs://mybucket/mydata.csv y agrega los datos en una tabla llamada mytable en mydataset. Se usa un archivo de esquema JSON local llamado myschema.json. La definición del esquema contiene campos nuevos que no están presentes en la tabla de destino. mybucket y mydataset se crean en la región asia-northeast1.

    bq --location=asia-northeast1 load --noreplace --schema_update_option=ALLOW_FIELD_ADDITION --source_format=CSV mydataset.mytable gs://mybucket/mydata.csv ./myschema.json
    
  • El siguiente comando carga datos de gs://mybucket/mydata.csv y agrega los datos en una tabla llamada mytable en mydataset. Se usa un archivo de esquema JSON local llamado myschema.json. La definición del esquema cambia (disminuye) dos campos REQUIRED a NULLABLE. mybucket y mydataset se crean en la región asia-northeast1.

    bq --location=asia-northeast1 load --noreplace --schema_update_option=ALLOW_FIELD_RELAXATION --source_format=CSV mydataset.mytable gs://mybucket/mydata.csv ./myschema.json
    

API

Configura las siguientes propiedades para cargar datos CSV con la API.

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

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

  3. Los URI de origen deben estar calificados por completo en el formato gs://[BUCKET]/[OBJECT]. Puedes incluir varios URI como una lista separada por comas. Ten en cuenta que los comodines también son compatibles cuando se cargan datos CSV desde Google Cloud Storage.

  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, WRITE_APPEND o WRITE_EMPTY.

  6. Para actualizar el esquema en tu trabajo de carga, configura la propiedad configuration.load.schemaUpdateOptions como ALLOW_FIELD_ADDITION o ALLOW_FIELD_RELAXATION.

Go

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

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

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = "your-project-id";
// const datasetId = "my_dataset";
// const tableId = "my_table";

/**
 * 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';

// Instantiates clients
const bigquery = new BigQuery({
  projectId: projectId,
});

const storage = new Storage({
  projectId: projectId,
});

// Configure the load job. For full list of options, see:
// https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.load
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',
};

// Loads 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 para 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 esta muestra, sigue las instrucciones de configuración para Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si quieres obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

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

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

previous_rows = client.get_table(table_ref).num_rows
assert previous_rows > 0

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 Console, la IU clásica, la CLI o la API. Para obtener más información sobre el formato de CSV, consulta RFC 4180.

Opción de CSV Opción de Console Opción de la IU clásica Marca de 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 (Opcional) El separador para campos en un archivo de CSV. 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 (Opcional) Un número entero que indica la cantidad de filas de encabezado en los datos de origen.
Cantidad de registros incorrectos permitidos Cantidad de errores permitidos Cantidad de errores permitidos --max_bad_records maxBadRecords (Opcional) El número máximo de registros erróneos que BigQuery puede ignorar cuando ejecuta el trabajo. 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 (Opcional) Indica si se deben permitir las secciones de datos entrecomillados que contienen caracteres de saltos de línea en un archivo de CSV. El valor predeterminado es falso.
Valores nulos personalizados Ninguna Ninguna --null_marker nullMarker (Opcional) Especifica una string que representa un valor nulo en un archivo de CSV. 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 (Opcional) Acepta las filas que no contienen columnas opcionales finales. 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 (Opcional) Indica si BigQuery debe permitir valores adicionales que no estén representados en el esquema de la tabla. 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. La propiedad sourceFormat determina qué trata BigQuery 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 (Opcional) El valor que se usa para entrecomillar secciones de datos en un archivo de CSV. 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 (Opcional) La codificación de caracteres de los datos. 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 sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.