Crear tablas agrupadas en clústeres
Puedes reducir la cantidad de datos que procesa una consulta usando tablas agrupadas en clústeres en BigQuery.
En las tablas agrupadas en clústeres, los datos se organizan según los valores de las columnas especificadas, también llamadas columnas de agrupamiento en clústeres. BigQuery ordena los datos por las columnas de clúster y, a continuación, almacena las filas que tienen valores similares en los mismos bloques físicos o en bloques cercanos. Cuando una consulta filtra por una columna agrupada en clústeres, BigQuery analiza de forma eficiente solo los bloques pertinentes y omite los datos que no coinciden con el filtro.
Para obtener más información, consulta las siguientes secciones:
- Para obtener más información sobre las tablas agrupadas en clústeres de BigQuery, consulta Introducción a las tablas agrupadas en clústeres.
- Para obtener información sobre cómo trabajar con tablas agrupadas en clústeres y controlar el acceso a ellas, consulta el artículo Gestionar tablas agrupadas en clústeres.
Antes de empezar
Roles obligatorios
Para obtener los permisos que necesitas para crear una tabla, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos:
-
Usuario de trabajos de BigQuery (
roles/bigquery.jobUser
) en el proyecto si vas a crear una tabla cargando datos o guardando los resultados de una consulta en una tabla. -
Editor de datos de BigQuery (
roles/bigquery.dataEditor
) en el conjunto de datos en el que vas a crear la tabla.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para crear una tabla. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para crear una tabla, se necesitan los siguientes permisos:
-
bigquery.tables.create
en el conjunto de datos en el que vas a crear la tabla. -
bigquery.tables.getData
en todas las tablas y vistas a las que hace referencia tu consulta si guardas los resultados de la consulta en una tabla. -
bigquery.jobs.create
en el proyecto si creas la tabla cargando datos o guardando los resultados de una consulta en una tabla. -
bigquery.tables.updateData
en la tabla si vas a añadir o sobrescribir una tabla con los resultados de la consulta.
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Requisitos para los nombres de las tablas
Cuando creas una tabla en BigQuery, el nombre de la tabla debe ser único por conjunto de datos. El nombre de la tabla puede:
- Contener caracteres con un total de hasta 1024 bytes UTF-8.
- Contener caracteres Unicode de las categorías L (letra), M (marca), N (número), Pc (conector, incluido el guion bajo), Pd (guion) y Zs (espacio). Para obtener más información, consulta la sección Categoría general.
Estos son ejemplos de nombres de tabla válidos:
table 01
, ग्राहक
, 00_お客様
y étudiant-01
.
Desventajas:
- Los nombres de tabla distinguen entre mayúsculas y minúsculas de forma predeterminada.
mytable
yMyTable
pueden coexistir en el mismo conjunto de datos, a menos que formen parte de un conjunto de datos con la opción de distinción entre mayúsculas y minúsculas desactivada. - Algunos nombres de tabla y prefijos de nombres de tabla están reservados. Si recibes un error que indica que el nombre o el prefijo de la tabla está reservado, selecciona otro nombre e inténtalo de nuevo.
Si incluyes varios operadores de punto (
.
) en una secuencia, los operadores duplicados se eliminan implícitamente.Por ejemplo, este:
project_name....dataset_name..table_name
Se convierte en lo siguiente:
project_name.dataset_name.table_name
Requisitos de las columnas agrupadas
Puedes especificar las columnas que se usarán para crear la tabla agrupada en clústeres al crear una tabla en BigQuery. Una vez creada la tabla, puedes modificar las columnas que se han usado para crearla. Para obtener más información, consulta Modificar la especificación de la agrupación en clústeres.
Las columnas de clustering deben ser columnas de nivel superior que no se repitan y deben ser de uno de los siguientes tipos de datos:
BIGNUMERIC
BOOL
DATE
DATETIME
GEOGRAPHY
INT64
NUMERIC
RANGE
STRING
TIMESTAMP
Puede especificar hasta cuatro columnas de clustering. Si especificas varias columnas, el orden de las columnas determina cómo se ordenan los datos. Por ejemplo, si la tabla se agrupa en clústeres por las columnas a, b y c, los datos se ordenan en el mismo orden: primero por la columna a, luego por la columna b y, por último, por la columna c. Como práctica recomendada, coloque primero la columna que se filtra o agrega con más frecuencia.
El orden de las columnas de clustering también afecta al rendimiento y al precio de las consultas. Para obtener más información sobre las prácticas recomendadas para consultar tablas agrupadas en clústeres, consulta Consultar tablas agrupadas en clústeres.
Crear una tabla agrupada en clústeres vacía con una definición de esquema
Para crear una tabla agrupada en clústeres vacía con una definición de esquema, sigue estos pasos:
Consola
En la Google Cloud consola, ve a la página BigQuery.
- En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
- En la sección Información del conjunto de datos, haz clic en Crear tabla.
- En el panel Crear tabla, especifica los siguientes detalles:
- En la sección Fuente, selecciona Tabla vacía en la lista Crear tabla a partir de.
- En la sección Destino, especifica los siguientes detalles:
- En Conjunto de datos, selecciona el conjunto de datos en el que quieras crear la tabla.
- En el campo Tabla, introduce el nombre de la tabla que quieras crear.
- Verifica que el campo Tipo de tabla sea Tabla nativa.
- En la sección Schema (Esquema), introduce la definición de schema.
Puede introducir la información del esquema manualmente mediante uno de los siguientes métodos:
- Opción 1: Haz clic en Editar como texto y pega el esquema en forma de matriz JSON. Cuando usas una matriz JSON, generas el esquema siguiendo el mismo proceso que para crear un archivo de esquema JSON.
Para ver el esquema de una tabla en formato JSON, introduce el siguiente comando:
bq show --format=prettyjson dataset.table
- Opción 2: Haz clic en Tipo y Modo de cada campo. Añadir campo e introduce el esquema de la tabla. Especifica el Nombre,
- Opción 1: Haz clic en Editar como texto y pega el esquema en forma de matriz JSON. Cuando usas una matriz JSON, generas el esquema siguiendo el mismo proceso que para crear un archivo de esquema JSON.
Para ver el esquema de una tabla en formato JSON, introduce el siguiente comando:
- En Orden de clústeres, introduce entre uno y cuatro nombres de columna separados por comas.
- Opcional: En la sección Opciones avanzadas, si quieres usar una clave de cifrado gestionada por el cliente, selecciona la opción Usar una clave de cifrado gestionada por el cliente (CMEK). De forma predeterminada, BigQuery encripta el contenido de los clientes almacenado en reposo mediante una Google-owned and Google-managed encryption key.
- Haz clic en Crear tabla.
SQL
Usa el comando CREATE TABLE
DDL statement
con la opción CLUSTER BY
. En el siguiente ejemplo se crea una tabla agrupada denominada myclusteredtable
en mydataset
:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
CREATE TABLE mydataset.myclusteredtable ( customer_id STRING, transaction_amount NUMERIC ) CLUSTER BY customer_id OPTIONS ( description = 'a table clustered by customer_id');
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
bq
Usa el comando bq mk
con las siguientes marcas:
--table
(o el acceso directo-t
).--schema
. Puedes proporcionar la definición del esquema de la tabla de forma insertada o usar un archivo de esquema JSON.--clustering_fields
. Puede especificar hasta cuatro columnas de clustering.
Entre los parámetros opcionales se incluyen --expiration
, --description
,
--time_partitioning_type
, --time_partitioning_field
,
--time_partitioning_expiration
, --destination_kms_key
y --label
.
Si vas a crear una tabla en un proyecto que no sea el predeterminado, añade el ID del proyecto al conjunto de datos con el siguiente formato:
project_id:dataset
.
--destination_kms_key
no se muestra aquí. Para obtener información sobre cómo usar --destination_kms_key
, consulta el artículo sobre las claves de cifrado gestionadas por el cliente.
Introduce el siguiente comando para crear una tabla agrupada vacía con una definición de esquema:
bq mk \ --table \ --expiration INTEGER1 \ --schema SCHEMA \ --clustering_fields CLUSTER_COLUMNS \ --description "DESCRIPTION" \ --label KEY:VALUE,KEY:VALUE \ PROJECT_ID:DATASET.TABLE
Haz los cambios siguientes:
INTEGER1
: el tiempo de vida predeterminado de la tabla, en segundos. El valor mínimo es de 3600 segundos (una hora). La hora de vencimiento se calcula como la hora UTC actual más el valor entero. Si define la fecha de vencimiento de la tabla al crearla, se ignorará el ajuste de vencimiento de tabla predeterminado del conjunto de datos. Si asigna este valor, la tabla se eliminará después del tiempo especificado.SCHEMA
: una definición de esquema insertada en el formatoCOLUMN:DATA_TYPE,COLUMN:DATA_TYPE
o la ruta al archivo de esquema JSON de tu máquina local.CLUSTER_COLUMNS
: lista separada por comas de hasta cuatro columnas de clustering. La lista no puede contener espacios.DESCRIPTION
: una descripción de la tabla entre comillas.KEY:VALUE
: el par clave-valor que representa una etiqueta. Puedes introducir varias etiquetas mediante una lista separada por comas.PROJECT_ID
: tu ID de proyecto.DATASET
: un conjunto de datos de tu proyecto.TABLE
: el nombre de la tabla que vas a crear.
Cuando especifica el esquema en la línea de comandos, no puede incluir un tipo RECORD
(STRUCT
), una descripción de la columna ni el modo de la columna. Todos los modos tienen el valor predeterminado NULLABLE
. Para incluir descripciones, modos y tipos RECORD
, proporciona un archivo de esquema JSON.
Ejemplos:
Introduce el siguiente comando para crear una tabla agrupada llamada myclusteredtable
en mydataset
en tu proyecto predeterminado. La caducidad de la tabla se ha establecido en 2.592.000 (1 mes de 30 días), la descripción se ha establecido en This is my clustered table
y la etiqueta se ha establecido en organization:development
. El comando usa la combinación de teclas -t
en lugar de --table
.
El esquema se especifica de forma insertada como:
timestamp:timestamp,customer_id:string,transaction_amount:float
. El campo de clustering customer_id
especificado se usa para agrupar la tabla.
bq mk \
-t \
--expiration 2592000 \
--schema 'timestamp:timestamp,customer_id:string,transaction_amount:float' \
--clustering_fields customer_id \
--description "This is my clustered table" \
--label org:dev \
mydataset.myclusteredtable
Introduce el siguiente comando para crear una tabla agrupada llamada myclusteredtable
en myotherproject
, no en tu proyecto predeterminado. La descripción se ha definido como This is my clustered table
y la etiqueta como organization:development
. El comando usa la combinación de teclas -t
en lugar de --table
. Este comando no especifica un vencimiento de la tabla. Si el conjunto de datos tiene una fecha de vencimiento de tabla predeterminada, se aplica. Si el conjunto de datos no tiene una fecha de vencimiento predeterminada para las tablas, estas nunca caducarán.
El esquema se especifica en un archivo JSON local: /tmp/myschema.json
. El campo customer_id
se usa para agrupar la tabla.
bq mk \
-t \
--expiration 2592000 \
--schema /tmp/myschema.json \
--clustering_fields=customer_id \
--description "This is my clustered table" \
--label org:dev \
myotherproject:mydataset.myclusteredtable
Una vez creada la tabla, puede actualizar su descripción y sus etiquetas.
Terraform
Usa el recurso google_bigquery_table
.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar la autenticación para bibliotecas de cliente.
En el siguiente ejemplo se crea una tabla llamada mytable
que se agrupa en clústeres en las columnas ID
y Created
:
Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud
Preparar Cloud Shell
- Abre Cloud Shell.
-
Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.
Preparar el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión
.tf
. Por ejemplo,main.tf
. En este tutorial, nos referiremos al archivo comomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tf
que acabas de crear.También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade
:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.
API
Llama al método tables.insert
con un recurso de tabla definido que especifica la propiedad clustering.fields
y la propiedad schema
.
Python
Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Go
Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Crear una tabla agrupada en clústeres a partir del resultado de una consulta
Hay dos formas de crear una tabla agrupada a partir del resultado de una consulta:
- Escribe los resultados en una tabla de destino nueva y especifica las columnas de clustering.
- Mediante una declaración de DDL
CREATE TABLE AS SELECT
. Para obtener más información sobre este método, consulta el artículo Crear una tabla agrupada a partir del resultado de una consulta de la página Usar instrucciones del lenguaje de definición de datos.
Puedes crear una tabla agrupada en clústeres consultando una tabla con particiones o una tabla sin particiones. No puedes convertir una tabla en clúster en una tabla agrupada mediante los resultados de una consulta.
Cuando creas una tabla agrupada en clústeres a partir del resultado de una consulta, debes usar SQL estándar. Actualmente, el SQL antiguo no se admite para consultar tablas agrupadas ni para escribir resultados de consultas en tablas agrupadas.
SQL
Para crear una tabla agrupada en clústeres a partir del resultado de una consulta, usa la
declaración de DDL CREATE TABLE
con la opción CLUSTER BY
. En el siguiente ejemplo se crea una tabla agrupada en clústeres por customer_id
consultando una tabla sin clústeres:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
CREATE TABLE mydataset.clustered_table ( customer_id STRING, transaction_amount NUMERIC ) CLUSTER BY customer_id AS ( SELECT * FROM mydataset.unclustered_table );
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
bq
Introduce el siguiente comando para crear una tabla de destino agrupada a partir del resultado de una consulta:
bq --location=LOCATION query \ --use_legacy_sql=false 'QUERY'
Haz los cambios siguientes:
LOCATION
: el nombre de tu ubicación. La marca--location
es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes asignar el valorasia-northeast1
a la marca. Puedes definir un valor predeterminado para la ubicación mediante el archivo.bigqueryrc.QUERY
: una consulta con sintaxis de GoogleSQL. Actualmente, no puedes usar SQL antiguo para consultar tablas agrupadas en clústeres ni para escribir resultados de consultas en tablas agrupadas en clústeres. La consulta puede contener una declaraciónCREATE TABLE
DDL que especifique las opciones para crear la tabla agrupada. Puedes usar DDL en lugar de especificar las marcas de línea de comandos individuales.
Ejemplos:
Introduce el siguiente comando para escribir los resultados de la consulta en una tabla de destino agrupada llamada myclusteredtable
en mydataset
. mydataset
está en tu proyecto predeterminado. La consulta obtiene datos de una tabla sin particiones: mytable. La columna customer_id
de la tabla se usa para agrupar en clústeres la tabla. La columna timestamp
de la tabla se usa para crear una tabla con particiones.
bq query --use_legacy_sql=false \
'CREATE TABLE
mydataset.myclusteredtable
PARTITION BY
DATE(timestamp)
CLUSTER BY
customer_id
AS (
SELECT
*
FROM
`mydataset.mytable`
);'
API
Para guardar los resultados de una consulta en una tabla agrupada en clústeres, llama al método jobs.insert
, configura un trabajo query
e incluye una declaración CREATE TABLE
DDL que cree la tabla agrupada en clústeres.
Especifica tu ubicación en la propiedad location
de la sección jobReference
del recurso de trabajo.
Crear una tabla agrupada en clústeres al cargar datos
Puedes crear una tabla agrupada especificando las columnas de agrupación al cargar datos en una tabla nueva. No es necesario que cree una tabla vacía antes de cargar datos en ella. Puedes crear la tabla agrupada y cargar los datos al mismo tiempo.
Para obtener más información sobre la carga de datos, consulta la introducción a la carga de datos en BigQuery.
Para definir la agrupación en clústeres al definir un trabajo de carga, sigue estos pasos:
SQL
Usa la instrucción LOAD DATA
.
En el siguiente ejemplo se cargan datos AVRO para crear una tabla que se particiona por el campo transaction_date
y se agrupa en clústeres por el campo customer_id
.
También configura las particiones para que caduquen al cabo de tres días.
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
LOAD DATA INTO mydataset.mytable PARTITION BY transaction_date CLUSTER BY customer_id OPTIONS ( partition_expiration_days = 3) FROM FILES( format = 'AVRO', uris = ['gs://bucket/path/file.avro']);
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
API
Para definir una configuración de clustering al crear una tabla mediante una tarea de carga, puede rellenar las propiedades Clustering
de la tabla.
Go
Antes de probar este ejemplo, sigue las Goinstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Go de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Python
Antes de probar este ejemplo, sigue las Pythoninstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Siguientes pasos
- Para obtener información sobre cómo trabajar con tablas agrupadas en clústeres, consulta Gestionar tablas agrupadas en clústeres.
- Para obtener información sobre cómo consultar tablas agrupadas en clústeres, consulta Consultar tablas agrupadas en clústeres.
- Para obtener una descripción general de la compatibilidad con tablas particionadas en BigQuery, consulta Introducción a las tablas particionadas.
- Para saber cómo crear tablas con particiones, consulta Crear tablas con particiones.
- Para ver una descripción general de
INFORMATION_SCHEMA
, consulta Introducción a BigQueryINFORMATION_SCHEMA
.