Gestionar datos de tablas

En este documento se describe cómo gestionar los datos de las tablas en BigQuery. Puedes trabajar con los datos de las tablas de BigQuery de las siguientes formas:

  • Cargar datos en una tabla
  • Añadir o sobrescribir datos de una tabla
  • Consultar (o previsualizar) los datos de una tabla
  • Consultar datos de tablas
  • Modificar datos de tablas mediante el lenguaje de manipulación de datos (DML)
  • Copiar datos de una tabla
  • Exportar datos de una tabla

Para obtener información sobre cómo gestionar los esquemas de tabla, consulta el artículo Modificar los esquemas de tabla.

Antes de empezar

Concede los roles que otorgan los permisos necesarios a los usuarios que deban realizar cada tarea de este documento. Los permisos necesarios (si los hay) para realizar una tarea se indican en la sección "Permisos necesarios" de la tarea.

Cargar datos en una tabla

Puedes cargar datos al crear una tabla o crear una tabla vacía y cargar los datos más adelante. Cuando cargues datos, puedes usar la detección automática de esquemas para los formatos de datos admitidos o especificar el esquema.

Para obtener más información sobre cómo cargar datos, consulta la documentación sobre el formato y la ubicación de los datos de tu fuente:

Añadir y sobrescribir datos de tablas

Puede sobrescribir los datos de una tabla mediante una operación de carga o de consulta. Puedes añadir datos a una tabla ya creada realizando una operación de carga y anexión o añadiendo los resultados de una consulta a la tabla.

Para obtener más información sobre cómo añadir datos a una tabla o sobrescribirla al cargar datos, consulta la documentación del formato de los datos de origen:

Para añadir datos a una tabla o sobrescribirla con los resultados de una consulta, especifica una tabla de destino y define la disposición de escritura como:

  • Añadir a tabla: añade los resultados de la consulta a una tabla.
  • Sobrescribir tabla: sobrescribe una tabla con el mismo nombre con los resultados de la consulta.

Puedes usar la siguiente consulta para añadir registros de una tabla a otra:

  INSERT INTO <projectID>.<datasetID>.<table1> (
    <column2>,
    <column3>) (SELECT * FROM <projectID>.<datasetID>.<table2>)

Para obtener más información sobre cómo usar los resultados de las consultas para añadir o sobrescribir datos, consulta el artículo Escribir resultados de consultas.

Consultar datos de tablas

Puedes consultar o leer los datos de una tabla de las siguientes formas:

  • Usar la Google Cloud consola
  • Usar el comando bq head de la herramienta de línea de comandos bq
  • Llamar al método de API tabledata.list
  • Usar las bibliotecas de cliente

Permisos obligatorios

Para leer los datos de una tabla y una partición, necesitas el permiso de gestión de identidades y accesos (IAM) bigquery.tables.getData.

Cada uno de los siguientes roles de gestión de identidades y accesos predefinidos incluye los permisos que necesitas para consultar datos de tablas y particiones:

  • roles/bigquery.dataViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Si tienes el permiso bigquery.datasets.create, puedes consultar los datos de las tablas y particiones de los conjuntos de datos que crees.

Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta el artículo sobre funciones y permisos predefinidos.

Consultar datos de tablas

Para consultar los datos de una tabla, sigue estos pasos:

Consola

  1. En la Google Cloud consola, abre la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.

  3. Haga clic en una tabla de la lista.

  4. Haga clic en Detalles y anote el valor de Número de filas. Puede que necesites este valor para controlar el punto de partida de los resultados con la herramienta de línea de comandos bq o la API.

  5. Haz clic en Vista previa. Se muestra un conjunto de datos de muestra.

    Vista previa de la tabla

Línea de comandos

Ejecuta el comando bq head con la marca --max_rows para mostrar todas las columnas de un número determinado de filas de la tabla. Si no se especifica --max_rows, el valor predeterminado es 100.

Para consultar un subconjunto de columnas de la tabla (incluidas las columnas anidadas y repetidas), utilice la marca --selected_fields e introduzca las columnas como una lista separada por comas.

Para especificar el número de filas que se deben omitir antes de mostrar los datos de la tabla, usa la marca --start_row=integer (o el acceso directo -s). El valor predeterminado es 0. Para obtener el número de filas de una tabla, usa el comando bq show para consultar información de la tabla.

Si la tabla que estás consultando está en un proyecto que no es el predeterminado, añade el ID del proyecto al comando con el siguiente formato: project_id:dataset.table.

bq head \
--max_rows integer1 \
--start_row integer2 \
--selected_fields "columns" \
project_id:dataset.table

Donde:

  • integer1 es el número de filas que se van a mostrar.
  • integer2 es el número de filas que se deben omitir antes de mostrar los datos.
  • columns es una lista de columnas separadas por comas.
  • project_id es el ID del proyecto.
  • dataset es el nombre del conjunto de datos que contiene la tabla.
  • table es el nombre de la tabla que se va a examinar.

Ejemplos:

Introduce el siguiente comando para enumerar todas las columnas de las 10 primeras filas de mydataset.mytable. mydataset está en tu proyecto predeterminado.

bq head --max_rows=10 mydataset.mytable

Introduce el siguiente comando para enumerar todas las columnas de las primeras 100 filas de mydataset.mytable. mydataset está en myotherproject, no en tu proyecto predeterminado.

bq head myotherproject:mydataset.mytable

Introduce el siguiente comando para mostrar solo field1 y field2 en mydataset.mytable. El comando usa la marca --start_row para ir a la fila 100. mydataset.mytable está en tu proyecto predeterminado.

bq head --start_row 100 --selected_fields "field1,field2" mydataset.mytable

Como el comando bq head no crea un trabajo de consulta, los comandos bq head no aparecen en tu historial de consultas y no se te cobra por ellos.

API

Desplázate por los datos de una tabla llamando a tabledata.list. Especifica el nombre de la tabla en el parámetro tableId.

Configura estos parámetros opcionales para controlar la salida:

  • maxResults: número máximo de resultados que se devolverán.
  • selectedFields: lista separada por comas de las columnas que se van a devolver. Si no se especifica, se devuelven todas las columnas.
  • startIndex: índice basado en cero de la fila inicial que se va a leer.

Los valores se devuelven envueltos en un objeto JSON que debes analizar, tal como se describe en la tabledata.list documentación de referencia.

C#

Antes de probar este ejemplo, sigue las C#instrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API C# de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.


using Google.Api.Gax;
using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;
using System.Linq;

public class BigQueryBrowseTable
{
    public void BrowseTable(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        TableReference tableReference = new TableReference()
        {
            TableId = "shakespeare",
            DatasetId = "samples",
            ProjectId = "bigquery-public-data"
        };
        // Load all rows from a table
        PagedEnumerable<TableDataList, BigQueryRow> result = client.ListRows(
            tableReference: tableReference,
            schema: null
        );
        // Print the first 10 rows
        foreach (BigQueryRow row in result.Take(10))
        {
            Console.WriteLine($"{row["corpus"]}: {row["word_count"]}");
        }
    }
}

Go

Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

Las bibliotecas de cliente de Cloud para Go paginan automáticamente de forma predeterminada, por lo que no es necesario que implementes la paginación por tu cuenta. Por ejemplo:

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// browseTable demonstrates reading data from a BigQuery table directly without the use of a query.
// For large tables, we also recommend the BigQuery Storage API.
func browseTable(w io.Writer, projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	table := client.Dataset(datasetID).Table(tableID)
	it := table.Read(ctx)
	for {
		var row []bigquery.Value
		err := it.Next(&row)
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintln(w, row)
	}
	return nil
}

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.TableDataListOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableResult;

// Sample to directly browse a table with optional paging
public class BrowseTable {

  public static void runBrowseTable() {
    // TODO(developer): Replace these variables before running the sample.
    String table = "MY_TABLE_NAME";
    String dataset = "MY_DATASET_NAME";
    browseTable(dataset, table);
  }

  public static void browseTable(String dataset, String table) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Identify the table itself
      TableId tableId = TableId.of(dataset, table);

      // Page over 100 records. If you don't need pagination, remove the pageSize parameter.
      TableResult result = bigquery.listTableData(tableId, TableDataListOption.pageSize(100));

      // Print the records
      result
          .iterateAll()
          .forEach(
              row -> {
                row.forEach(fieldValue -> System.out.print(fieldValue.toString() + ", "));
                System.out.println();
              });

      System.out.println("Query ran successfully");
    } catch (BigQueryException e) {
      System.out.println("Query failed to run \n" + e.toString());
    }
  }
}

Node.js

Antes de probar este ejemplo, sigue las Node.jsinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

Las bibliotecas de cliente de Cloud para Node.js paginan automáticamente de forma predeterminada, por lo que no es necesario que implementes la paginación por tu cuenta. Por ejemplo:


// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function browseRows() {
  // Displays rows from "my_table" in "my_dataset".

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

  // List rows in the table
  const [rows] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .getRows();

  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

PHP

Antes de probar este ejemplo, sigue las PHPinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API PHP de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

La paginación se realiza automáticamente en las bibliotecas de cliente de Cloud para PHP mediante la función de generador rows, que obtiene la página siguiente de resultados durante la iteración.

use Google\Cloud\BigQuery\BigQueryClient;

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

$maxResults = 10;
$startIndex = 0;

$options = [
    'maxResults' => $maxResults,
    'startIndex' => $startIndex
];
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$numRows = 0;
foreach ($table->rows($options) as $row) {
    print('---');
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, $value);
    }
    $numRows++;
}

Python

Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to browse data rows.
# table_id = "your-project.your_dataset.your_table_name"

# Download all rows from a table.
rows_iter = client.list_rows(table_id)  # Make an API request.

# Iterate over rows to make the API requests to fetch row data.
rows = list(rows_iter)
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Download at most 10 rows.
rows_iter = client.list_rows(table_id, max_results=10)
rows = list(rows_iter)
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Specify selected fields to limit the results to certain columns.
table = client.get_table(table_id)  # Make an API request.
fields = table.schema[:2]  # First two columns.
rows_iter = client.list_rows(table_id, selected_fields=fields, max_results=10)
rows = list(rows_iter)
print("Selected {} columns from table {}.".format(len(rows_iter.schema), table_id))
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Print row data in tabular format.
rows = client.list_rows(table, max_results=10)
format_string = "{!s:<16} " * len(rows.schema)
field_names = [field.name for field in rows.schema]
print(format_string.format(*field_names))  # Prints column headers.
for row in rows:
    print(format_string.format(*row))  # Prints row data.

Ruby

Antes de probar este ejemplo, sigue las Rubyinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Ruby de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

La paginación se realiza automáticamente en las bibliotecas de cliente de Cloud para Ruby mediante Table#data y Data#next.

require "google/cloud/bigquery"

def browse_table
  bigquery = Google::Cloud::Bigquery.new project_id: "bigquery-public-data"
  dataset  = bigquery.dataset "samples"
  table    = dataset.table "shakespeare"

  # Load all rows from a table
  rows = table.data

  # Load the first 10 rows
  rows = table.data max: 10

  # Print row data
  rows.each { |row| puts row }
end

Consultar datos de tablas

Puedes consultar datos de BigQuery con uno de los siguientes tipos de trabajo de consulta:

  • Trabajos de consulta interactiva. De forma predeterminada, BigQuery ejecuta las consultas como tareas de consulta interactivas, que están diseñadas para empezar a ejecutarse lo antes posible.

  • Consultas por lotes. Las consultas por lotes tienen una prioridad inferior a las consultas interactivas. Cuando un proyecto o una reserva utiliza todos los recursos de computación disponibles, es más probable que las consultas por lotes se pongan en cola y permanezcan en ella. Una vez que se inicia una consulta por lotes, se ejecuta igual que una consulta interactiva. Para obtener más información, consulta el artículo sobre colas de consultas.

  • Trabajos de consulta continua. Con estas tareas, la consulta se ejecuta de forma continua, lo que te permite analizar los datos entrantes en BigQuery en tiempo real y, a continuación, escribir los resultados en una tabla de BigQuery o exportarlos a Bigtable o Pub/Sub. Puedes usar esta función para llevar a cabo tareas urgentes, como crear estadísticas y actuar en consecuencia de inmediato, aplicar inferencias de aprendizaje automático (ML) en tiempo real y crear flujos de datos basados en eventos.

Puedes ejecutar trabajos de consulta con los siguientes métodos:

Para obtener más información sobre cómo consultar tablas de BigQuery, consulta la introducción a la consulta de datos de BigQuery.

Además de consultar datos almacenados en tablas de BigQuery, puedes consultar datos almacenados externamente. Para obtener más información, consulta el artículo Introducción a las fuentes de datos externas.

Modificar datos de tablas

Puedes modificar los datos de una tabla mediante instrucciones del lenguaje de manipulación de datos (DML) en SQL. Las instrucciones DML te permiten actualizar, combinar, insertar y eliminar filas en tablas. Para consultar la referencia de sintaxis y ejemplos de cada tipo de instrucción DML, consulta Instrucciones del lenguaje de manipulación de datos en GoogleSQL.

El dialecto de SQL antiguo no admite instrucciones DML. Para actualizar o eliminar datos con SQL antiguo, debe eliminar la tabla y volver a crearla con datos nuevos. También puedes escribir una consulta que modifique los datos y escriba los resultados de la consulta en una tabla de destino nueva.

Copiar datos de una tabla

Puedes copiar una tabla de las siguientes formas:

  • Usar la Google Cloud consola
  • Usar el comando bq cp de la herramienta de línea de comandos bq
  • Llamar al método de API jobs.insert y configurar una tarea de copia
  • Usar las bibliotecas de cliente

Para obtener más información sobre cómo copiar tablas, consulta Copiar una tabla.

Exportar datos de tablas

Puede exportar datos de tablas a un segmento de Cloud Storage en formato CSV, JSON, Avro o Parquet (vista previa). No se admite la exportación a tu máquina local. Sin embargo, puedes descargar y guardar los resultados de las consultas con la consola Google Cloud .

Para obtener más información, consulta el artículo Exportar datos de una tabla.

Seguridad de las tablas

Para controlar el acceso a las tablas de BigQuery, consulta el artículo sobre cómo controlar el acceso a los recursos con la gestión de identidades y accesos.

Siguientes pasos