Crea vistas

En este documento, se describe cómo crear vistas en BigQuery.

Puedes crear una vista en BigQuery de las siguientes maneras:

  • Usa Cloud Console.
  • Usa el comando bq de la herramienta de línea de comandos bq mk
  • Mediante una llamada al método de la API tables.insert
  • Usa bibliotecas cliente.
  • Enviar una instrucción CREATE VIEW en el lenguaje de definición de datos (DDL)

Nombres de las vistas

Cuando creas una vista en BigQuery, el nombre de la vista debe ser único por conjunto de datos. El nombre de la vista puede contener lo siguiente:

  • Hasta 1,024 caracteres
  • Letras (mayúsculas o minúsculas), números y guiones bajos

Limitaciones de las vistas

Las vistas de BigQuery están sujetas a las siguientes limitaciones:

  • Las vistas son de solo lectura. No puedes ejecutar consultas DML (insertar, actualizar, borrar) en una vista.
  • El conjunto de datos que contiene la vista y el conjunto de datos que contiene las tablas a las que hace referencia la vista deben estar en la misma ubicación.
  • No puedes ejecutar un trabajo de BigQuery que exporte datos desde una vista.
  • No puedes usar el método TableDataList de la API de JSON para recuperar datos desde una vista. Para obtener más información, consulta Tabledata: list.
  • No puedes mezclar consultas de SQL estándar y SQL heredado cuando se usan las vistas. Una consulta de SQL estándar no puede hacer referencia a una vista definida mediante la sintaxis de SQL heredado.
  • No puedes hacer referencia a parámetros de consulta en vistas.
  • Los esquemas de las tablas subyacentes se almacenan con la vista cuando esta se crea. Si se agregan columnas, se borran o se realizan otras modificaciones del estilo después de crear la vista, el esquema informado será inexacto hasta que se actualice la vista. A pesar de que el esquema informado puede ser inexacto, todas las consultas enviadas producen resultados precisos.
  • No puedes actualizar de forma automática una vista de SQL heredado en la sintaxis de SQL estándar. Si deseas modificar la consulta que se usa para definir una vista, usa la opción Editar consulta en Cloud Console, usa el comando bq update --view en la herramienta de línea de comandos bq, usa las bibliotecas cliente o usa los métodos de la API actualización o parche.
  • No puedes incluir una función temporal definida por el usuario ni una tabla temporal en la consulta de SQL que define una vista.
  • No puedes hacer referencia a una vista en una consulta de tabla comodín.

Para obtener más información sobre las cuotas y los límites que se aplican a las vistas, consulta la página sobre límites de vistas.

Permisos necesarios

Las vistas se tratan como recursos de tabla en BigQuery, por lo que la creación de una vista requiere los mismos permisos que la creación de una tabla. Como mínimo, para crear una vista, debes tener permisos bigquery.tables.create. En las siguientes funciones predefinidas de IAM, se incluyen los permisos bigquery.tables.create:

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

Además, si un usuario tiene permisos bigquery.datasets.create, se le otorga el acceso bigquery.dataOwner cuando crea un conjunto de datos. El acceso bigquery.dataOwner le da al usuario la capacidad de crear vistas en el conjunto de datos.

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

Crea una vista

Puedes crear una vista; para ello, redacta una consulta de SQL que se use con el fin de definir los datos a los que puede acceder la vista.

Para crear una vista, haz lo siguiente:

Console

  1. Después de ejecutar una consulta, haz clic en el botón Save view (Guardar vista) ubicado por encima de la ventana de resultados de la consulta para guardarla como vista.

    Guarda una vista

  2. En el cuadro de diálogo Save view (Guardar vista), haz lo siguiente:

    • En Nombre del proyecto, selecciona el proyecto que almacenará la vista.
    • En Nombre del conjunto de datos, elige el conjunto de datos que contendrá la vista. El conjunto de datos que contiene la vista y el conjunto de datos que contiene las tablas a las que hace referencia la vista deben estar en la misma ubicación.
    • En Nombre de la tabla, ingresa el nombre de la vista.
    • Haz clic en Guardar.

bq

Usa el comando bq mk con la marca --view. Para las consultas de SQL estándar, agrega la marca --use_legacy_sql y establécela en false. Los parámetros opcionales incluyen --expiration, --description y --label.

Si tu consulta hace referencia a recursos de funciones externas definidas por el usuario (UDF) almacenadas en Cloud Storage o en archivos locales, usa la marca --view_udf_resource para especificar esos recursos. La marca --view_udf_resource no se muestra aquí. Para obtener más información sobre el uso de UDF, consulta UDF y la herramienta de línea de comandos de bq.

Si creas una vista en un proyecto que no es tu proyecto predeterminado, especifica el ID del proyecto con la marca --project_id.

bq mk \
--use_legacy_sql=false \
--view_udf_resource=PATH_TO_FILE \
--expiration INTEGER \
--description "DESCRIPTION" \
--label KEY:VALUE \
--view 'QUERY' \
--project_id PROJECT_ID \
DATASET.VIEW

Reemplaza lo siguiente:

  • PATH_TO_FILE es la ruta de URI o del sistema de archivos local a un archivo de código que se cargará y evaluará de inmediato como un recurso de UDF que usa la vista. Repite la marca para especificar varios archivos.
  • INTEGER establece la duración (en segundos) de la vista. Si INTEGER es 0, la vista no expira. Si no incluyes la marca --expiration, BigQuery crea la vista con la vida útil de la tabla predeterminada del conjunto de datos.
  • DESCRIPTION es una descripción de la vista entre comillas.
  • KEY:VALUE es el par clave-valor que representa una etiqueta. Repite la marca --label para especificar varias etiquetas.
  • QUERY es una consulta válida.
  • PROJECT_ID es el ID del proyecto (si no tienes un proyecto predeterminado configurado).
  • DATASET es un conjunto de datos en tu proyecto.
  • VIEW es el nombre de la vista que deseas crear.

Ejemplos:

Ingresa el siguiente comando para crear una vista llamada myview en mydataset en tu proyecto predeterminado. El vencimiento se establece en 3,600 segundos (1 hora), la descripción se establece en This is my view y la etiqueta se establece en organization:development. La consulta usada para crear los datos de las consultas de vistas desde el conjunto de datos públicos Datos de nombres de EE.UU.

bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--description "This is my view" \
--label organization:development \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
mydataset.myview

Ingresa el siguiente comando para crear una vista llamada myview en mydataset en myotherproject. La descripción se configura como This is my view, la etiqueta se configura como organization:development y el vencimiento de la vista se establece en el vencimiento predeterminado de la tabla del conjunto de datos. La consulta usada para crear los datos de las consultas de vistas desde el conjunto de datos públicos Datos de nombres de EE.UU.

bq mk \
--use_legacy_sql=false \
--description "This is my view" \
--label organization:development \
--project_id myotherproject \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
mydataset.myview

Después de crear la vista, puedes actualizar su hora de vencimiento, descripción y etiquetas. Para obtener más información, consulta Actualiza vistas.

API

Llama al método tables.insert con un recurso de tabla que contenga una propiedad view.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Si deseas obtener más información, consulta la documentación de referencia de la API de Go de BigQuery.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// createView demonstrates creation of a BigQuery logical view.
func createView(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydatasetid"
	// tableID := "mytableid"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	meta := &bigquery.TableMetadata{
		// This example shows how to create a view of the shakespeare sample dataset, which
		// provides word frequency information.  This view restricts the results to only contain
		// results for works that contain the "king" in the title, e.g. King Lear, King Henry V, etc.
		ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus LIKE '%king%'",
	}
	if err := client.Dataset(datasetID).Table(tableID).Create(ctx, meta); err != nil {
		return err
	}
	return nil
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran 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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.ViewDefinition;

// Sample to create a view
public class CreateView {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String query =
        String.format(
            "SELECT TimestampField, StringField, BooleanField FROM %s.%s", datasetName, tableName);
    createView(datasetName, viewName, query);
  }

  public static void createView(String datasetName, String viewName, String query) {
    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();

      TableId tableId = TableId.of(datasetName, viewName);

      ViewDefinition viewDefinition =
          ViewDefinition.newBuilder(query).setUseLegacySql(false).build();

      bigquery.create(TableInfo.of(tableId, viewDefinition));
      System.out.println("View created successfully");
    } catch (BigQueryException e) {
      System.out.println("View was not created. \n" + e.toString());
    }
  }
}

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js que se encuentran 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 Node.js de BigQuery.

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

async function createView() {
  // Creates a new view named "my_shared_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const myDatasetId = "my_table"
  // const myTableId = "my_table"
  // const projectId = "bigquery-public-data";
  // const sourceDatasetId = "usa_names"
  // const sourceTableId = "usa_1910_current";
  const myDataset = await bigquery.dataset(myDatasetId);

  // For all options, see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource
  const options = {
    view: `SELECT name
    FROM \`${projectId}.${sourceDatasetId}.${sourceTableId}\`
    LIMIT 10`,
  };

  // Create a new view in the dataset
  const [view] = await myDataset.createTable(myTableId, options);

  console.log(`View ${view.id} created.`);
}

Python

Antes de probar esta muestra, 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. Si deseas obtener más información, consulta la documentación de referencia de la API de Python de BigQuery.

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
source_id = "my-project.my_dataset.my_table"
view = bigquery.Table(view_id)

# The source table in this example is created from a CSV file in Google
# Cloud Storage located at
# `gs://cloud-samples-data/bigquery/us-states/us-states.csv`. It contains
# 50 US states, while the view returns only those states with names
# starting with the letter 'W'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'W%'"

# Make an API request to create the view.
view = client.create_table(view)
print(f"Created {view.table_type}: {str(view.reference)}")

Después de crear la vista, puedes consultarla como consultas una tabla.

Próximos pasos