Gerir dados de tabelas

Este documento descreve como gerir os dados das tabelas no BigQuery. Pode trabalhar com dados de tabelas do BigQuery das seguintes formas:

  • Carregue dados numa tabela
  • Anexe ou substitua dados de tabelas
  • Explorar (ou pré-visualizar) dados de tabelas
  • Consultar dados de tabelas
  • Modifique os dados das tabelas através da linguagem de manipulação de dados (DML)
  • Copie dados da tabela
  • Exporte dados de tabelas

Para obter informações sobre a gestão de esquemas de tabelas, consulte o artigo Modificar esquemas de tabelas.

Antes de começar

Atribua funções que concedam as autorizações necessárias aos utilizadores que precisam de realizar cada tarefa neste documento. As autorizações necessárias (se aplicável) para realizar uma tarefa são apresentadas na secção "Autorizações necessárias" da tarefa.

Carregar dados numa tabela

Pode carregar dados quando cria uma tabela ou pode criar uma tabela vazia e carregar os dados mais tarde. Quando carrega dados, pode usar a deteção automática de esquemas para formatos de dados suportados ou pode especificar o esquema.

Para mais informações sobre o carregamento de dados, consulte a documentação sobre o formato e a localização dos dados de origem:

Anexar e substituir dados de tabelas

Pode substituir os dados da tabela através de uma operação de carregamento ou consulta. Pode anexar dados adicionais a uma tabela existente executando uma operação de carregamento e anexação ou anexando os resultados da consulta à tabela.

Para mais informações sobre como anexar ou substituir uma tabela ao carregar dados, consulte a documentação do formato de dados de origem:

Para acrescentar ou substituir uma tabela com os resultados da consulta, especifique uma tabela de destino e defina a disposição de escrita como:

  • Anexar à tabela: anexa os resultados da consulta a uma tabela existente.
  • Substituir tabela: substitui uma tabela existente com o mesmo nome usando os resultados da consulta.

Pode usar a seguinte consulta para anexar registos de uma tabela a outra:

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

Para mais informações sobre a utilização dos resultados da consulta para acrescentar ou substituir dados, consulte o artigo Escrever resultados da consulta.

Explorar dados de tabelas

Pode procurar ou ler dados de tabelas das seguintes formas:

  • Usar a Trusted Cloud consola
  • Usar o comando bq head da ferramenta de linhas de comando bq
  • Chamar o método da API tabledata.list
  • Usar as bibliotecas de cliente

Autorizações necessárias

Para ler dados de tabelas e partições, precisa da autorização de bigquery.tables.getData Identity and Access Management (IAM).

Cada uma das seguintes funções de IAM predefinidas inclui as autorizações de que precisa para procurar dados de tabelas e partições:

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

Se tiver a autorização bigquery.datasets.create, pode procurar dados nas tabelas e nas partições dos conjuntos de dados que criar.

Para mais informações sobre as funções e as autorizações do IAM no BigQuery, consulte o artigo Funções e autorizações predefinidas.

Explorar dados de tabelas

Para procurar dados de tabelas:

Consola

  1. Na Trusted Cloud consola, abra a página do BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto e selecione um conjunto de dados.

  3. Clique numa tabela na lista.

  4. Clique em Detalhes e tome nota do valor em Número de linhas. Pode precisar deste valor para controlar o ponto de partida dos resultados através da ferramenta de linhas de comando bq ou da API.

  5. Clique em Pré-visualizar. É apresentado um conjunto de dados de exemplo.

    Pré-visualização da tabela

Linha de comandos

Emita o comando bq head com a flag --max_rows para listar todas as colunas num determinado número de linhas da tabela. Se --max_rows não for especificado, o valor predefinido é 100.

Para procurar um subconjunto de colunas na tabela (incluindo colunas aninhadas e repetidas), use a flag --selected_fields e introduza as colunas como uma lista separada por vírgulas.

Para especificar o número de linhas a ignorar antes de apresentar os dados da tabela, use a flag --start_row=integer (ou o atalho -s). O valor predefinido é 0. Pode obter o número de linhas numa tabela através do comando bq show para obter informações da tabela.

Se a tabela que está a explorar estiver num projeto diferente do projeto predefinido, adicione o ID do projeto ao comando no seguinte formato: project_id:dataset.table.

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

Onde:

  • integer1 é o número de linhas a apresentar.
  • integer2 é o número de linhas a ignorar antes de apresentar os dados.
  • columns é uma lista de colunas separadas por vírgulas.
  • project_id é o ID do seu projeto.
  • dataset é o nome do conjunto de dados que contém a tabela.
  • table é o nome da tabela a explorar.

Exemplos:

Introduza o seguinte comando para apresentar uma lista de todas as colunas nas primeiras 10 linhas em mydataset.mytable. mydataset está no seu projeto predefinido.

bq head --max_rows=10 mydataset.mytable

Introduza o seguinte comando para apresentar uma lista de todas as colunas nas primeiras 100 linhas em mydataset.mytable. mydataset está em myotherproject e não no seu projeto predefinido.

bq head myotherproject:mydataset.mytable

Introduza o seguinte comando para apresentar apenas field1 e field2 em mydataset.mytable. O comando usa a flag --start_row para avançar para a linha 100. mydataset.mytable está no seu projeto predefinido.

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

Uma vez que o comando bq head não cria uma tarefa de consulta, os comandos bq head não aparecem no seu histórico de consultas e não lhe são cobrados.

API

Procure os dados de uma tabela chamando tabledata.list. Especifique o nome da tabela no parâmetro tableId.

Configure estes parâmetros opcionais para controlar a saída:

  • maxResults: número máximo de resultados a devolver
  • selectedFields — Lista de colunas separadas por vírgulas a devolver; se não for especificado, são devolvidas todas as colunas
  • startIndex — Índice baseado em zero da linha inicial a ler

Os valores são devolvidos envolvidos num objeto JSON que tem de analisar, conforme descrito na documentação de referência tabledata.list.

C#

Antes de experimentar este exemplo, siga as C#instruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API C# BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.


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 experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

As bibliotecas cliente da nuvem para Go fazem a paginação automaticamente por predefinição, pelo que não precisa de implementar a paginação manualmente. Por exemplo:

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 experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

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 experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

As bibliotecas cliente da nuvem para Node.js fazem a paginação automaticamente por predefinição, pelo que não precisa de implementar a paginação manualmente. Por exemplo:


// 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 experimentar este exemplo, siga as PHPinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API PHP BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

A paginação ocorre automaticamente nas bibliotecas de cliente da nuvem para PHP através da função do gerador rows, que obtém a página seguinte de resultados durante a iteração.

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 experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.


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 experimentar este exemplo, siga as Rubyinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Ruby BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

A paginação ocorre automaticamente nas bibliotecas de cliente da nuvem para Ruby através de Table#data e 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 dados de tabelas

Pode consultar dados do BigQuery usando um dos seguintes tipos de tarefas de consulta:

  • Tarefas de consulta interativas. Por predefinição, o BigQuery executa consultas como tarefas de consulta interativas, que se destinam a começar a ser executadas o mais rapidamente possível.

  • Tarefas de consulta em lote. As consultas em lote têm uma prioridade inferior à das consultas interativas. Quando um projeto ou uma reserva usa todos os recursos de computação disponíveis, é mais provável que as consultas em lote sejam colocadas em fila e permaneçam na fila. Depois de uma consulta em lote começar a ser executada, esta é executada da mesma forma que uma consulta interativa. Para mais informações, consulte filas de consultas.

  • Tarefas de consulta contínuas. Com estes trabalhos, a consulta é executada continuamente, o que lhe permite analisar os dados recebidos no BigQuery em tempo real e, em seguida, escrever os resultados numa tabela do BigQuery ou exportá-los para o Bigtable ou o Pub/Sub. Pode usar esta capacidade para realizar tarefas sensíveis ao tempo, como criar e agir imediatamente com base em estatísticas, aplicar inferência de aprendizagem automática (AA) em tempo real e criar pipelines de dados orientados por eventos.

Pode executar tarefas de consulta através dos seguintes métodos:

Para mais informações sobre como consultar tabelas do BigQuery, consulte o artigo Introdução à consulta de dados do BigQuery.

Além de consultar dados armazenados em tabelas do BigQuery, pode consultar dados armazenados externamente. Para mais informações, consulte o artigo Introdução a origens de dados externas.

Modificar dados da tabela

Pode modificar dados numa tabela através de declarações de linguagem de manipulação de dados (DML) em SQL. As instruções DML permitem-lhe atualizar, unir, inserir e eliminar linhas em tabelas. Para ver exemplos e referências de sintaxe de cada tipo de declaração DML, consulte o artigo Declarações de linguagem de manipulação de dados no GoogleSQL.

O dialeto SQL antigo não suporta declarações DML. Para atualizar ou eliminar dados com o SQL antigo, tem de eliminar a tabela e, em seguida, recriá-la com novos dados. Em alternativa, pode escrever uma consulta que modifique os dados e escrever os resultados da consulta numa nova tabela de destino.

Copiar dados da tabela

Pode copiar uma tabela:

Para mais informações sobre como copiar tabelas, consulte o artigo Copiar uma tabela.

Exportar dados de tabelas

Pode exportar dados de tabelas para um contentor do Cloud Storage no formato CSV, JSON, Avro ou Parquet (pré-visualização). A exportação para o seu computador local não é suportada. No entanto, pode transferir e guardar os resultados da consulta através da Trusted Cloud consola.

Para mais informações, consulte o artigo Exportar dados de tabelas.

Segurança da mesa

Para controlar o acesso a tabelas no BigQuery, consulte o artigo Controle o acesso a recursos com a IAM.

O que se segue?