Crea vistas

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

Puedes crear una vista en BigQuery de las siguientes maneras:

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

Limitaciones de las vistas

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

  • Las vistas son de solo lectura. Por ejemplo, no puedes ejecutar consultas que inserten, actualicen o borren datos.
  • 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.
  • Una referencia dentro de una vista se debe calificar con un conjunto de datos. El conjunto de datos predeterminado no afecta el cuerpo de 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 y GoogleSQL heredado cuando se usan vistas. Una consulta de GoogleSQL 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, borran o cambian columnas después de crear la vista, esta no se actualizará de forma automática y el esquema informado seguirá siendo inexacto hasta que se cambie la definición de SQL de la vista o se vuelva a crear 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 GoogleSQL. Para cambiar la consulta usada para definir una vista, puedes usar lo siguiente:
  • 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.

Antes de comenzar

Otorga roles de Identity and Access Management (IAM) que les brindan a los usuarios los permisos necesarios para hacer cada tarea de este documento.

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. También debes tener permisos para consultar las tablas a las que hace referencia la consulta en SQL de la vista.

Para crear una vista, necesitas el permiso bigquery.tables.create de IAM. El rol predefinido de IAM roles/bigquery.dataEditor incluye los permisos que necesitas para crear una configuración.

Además, si tienes el permiso bigquery.datasets.create, puedes crear vistas en los conjuntos de datos que crees. Si deseas crear una vista para datos que no son de tu propiedad, debes tener el permiso bigquery.tables.getData para esa tabla.

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

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:

  • Contiene caracteres con un total de hasta 1,024 bytes UTF-8.
  • Caracteres Unicode en la categoría L (letra), M (marca), N (número), Pc (conector, incluido el guion bajo), Pd (raya) y Zs (espacio) Para obtener más información, consulta la Categoría general.

Los siguientes son ejemplos de nombres de vistas válidos: view 01, ग्राहक, 00_お客様 y étudiant-01.

Advertencias:

  • Los nombres de tablas distinguen entre mayúsculas y minúsculas de forma predeterminada. mytable y MyTable pueden coexistir en el mismo conjunto de datos, a menos que sean parte de un conjunto de datos con la distinción entre mayúsculas y minúsculas desactivada.
  • Algunos nombres de vista y prefijos de nombres de vistas están reservados. Si recibes un error que indica que el nombre o prefijo de la vista está reservado, elige un nombre diferente y vuelve a intentarlo.
  • Si incluyes varios operadores de punto (.) en una secuencia, los operadores duplicados se quitan de forma implícita.

    Por ejemplo, esto: project_name....dataset_name..table_name

    Se convierte en esto: project_name.dataset_name.table_name

Crear 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. La consulta de SQL debe constar de una instrucción SELECT. Otros tipos de declaraciones (como las declaraciones DML) y las consultas de varias declaraciones no están permitidas en las consultas de 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 Guardar vista, haz lo siguiente:

    • En Nombre del proyecto, elige un proyecto para almacenar la vista.
    • En Nombre del conjunto de datos, elige un conjunto de datos para almacenar 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.

SQL

Usa la sentencia CREATE VIEW. En el siguiente ejemplo, se crea una vista llamada usa_male_names a partir del conjunto de datos públicos de nombres de EE.UU.

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

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente sentencia:

    CREATE VIEW mydataset.usa_male_names(name, number) AS (
      SELECT
        name,
        number
      FROM
        bigquery-public-data.usa_names.usa_1910_current
      WHERE
        gender = 'M'
      ORDER BY
        number DESC
    );

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

bq

Usa el comando bq mk con la marca --view. Para las consultas de GoogleSQL, agrega la marca --use_legacy_sql y establécela en false. Algunos parámetros opcionales incluyen --add_tags, --expiration, --description y --label Para obtener una lista completa de los parámetros, consulta la referencia del comando bq mk.

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 las UDF, consulta UDF.

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_1:VALUE_1 \
--add_tags=KEY_2:VALUE_2[,...] \
--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 vence. Si no incluyes la marca --expiration, BigQuery crea la vista con la vida útil predeterminada de la tabla del conjunto de datos.
  • DESCRIPTION es una descripción de la vista entre comillas.
  • KEY_1:VALUE_1 es el par clave-valor que representa una etiqueta. Repite la marca --label para especificar varias etiquetas.
  • KEY_2:VALUE_2 es el par clave-valor que representa una etiqueta. Agrega varias etiquetas bajo la misma marca con comas entre pares clave-valor.
  • 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.

Terraform

Usa el recurso google_bigquery_table.

.

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.

En el siguiente ejemplo, se crea una vista llamada myview:

resource "google_bigquery_dataset" "default" {
  dataset_id                      = "mydataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  labels = {
    billing_group = "accounting",
    pii           = "sensitive"
  }
}

resource "google_bigquery_table" "default" {
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "myview"
  deletion_protection = false # set to "true" in production

  view {
    query          = "SELECT global_id, faa_identifier, name, latitude, longitude FROM `bigquery-public-data.faa.us_airports`"
    use_legacy_sql = false
  }

}

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

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 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.

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 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.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 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.

// 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 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

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 de la misma manera que consultas una tabla.

Ver la seguridad

Para controlar el acceso a las vistas en BigQuery, consulta Vistas autorizadas.

¿Qué sigue?