Como consultar tabelas em cluster
Quando você cria uma tabela em cluster no BigQuery, os dados da tabela são organizados automaticamente com base no conteúdo de uma ou mais colunas no esquema da tabela. As colunas especificadas são usadas para colocar dados relacionados. Quando você cria uma tabela em cluster usando várias colunas, a ordem das colunas especificadas é importante. A ordem das colunas especificadas determina a ordem de classificação dos dados.
Para otimizar o desempenho de consultas em tabelas em cluster, use uma expressão que filtre em uma coluna em cluster ou em várias colunas em cluster, na ordem em que essas colunas estiverem especificadas. Consultas que filtram colunas em cluster geralmente têm melhor desempenho que as que filtram somente colunas que não estão em cluster.
O BigQuery classifica os dados em uma tabela em cluster com base nos valores existentes nas colunas em cluster e os organiza em blocos.
Quando você envia uma consulta que contém um filtro em uma coluna em cluster, o BigQuery usa as informações do cluster para determinar com eficiência se há dados relevantes para a consulta em um bloco. Desse modo, o BigQuery analisa apenas os blocos relevantes com um processo conhecido como "remoção de blocos".
Para consultar tabelas em cluster:
- Como usar o Console do Cloud
- Use o comando
bq query
da ferramenta de linha de comandobq
. - chame o método de API jobs.insert e configure um job de consulta;
- Use bibliotecas de cliente.
Somente o SQL padrão pode ser usado com tabelas em cluster.
Go
Antes de testar essa amostra, siga as instruções de configuração para Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Java
Antes de testar essa amostra, siga as instruções de configuração para Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.
Python
Antes de testar essa amostra, siga as instruções de configuração para Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Permissões necessárias
Para consultar uma tabela, você precisa ter, no mínimo, as permissões bigquery.tables.getData
.
Os seguintes papéis predefinidos do IAM incluem as permissões bigquery.tables.getData
:
bigquery.dataViewer
bigquery.dataOwner
bigquery.dataEditor
bigquery.admin
Além disso, quando um usuário tem permissões bigquery.datasets.create
e cria um conjunto de dados, ele recebe o acesso bigquery.dataOwner
ao conjunto.
O acesso bigquery.dataOwner
permite que o usuário consulte tabelas e visualizações no conjunto de dados.
Você também precisa receber as permissões bigquery.jobs.create
para executar jobs de consulta.
Os seguintes papéis predefinidos do IAM incluem as permissões bigquery.jobs.create
:
bigquery.user
bigquery.jobUser
bigquery.admin
Para mais informações sobre papéis e permissões do IAM no BigQuery, consulte Controle de acesso.
Práticas recomendadas
Para conseguir o melhor desempenho das consultas em tabelas em cluster, use as seguintes práticas recomendadas.
Tabela de amostra usada nos exemplos
A tabela de amostra usada nos exemplos desta página é uma tabela em cluster criada com uma instrução DDL. A instrução DDL cria uma tabela chamada ClusteredSalesData
. A tabela é agrupada pelas seguintes colunas:
customer_id
, product_id
, order_id
, nessa ordem de classificação.
CREATE TABLE `mydataset.ClusteredSalesData` PARTITION BY DATE(timestamp) CLUSTER BY customer_id, product_id, order_id AS SELECT * FROM `mydataset.SalesData`
Filtrar colunas em cluster por ordem de classificação
Ao especificar um filtro, use expressões que filtrem as colunas em cluster por ordem
de classificação. Para conseguir os benefícios do clustering, inclua todas as colunas
em cluster ou um subconjunto de colunas por ordem de classificação, da esquerda para a
direita, começando pela primeira coluna. Por exemplo, se a ordem de classificação da coluna forA
, B
, C
, uma
consulta que filtra A
e B
pode se beneficiar do armazenamento em cluster, mas
uma consulta que filtra B
e C
não. A ordem dos nomes das colunas dentro
da expressão de filtro não afeta o desempenho.
A consulta a seguir inclui uma expressão que filtra customer_id
e depois product_id
. Essa consulta otimiza o desempenho filtrando as colunas em cluster na ordem de classificação.
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id = 10000 AND product_id LIKE 'gcp_analytics%'
A consulta a seguir não filtra as colunas em cluster na ordem de classificação. Por isso, o desempenho da consulta não é o ideal. Essa consulta filtra product_id
e depois order_id
(ignorando customer_id
).
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE product_id LIKE 'gcp_analytics%' AND order_id = 20000
Não use colunas em cluster nas expressões de filtro complexas
Se você usar uma expressão de filtro complexa em uma coluna em cluster, o desempenho da consulta não será otimizado porque a remoção de bloco não será aplicada.
Por exemplo, a consulta a seguir não remove os blocos porque uma coluna em cluster (customer_id
) foi usada em uma função na expressão de filtro.
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE CAST(customer_id AS STRING) = "10000"
Para otimizar o desempenho da consulta removendo blocos, use expressões de filtro simples, como as seguintes. Neste exemplo, um filtro simples é aplicado à coluna em cluster (customer_id
).
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id = 10000
Não compare colunas em cluster com outras colunas
Se uma expressão de filtro comparar uma coluna em cluster a outra (coluna em cluster ou não), o desempenho da consulta não será otimizado porque a remoção de bloco não poderá ser aplicada.
A consulta a seguir não remove os blocos porque a expressão de filtro compara uma coluna em cluster (customer_id
) a outra coluna (order_id
).
SELECT SUM(totalSale) FROM `mydataset.ClusteredSalesData` WHERE customer_id = order_id
Próximas etapas
- Para mais informações sobre como executar consultas, consulte Como executar consultas interativas e em lote.
- Para saber como criar e usar tabelas em cluster, consulte Como criar e usar tabelas em cluster.
- Para uma visão geral do suporte a tabelas particionadas no BigQuery, consulte Introdução às tabelas particionadas.
- Para saber como criar e usar tabelas particionadas por tempo de ingestão, clique aqui.
- Para saber como criar e usar tabelas particionadas, clique aqui.