Cómo crear vistas

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

Para crear una vista en BigQuery, puedes:

  • Utilizar GCP Console o la IU web de BigQuery clásica
  • Utilizar el comando bq mk de la herramienta de línea de comandos
  • Llamar al método de la API tables.insert
  • Enviar una declaración de lenguaje de definición de datos (DDL) CREATE VIEW

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 hasta 1,024 caracteres
  • Contener 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:

  • 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 utilizar el método de API JSON TableDataList para recuperar datos desde una vista. Si deseas obtener más información, consulta Tabledata: list.
  • No puedes mezclar consultas de SQL estándar y SQL heredado cuando se utilizan las vistas. Una consulta de SQL estándar no puede hacer referencia a una vista definida mediante la sintaxis de SQL heredado.
  • Los esquemas de las tablas subyacentes se almacenan con la vista cuando se crea la vista. 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 automáticamente una vista de SQL heredado a la sintaxis de SQL estándar. A fin de modificar la consulta que se utiliza para definir una vista, utiliza la opción Editar consulta en la consola o la IU web de BigQuery clásica, utiliza el comando de la CLI bq update --view o haz uso de los métodos de API de actualización o parche.
  • No puedes incluir una función definida por el usuario en la consulta de SQL que define una vista.
  • No puedes hacer referencia a una vista en una consulta de tabla comodín.
  • BigQuery admite un máximo de 16 niveles de vistas anidadas. Si hay más de 16 niveles, se mostrará un error de INVALID_INPUT.
  • Puedes agregar hasta 2,500 vistas autorizadas a la lista de control de acceso de un conjunto de datos.

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. A fin de crear una vista, debes tener acceso de WRITER a nivel del conjunto de datos o tener asignada una función de IAM a nivel del proyecto que incluya permisos bigquery.tables.create. Las siguientes funciones de IAM predefinidas a nivel del proyecto incluyen permisos bigquery.tables.create:

Además, debido a que la función bigquery.user tiene permisos bigquery.datasets.create, un usuario asignado a la función bigquery.user puede crear vistas en cualquier conjunto de datos que cree el usuario. Cuando un usuario asignado a la función bigquery.user crea un conjunto de datos, se le otorga acceso de OWNER al conjunto de datos. El acceso de OWNER a un conjunto de datos brinda al usuario un control total sobre este y todas las tablas y vistas que contenga.

Si deseas obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Control de acceso. A fin de obtener más información sobre las funciones a nivel del conjunto de datos, consulta Funciones básicas para conjuntos de datos.

Cómo crear una vista

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

En la consulta de SQL estándar utilizada para crear una vista, debes incluir el ID del proyecto en la tabla y las referencias de vistas en la forma `[PROJECT_ID].[DATASET].[TABLE]`. Las consultas de SQL estándar requieren ID del proyecto explícitos a fin de evitar la ambigüedad cuando se consultan las vistas desde proyectos diferentes.

Para crear una vista, haz lo siguiente:

IU clásica

  1. Después de ejecutar una consulta, haz clic en el botón Save View (Guardar vista) en la ventana de resultados de la consulta para guardar la consulta como una vista.

    Guardar como vista

  2. En el cuadro de diálogo Save View (Guardar vista):

    • Para Project (Proyecto), selecciona el proyecto que almacenará la vista.
    • Para Dataset (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.
    • Para el Table ID (ID de tabla), ingresa el nombre de la vista.

      Cuadro de diálogo Guardar vista

    • Haz clic en Aceptar.

Línea de comandos

Usa el comando 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 la consulta hace referencia a recursos externos de funciones definidas por el usuario almacenados en Google Cloud Storage o en archivos locales, utiliza la marca --view_udf_resource a fin de especificar esos recursos. La marca --view_udf_resource no se muestra aquí. Si deseas obtener más información sobre cómo usar UDF, consulta Funciones definidas por el usuario de SQL estándar.

Si creas una vista en un proyecto que no sea el 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, KEY:VALUE] --view '[QUERY]' --project_id [PROJECT_ID] [DATASET].[VIEW]

Aquí:

  • [PATH_TO_FILE] es la ruta del URI o del sistema de archivos local a un archivo de código que se cargará y evaluará de inmediato como un recurso de función definida por el usuario que la vista utiliza. Repite la marca a fin de especificar varios archivos.
  • [INTEGER] es el ciclo de vida predeterminado (en segundos) de la vista. El valor mínimo es 3,600 segundos (una hora). La hora de vencimiento se evalúa según la hora actual más el valor del número entero. Si configuras la hora de vencimiento cuando creas una vista, se ignora la configuración de vencimiento de la tabla predeterminada para el conjunto de datos.
  • [DESCRIPTION] es una descripción de la vista entre comillas.
  • [KEY:VALUE] es el par clave-valor que representa una etiqueta. Puedes ingresar múltiples etiquetas mediante una lista separada por comas.
  • [QUERY] es una consulta válida. Para las vistas de SQL estándar, la consulta debe incluir el ID del proyecto en la tabla y las referencias de las vistas en la forma `[PROJECT_ID].[DATASET].[TABLE]`.
  • [PROJECT_ID] es el ID del proyecto (si no tienes un proyecto predeterminado configurado).
  • [DATASET] es un conjunto de datos en el proyecto.
  • [VIEW] es el nombre de la vista que deseas crear.

Ejemplos:

Ingresa el siguiente comando para crear una vista denominada myview en mydataset, en el proyecto predeterminado. La hora de 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 utilizada 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 a fin de crear una vista denominada myview en mydataset, en myotherproject. La hora de 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 utilizada 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' --project_id myotherproject mydataset.myview

Después de que se crea la vista, puedes actualizar el vencimiento, la descripción y las etiquetas de la vista.

API

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

Go

Antes de probar esta muestra, sigue las instrucciones de configuración de Go que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la Documentación de referencia de la API de BigQuery de Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
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
}

Python

Antes de probar esta muestra, sigue las instrucciones de configuración de Python que se encuentran en la Guía de inicio rápido de BigQuery con bibliotecas cliente. Si deseas obtener más información, consulta la Documentación de referencia de la API de BigQuery de Python.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = 'my-project'
# source_dataset_id = 'my_source_dataset'
# source_table_id = 'us_states'
# shared_dataset_ref = client.dataset('my_shared_dataset')

# This example shows how to create a shared view of a source table of
# US States. The source table contains all 50 states, while the view will
# contain only states with names starting with 'W'.
view_ref = shared_dataset_ref.table('my_shared_view')
view = bigquery.Table(view_ref)
sql_template = (
    'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "W%"')
view.view_query = sql_template.format(
    project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

print('Successfully created view at {}'.format(view.full_table_id))

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

Próximos pasos

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.