Administra datos de tablas

En este documento, se describe cómo administrar datos de tablas en BigQuery. Puedes trabajar con datos de tablas de BigQuery de las siguientes maneras:

  • Carga datos en una tabla
  • Adjuntar datos de tablas o reemplazarlos
  • Explorar datos de tablas (o bien, obtener una vista previa)
  • Consultar datos de tablas
  • Modificar datos de tablas con el uso del lenguaje de manipulación de datos (DML)
  • Copiar datos de tablas
  • Exportar datos de tablas

Si deseas obtener más información sobre cómo administrar esquemas de tablas, consulta Modifica esquemas de tablas.

Antes de comenzar

Otorga funciones que otorguen los permisos necesarios a los usuarios que necesitan realizar cada tarea en este documento. Los permisos necesarios (si hubiera) para realizar una tarea se enumeran en la sección “Permisos necesarios” de la tarea.

Cargar datos en una tabla

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

A fin de obtener más información sobre la carga de datos, consulta la documentación para el formato y la ubicación de tus datos de origen:

Adjunta y reemplaza datos de tablas

Puedes reemplazar los datos de las tablas mediante una operación de carga o consulta. Puedes agregar datos adicionales a una tabla existente; para ello, realiza una operación de adición de carga o agrega los resultados de la consulta a la tabla.

Si deseas obtener más información sobre cómo agregar o reemplazar una tabla cuando se cargan datos, consulta la documentación para el formato de datos de origen:

Para agregar o reemplazar una tabla mediante los resultados de la consulta, especifica una tabla de destino y configura la disposición de escritura en:

  • Agregar a la tabla: Agrega los resultados de la consulta a una tabla existente.
  • Reemplazar la tabla: reemplaza una tabla existente con el mismo nombre mediante los resultados de la consulta.

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

  INSERT INTO .. (
    ,
    ) (SELECT * FROM ..)

Si deseas obtener más información sobre cómo usar los resultados de la consulta para anexar o reemplazar datos, consulta Escribe resultados de consultas.

Explora datos de la tabla

Puedes explorar los datos de tablas de las siguientes maneras:

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

Permisos necesarios

Para explorar datos de tablas y particiones, necesitas el permiso de administración de identidades y accesos (IAM) bigquery.tables.getData.

Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para explorar los datos de la tabla y la partición:

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

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

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

Explora datos de la tabla

Para explorar datos de tablas:

Console

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

    Ir a BigQuery

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

  3. Haz clic en una tabla de la lista.

  4. Haz clic en Detalles y anota el valor de Número de filas. Es posible que necesites este valor para controlar el punto de partida de tus resultados mediante la herramienta de línea de comandos de bq o la API.

  5. Haz clic en Vista previa. Verás un conjunto de datos de muestra.

    Vista previa de la tabla

Línea de comandos

Emite el comando bq head con la marca --max_rows para enumerar todas las columnas en una cantidad determinada de filas de la tabla. Si no se especifica --max_rows, el valor predeterminado es 100.

Para explorar un subconjunto de columnas en la tabla (incluidas las columnas anidadas y repetidas), usa la marca --selected_fields y, luego, ingresa las columnas como una lista separada por comas.

Para especificar la cantidad de filas que se deben omitir antes de mostrar los datos de la tabla, usa la marca --start_row=integer (o la combinación de teclas -s). El valor predeterminado es 0. Puedes recuperar la cantidad de filas de una tabla si usas el comando bq show para recuperar la información de la tabla.

Si la tabla que exploras está en un proyecto que no es el predeterminado, debes agregar el ID del proyecto al comando con el formato siguiente: project_id:dataset.table.

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

En el ejemplo anterior, se ilustra lo siguiente:

  • integer1 es el número de filas para 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 explorará.

Ejemplos:

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

bq head --max_rows=10 mydataset.mytable

Ingresa el siguiente comando para enumerar todas las columnas de las primeras 100 filas de mydataset.mytable. mydataset se encuentra en myotherproject, no en el proyecto predeterminado.

bq head myotherproject:mydataset.mytable

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

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

Debido a que 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

Explora los datos de una tabla mediante una llamada a tabledata.list. Especifica el nombre de la tabla en el parámetro tableId.

Configura estos parámetros opcionales para controlar la salida:

  • maxResults: cantidad máxima de resultados que se mostrarán
  • selectedFields: lista de columnas separadas por comas que se mostrará; si no se especifica, se mostrarán todas las columnas
  • startIndex: índice basado en cero de la primera fila que debe leerse

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

C#

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

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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 instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

Las bibliotecas cliente de Google Cloud para Go se paginan automáticamente de forma predeterminada, por lo que no necesitas implementarla. 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 instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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 instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

La biblioteca cliente de Google Cloud para Node.js se pagina de forma automática según la configuración predeterminada, por lo que no necesitas implementarla 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 instrucciones de configuración para PHP incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para PHP.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

La paginación se realiza de forma automática en las Bibliotecas cliente de Cloud para PHP mediante la función de generador rows, que recupera la siguiente página 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 instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas 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 instrucciones de configuración para Ruby incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Ruby.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

La paginación se realiza de forma automática en las Bibliotecas 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

Consulta datos de tablas

Después de cargar tus datos en BigQuery, puedes consultar los datos mediante uno de los siguientes tipos de trabajos de consultas:

  • Trabajos de consultas interactivas. De manera predeterminada, BigQuery ejecuta trabajos de consultas interactivas (a pedido) lo antes posible.
  • Trabajos de consultas Batch. Con estos trabajos, BigQuery pone en cola cada consulta por lotes en tu nombre y, luego, inicia la consulta cuando los recursos inactivos están disponibles, por lo general, en el plazo de unos minutos.

Puedes ejecutar trabajos de consultas interactivas o por lotes con los siguientes métodos:

Si deseas obtener más información sobre cómo consultar las tablas de BigQuery, revisa Descripción general de consultas de datos de BigQuery.

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

Modifica los datos de tablas

Puedes modificar los datos de una tabla mediante declaraciones de lenguaje de manipulación de datos (DML) en SQL. Las declaraciones DML te permiten actualizar, combinar, insertar y borrar filas en tablas. Para obtener una referencia de la sintaxis y ejemplos de cada tipo de declaración DML, consulta Declaraciones de lenguaje de manipulación de datos en GoogleSQL.

El dialecto SQL heredado no admite Declaraciones DML. Para actualizar o borrar datos con SQL heredado, debes borrar la tabla y, a continuación, volver a crearla con datos nuevos. También puedes escribir una consulta que modifique los datos y escribir los resultados de la consulta en una tabla de destino nueva.

Cómo copiar los datos de tablas

Puedes copiar una tabla de las maneras siguientes:

  • Usa la consola de Google Cloud
  • Usar el comando bq cp de la herramienta de línea de comandos de bq
  • Mediante llamadas al método de API jobs.insert y la configuración de un trabajo de copia
  • Con las bibliotecas cliente

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

Exporta datos de tablas

Puedes exportar datos de tablas a un bucket 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 mediante la consola de Google Cloud.

Para obtener más información, consulta Exporta datos de tabla.

Seguridad de las tablas

Para controlar el acceso a las tablas en BigQuery, consulta Introducción a los controles de acceso a tablas.

¿Qué sigue?