BigLake é a camada de acesso unificado do GCP que estende o BigQuery para dados armazenados no Cloud Storage (e outros sistemas como Amazon S3 e Azure Data Lake). Permite aplicar governança de dados (controle por coluna e por linha) sobre arquivos no data lake sem precisar mover ou ingerir os dados no BigQuery.

Em essência, BigLake transforma tabelas externas em objetos de primeira classe com segurança e performance comparáveis a tabelas nativas.

O problema que o BigLake resolve

Tabelas externas comuns no BigQuery têm uma limitação crítica: as políticas de IAM do BigQuery não se aplicam ao nível de linha ou coluna. Qualquer usuário com acesso à tabela externa lê todos os dados. BigLake resolve isso centralizando o acesso: o BigQuery acessa o GCS em nome do usuário via uma connection, e as políticas de linha/coluna são aplicadas antes de retornar os dados.

graph LR
    U[Usuário] -->|query| BQ[BigQuery]
    BQ -->|via connection| BL[BigLake API]
    BL -->|aplica policies| GCS[(GCS / S3 / ADLS)]
    GCS --> BL
    BL --> BQ
    BQ --> U

Sem BigLake, o usuário poderia acessar o GCS diretamente e contornar qualquer controle do BigQuery.

Criando uma tabela BigLake

1. Criar uma connection

A connection é a identidade (Service Account gerenciada pelo Google) que o BigQuery usa para acessar o storage:

-- Via BigQuery SQL (BigQuery Omni / connections)
-- Ou via bq CLI:
bq mk --connection \
  --location=US \
  --project_id=meu-projeto \
  --connection_type=CLOUD_RESOURCE \
  minha-connection

Após criar, o BigQuery retorna uma Service Account associada à connection. Conceder a ela acesso de leitura ao bucket:

# Ver o SA da connection
bq show --connection meu-projeto.US.minha-connection
 
# Conceder acesso ao bucket
gsutil iam ch \
  serviceAccount:[email protected]:roles/storage.objectViewer \
  gs://meu-bucket

2. Criar a tabela BigLake

CREATE EXTERNAL TABLE meu_dataset.pedidos_biglake
WITH CONNECTION `meu-projeto.US.minha-connection`
OPTIONS (
  format = 'PARQUET',
  uris = ['gs://meu-bucket/trusted/pedidos/*.parquet']
);

A diferença em relação a uma tabela externa comum é o WITH CONNECTION: isso ativa o controle de acesso via BigLake.

Governança: column e row-level security

Com a tabela BigLake criada, as mesmas políticas do BigQuery passam a funcionar:

Column-level security (Policy Tags)

-- 1. Criar policy tag no Data Catalog / Dataplex
-- 2. Aplicar na coluna da tabela BigLake
 
ALTER TABLE meu_dataset.pedidos_biglake
  ALTER COLUMN cpf
  SET OPTIONS (policy_tags='projects/meu-projeto/locations/us/taxonomies/123/policyTags/456');

Usuários sem permissão na policy tag recebem erro ao tentar ler a coluna cpf.

Row-level security (Row Access Policies)

-- Usuários do time "sul" veem apenas pedidos da região sul
CREATE ROW ACCESS POLICY regiao_sul
ON meu_dataset.pedidos_biglake
GRANT TO ("group:[email protected]")
FILTER USING (regiao = 'sul');
 
-- Administradores veem tudo
CREATE ROW ACCESS POLICY admin_full_access
ON meu_dataset.pedidos_biglake
GRANT TO ("group:[email protected]")
FILTER USING (TRUE);

Cache gerenciado (BigLake Managed Tables)

Para tabelas com acesso frequente, o BigLake pode materializar um cache dos dados do GCS em storage gerenciado pelo BigQuery, reduzindo latência e custo de queries repetidas:

-- Ativar managed tables (preview)
CREATE EXTERNAL TABLE meu_dataset.eventos_cache
WITH CONNECTION `meu-projeto.US.minha-connection`
OPTIONS (
  format = 'PARQUET',
  uris = ['gs://meu-bucket/raw/eventos/*.parquet'],
  metadata_cache_mode = 'AUTOMATIC'  -- atualiza cache automaticamente
);

O cache é transparente para o usuário: o BigQuery decide automaticamente quando usar o cache ou ler do GCS.

BigLake Metastore

Hive Metastore gerenciado integrado ao BigLake. Permite que engines como Dataproc (Spark), Dataflow e BigQuery compartilhem o mesmo catálogo de tabelas sem duplicar definições de schema:

graph TD
    BQ[BigQuery] --> BLM[BigLake Metastore]
    DP[Dataproc / Spark] --> BLM
    DF[Dataflow] --> BLM
    BLM --> GCS[(GCS)]

Substitui o Dataproc Metastore (Hive Metastore tradicional) em arquiteturas novas.

BigLake vs tabela externa comum

Tabela externaTabela BigLake
Acesso ao GCSDireto (credenciais do usuário)Via connection (SA gerenciada)
Column-level securityNãoSim
Row-level securityNãoSim
Cache gerenciadoNãoSim (Managed Tables)
Metastore compartilhadoNãoSim (BigLake Metastore)
Acesso multi-engineLimitadoSim (BQ + Spark + Dataflow)

Posição no ecossistema

BigLake é a peça que fecha o gap entre data lake (GCS) e data warehouse (BigQuery) do ponto de vista de governança. Combinado com o Dataplex, forma a base de uma arquitetura data lakehouse com segurança centralizada:

  • Dataplex: catalogação, linhagem e qualidade de dados
  • BigLake: controle de acesso e cache sobre os dados físicos no GCS
  • BigQuery: engine SQL de consulta

Ver também: gcp-bigquery | gcp-cloud-storage | gcp-dataplex | gcp-dataproc | gcp-bigquery-otimizacao | data-lake-lakehouse