Amostras da tabela
Com a amostragem de tabelas, é possível consultar subconjuntos aleatórios de dados de grandes tabelas do BigQuery. A amostragem retorna vários registros, ao mesmo tempo que evita os custos associados com a verificação e o processamento de uma tabela inteira.
Como usar a amostragem de tabelas
Para usar a amostragem de tabelas em uma consulta, inclua a
cláusula TABLESAMPLE
. Por exemplo, a consulta a seguir seleciona aproximadamente 10% dos dados de uma
tabela:
SELECT * FROM dataset.my_table TABLESAMPLE SYSTEM (10 PERCENT)
Ao contrário da cláusula LIMIT
, TABLESAMPLE
retorna um subconjunto aleatório de dados de uma
tabela. Além disso, o BigQuery não armazena em cache os resultados das consultas que
incluem uma cláusula TABLESAMPLE
. Portanto, a consulta pode retornar resultados diferentes a
cada vez.
É possível combinar a cláusula TABLESAMPLE
com outras condições de seleção. O
exemplo a seguir coleta cerca de 50% da tabela e, em seguida, aplica uma cláusula
WHERE
:
SELECT *
FROM dataset.my_table TABLESAMPLE SYSTEM (50 PERCENT)
WHERE customer_id = 1
O próximo exemplo combina uma cláusula TABLESAMPLE
com uma JOIN
:
SELECT *
FROM dataset.table1 T1 TABLESAMPLE SYSTEM (10 PERCENT)
JOIN dataset.table2 T2 TABLESAMPLE SYSTEM (20 PERCENT) USING (customer_id)
Para tabelas menores, se você mesclar duas amostras e nenhuma das linhas de amostra atender à condição de mesclagem, poderá receber um resultado vazio.
É possível especificar a porcentagem como um parâmetro de consulta. No próximo exemplo, mostramos como transmitir a porcentagem para uma consulta usando a ferramenta de linha de comando bq:
bq query --use_legacy_sql=false --parameter=percent:INT64:29 \
'SELECT * FROM `dataset.my_table` TABLESAMPLE SYSTEM (@percent PERCENT)`
As tabelas do BigQuery são organizadas em blocos de dados. A cláusula TABLESAMPLE
funciona aleatoriamente selecionando uma porcentagem de blocos de dados da tabela
e lendo todas as linhas nos blocos selecionados. A granularidade de amostragem
é limitada pelo número de blocos de dados.
Normalmente, o BigQuery divide tabelas ou suas partições em blocos
se elas forem maiores que cerca de 1 GB. Tabelas menores podem consistir em um único
bloco de dados. Nesse caso, a cláusula TABLESAMPLE
lê a tabela inteira. Se
a porcentagem de amostragem for maior que zero e a tabela não estiver vazia,
a amostragem da tabela sempre retornará alguns resultados.
Os blocos podem ser de tamanhos diferentes. Assim, a fração exata de linhas amostradas
pode variar. Se você quiser testar linhas individuais, em vez de blocos de dados,
use uma cláusula WHERE rand() < K
. No entanto, essa abordagem exige
que o BigQuery verifique a tabela inteira. Para economizar custos sem
deixar de aproveitar a amostragem no nível da linha, combine as duas técnicas.
O exemplo a seguir lê aproximadamente 20% dos blocos de dados do armazenamento e seleciona aleatoriamente 10% das linhas nesses blocos:
SELECT * FROM dataset.my_table TABLESAMPLE SYSTEM (20 PERCENT)
WHERE rand() < 0.1
Tabelas externas
É possível usar a cláusula TABLESAMPLE
com tabelas externas que armazenam dados em um
conjunto de arquivos. O BigQuery analisa um subconjunto dos arquivos
externos referenciados pela tabela. Para alguns formatos de arquivo, o BigQuery
pode dividir arquivos individuais em blocos para a amostragem. Alguns dados externos, como as
informações no Planilhas, consistem em um único arquivo amostrado como um bloco
de dados.
Amostragem do armazenamento otimizado para gravação
Se você usar amostragem de tabela com inserções por streaming, o BigQuery coletará dados do armazenamento otimizado para gravação. Em alguns casos, todos os dados no armazenamento otimizado para gravação são representados como um bloco único. Quando isso acontece, ou aparecem nos resultados todos os dados no armazenamento otimizado para gravação, ou nenhum.
Tabelas particionadas e em cluster
O particionamento e o armazenamento em cluster produzem blocos em que todas as linhas de um bloco específico têm a mesma chave de particionamento ou têm atributos de cluster com valores próximos. Portanto, os conjuntos de amostra dessas tabelas tendem a ter mais viés do que os conjuntos de amostra de tabelas não particionadas.
Limitações
- Uma tabela amostrada pode aparecer apenas uma vez em uma instrução de consulta. Essa restrição inclui tabelas referenciadas nas definições da visualização.
- A amostragem de dados das visualizações não é compatível.
- A amostragem dos resultados de subconsultas ou chamadas de função com valores de tabela não é aceita.
- A amostragem em uma subconsulta
IN
não é aceita. - Não é possível fazer a amostragem de tabelas com segurança aplicada no nível da linha.
Preços de amostragem da tabela
Se você usar o faturamento sob demanda, será
cobrado pela leitura dos dados amostrados. O BigQuery não
armazena em cache os resultados de uma consulta que inclui uma cláusula TABLESAMPLE
. Portanto, cada execução gera um custo de leitura dos dados do armazenamento.