Introdução a tabelas particionadas

Nesta página, você terá uma visão geral do suporte a tabelas particionadas no BigQuery.

Uma tabela particionada é uma tabela especial dividida em segmentos, chamados partições, que facilitam o gerenciamento e a consulta aos dados. Ao dividir uma tabela grande em partições menores, você pode melhorar o desempenho da consulta, além de reduzir o número de bytes lidos, o que ajuda a controlar os custos.

Há dois tipos de partição de tabelas no BigQuery:

  • Tabelas particionadas por tempo de ingestão: são as tabelas particionadas com base na data de ingestão de dados (carga) ou na data de chegada.
  • Tabelas particionadas: tabelas que são particionadas com base em uma coluna TIMESTAMP ou DATE.

Tabelas particionadas por tempo de ingestão

Quando você cria uma tabela particionada por tempo de ingestão, o BigQuery carrega automaticamente dados em partições diárias baseadas em data que refletem a data de chegada ou data de ingestão. Pseudocoluna e identificadores de sufixo permitem redefinir (substituir) e redirecionar dados para partições em um dia específico.

Nas tabelas particionadas por tempo de ingestão, há uma pseudocoluna, chamada _PARTITIONTIME que contém um carimbo de data/hora baseado em data para os dados carregados nas tabelas. As consultas nas tabelas particionadas por tempo podem restringir os dados lidos fornecendo filtros _PARTITIONTIME que representam a localização de uma partição. Todos os dados na partição especificada são lidos pela consulta, mas o filtro de predicado _PARTITIONTIME restringe o número de partições verificadas.

Quando você cria tabelas particionadas por tempo de ingestão, as partições têm a mesma definição de esquema que a tabela. Se você precisar carregar dados em uma partição com um esquema diferente do da tabela, atualize o esquema da tabela antes de carregá-los. Você também pode usar opções de atualização de esquema para atualizar o esquema da tabela em um job de carga ou de consulta.

Tabelas particionadas

O BigQuery também permite tabelas particionadas. Com elas, você pode vincular o esquema de particionamento a uma coluna específica TIMESTAMP ou DATE. Os dados gravados em uma tabela particionada são automaticamente entregues à partição apropriada com base no valor da data (expresso em UTC) na coluna de particionamento.

Tabelas particionadas não precisam de uma pseudocoluna _PARTITIONTIME. As consultas em tabelas particionadas podem especificar filtros de predicado com base na coluna de particionamento para reduzir a quantidade de dados digitalizados.

Quando você cria tabelas particionadas, duas partições especiais são criadas:

  • __NULL__: representa linhas com valores NULL na coluna de particionamento.
  • __UNPARTITIONED__: representa dados que existem fora do intervalo permitido de datas.

Com exceção das partições __NULL__ e __UNPARTITIONED__, todos os dados na coluna de particionamento correspondem à data do identificador da partição. Isso permite que uma consulta determine quais partições não contêm dados que satisfaçam às condições do filtro. As consultas que filtram dados na coluna de particionamento podem restringir valores e eliminar partições desnecessárias.

Particionamento x fragmentação

Como alternativa às tabelas particionadas, você pode fragmentar tabelas usando uma abordagem de nomeação com base no tempo, como [PREFIX]_YYYYMMDD. Isso é referido como criar tabelas fragmentadas por data. Usando SQL padrão ou legado, você pode especificar uma consulta com um operador UNION para limitar as tabelas verificadas pela consulta.

Tabelas particionadas têm melhor desempenho que as tabelas fragmentadas por data. Quando você cria tabelas nomeadas por data, o BigQuery precisa manter uma cópia do esquema e dos metadados para cada tabela desse tipo. Além disso, quando as tabelas nomeadas por data são usadas, pode ser exigido que o BigQuery verifique permissões para cada tabela consultada. Essa prática também sobrecarrega a consulta e afeta o desempenho dela. A prática recomendada é usar tabelas particionadas em vez de tabelas fragmentadas por data.

Comparação entre opções de particionamento

Na tabela a seguir, você verá uma comparação entre tabelas fragmentadas e particionadas.

Ações Tabelas fragmentadas Tabelas particionadas por tempo de ingestão Tabelas particionadas
Método de particionamento Nenhuma: fragmentar tabelas e consultá-las usando um operador UNION pode simular o particionamento. Particionamento com base na data de ingestão ou chegada dos dados. As informações de partição podem ser referenciadas com uma pseudocoluna. Particionado com base em dados em uma coluna TIMESTAMP ou DATE especificada.
Identificadores de partição Nenhuma É possível usar qualquer data válida entre 01/01/0001 e 31/12/9999, mas as instruções DML não podem corresponder a datas anteriores a 01/01/1970 ou posteriores a 31/12/2159. Uma entrada válida da coluna DATE ou TIMESTAMP vinculada. No momento, os valores de data anteriores a 01/01/1970 e posteriores a 31/12/2159 são colocados em uma partição UNPARTITIONED compartilhada. Valores NULL ficam em uma partição NULL explícita.
Limitação de dados digitalizados Faz referência apenas aos fragmentos necessários e limita os dados, excluindo colunas desnecessárias da consulta. Use a pseudocoluna _PARTITIONTIME para eliminar partições. Usa filtros de predicado na coluna de particionamento.
Número de partições O número de tabelas é irrestrito, mas as consultas só podem fazer referência a até 1.000 tabelas. Até 4.000 partições. Até 4.000 partições.
Operações de atualização O limite é de 1.000 atualizações por dia. Uma operação individual pode estar comprometida com uma única partição. A partição mais recente (por padrão), ou uma especificada usando um decorador de partição, como [TABLE]$[DATE]. Uma operação individual pode enviar dados para até 2.000 partições distintas.
Inserções de streaming Um buffer global para a tabela. Com sufixos de partição, você pode fazer streaming para partições dos últimos 31 dias e próximos 16 dias em relação à data atual, com base no horário UTC atual. Você pode fazer streaming de dados do último ano e dos próximos seis meses. Os dados fora desse intervalo são rejeitados. No processo, os dados dos últimos sete dias e próximos três dias são colocados no buffer de streaming e, em seguida, são extraídos para as partições correspondentes. Os dados fora desse período (mas dentro do intervalo de um ano, seis meses) são colocados na partição UNPARTITIONED. Quando há dados não particionados suficientes, eles são carregados nas partições correspondentes.
Avaliação do fuso horário Definido por semântica de usuários UTC UTC

Cotas e limites de tabelas particionadas

Tabelas particionadas definiram limites no BigQuery.

Cotas e limites também se aplicam aos diferentes tipos de jobs que você pode executar em tabelas particionadas, incluindo:

Para mais informações, consulte Cotas e limites.

Preços para tabelas particionadas

Ao criar e usar tabelas particionadas no BigQuery, as cobranças são baseadas na quantidade de dados armazenados nas partições e nas consultas de dados executadas:

  • Para saber mais sobre preços de armazenamento, consulte esta página.
  • Para saber mais sobre preços de consulta, consulte esta página.

Muitas operações de tabelas particionadas são gratuitas, incluindo carregamento de dados em partições, cópias de partições e exportação de dados de partições. Essas operações são gratuitas, mas estão sujeitas a cotas e limites do BigQuery. Para mais informações, consulte Operações gratuitas na página de preços.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.