Turbine seu LookML: Refatoração para Projetos Grandes
Conforme seu projeto no Looker cresce, o código LookML pode virar uma bagunça: repetitivo e difícil de manter. Refatorar o LookML significa colocar ordem na casa, otimizando e dividindo seu modelo para que ele continue escalável, fácil de ler e rápido – essencial quando vários devs trabalham juntos.
Este guia é seu mapa para entender por que e como refatorar LookML em projetos grandes, com as melhores práticas e exemplos práticos.
O que é Refatorar em LookML?
Refatorar é dar um tapa na estrutura do seu código LookML sem mudar o que ele faz. O objetivo é deixar seu LookML:
- Mais fácil de ler e manter no dia a dia.
- Mais modular e pronto para ser reutilizado.
- Mais rápido para desenvolver e testar novas features.
- Mais consistente entre todos os times.
Sabe o que é mais legal? Refatorar não muda o que seus usuários veem nos dashboards; ele melhora a organização por trás das cortinas.
Por que Refatorar o LookML em Projetos Grandes?
Projetos que bombam trazem desafios:
- Dimensões e medidas repetidas em várias views.
- Joins e explores complexos com definições que se repetem.
- Dificuldade para novos desenvolvedores entrarem no barco.
- Maior chance de aparecerem bugs.
A refatoração entra para:
- ✅ Diminuir a duplicação de código.
- ✅ Turbinar a performance.
- ✅ Facilitar o controle de versão.
- ✅ Dar suporte a múltiplos desenvolvedores de boa.
- ✅ Garantir modelos de dados mais limpos.
Estratégias Chave para Refatorar
Vamos ver as principais táticas para refatorar seu LookML de forma matadora.
Divida Arquivos Grandes em Blocos Menores e Lógicos
No começo, é comum juntar várias views e explores num único arquivo .lkml. Com o tempo, isso vira um caos. A solução é quebrar esses blocos grandes em arquivos menores, organizados por função ou área de dados.
Exemplo:
Em vez de um mega arquivo ecommerce.view.lkml com tudo:
/views/
├── orders.view.lkml
├── users.view.lkml
├── products.view.lkml
└── transactions.view.lkml
Cada arquivo cuida de uma entidade de dados. Depois, é só incluir tudo no seu arquivo de modelo:
include: "views/*.view"
Vantagens:
- Mais fácil achar a lógica específica.
- Carrega e edita mais rápido.
- Diminui conflitos no Git.
Use extends para Reutilização e Consistência
Se você tem várias views com campos ou lógicas parecidas, use o parâmetro extends em vez de copiar e colar código. Isso garante menos repetição e facilita as atualizações: mudou uma vez, aplicou em todo lugar!
Antes da Refatoração:
view: india_orders {
dimension: id { primary_key: yes }
dimension: order_date { type: date }
measure: total_sales { type: sum; sql: ${TABLE}.sales_amount ;; }
}
view: us_orders {
dimension: id { primary_key: yes }
dimension: order_date { type: date }
measure: total_sales { type: sum; sql: ${TABLE}.sales_amount ;; }
}
Depois da Refatoração:
view: base_orders {
dimension: id { primary_key: yes }
dimension: order_date { type: date }
measure: total_sales { type: sum; sql: ${TABLE}.sales_amount ;; }
}
view: india_orders {
extends: [base_orders]
always_filter: { filters: [country: "India"] }
}
view: us_orders {
extends: [base_orders]
always_filter: { filters: [country: "US"] }
}
Benefícios:
- Menos código repetido.
- Atualizações mais simples.
- Consistência garantida.
Modularize seus Explores
Quando as definições de explore ficam enormes e complicadas, o segredo é refatorar, separando os joins e a lógica em explores base reutilizáveis.
Exemplo:
explore: base_orders {
join: users {
sql_on: ${orders.user_id} = ${users.id} ;;
}
}
explore: ecommerce_orders {
extends: [base_orders]
always_filter: {
filters: [order_date: "30 days"]
}
}
Isso te ajuda a criar variações sem ter que duplicar os mesmos joins toda hora.
Organize a Estrutura de Diretórios do Projeto
Em projetos grandes, usar pastas é fundamental para a clareza. Uma boa estrutura:
/project
├── models/
│ ├── ecommerce.model.lkml
│ └── finance.model.lkml
├── views/
│ ├── base/
│ │ ├── base_orders.view.lkml
│ │ └── base_users.view.lkml
│ ├── derived/
│ │ └── derived_metrics.view.lkml
│ └── regional/
│ ├── india_orders.view.lkml
│ └── us_orders.view.lkml
├── dashboards/
│ ├── sales_dashboard.dashboard.lkml
│ └── marketing_dashboard.dashboard.lkml
└── manifests/
└── manifest.lkml
Essa organização permite imports modulares e uma navegação mais rápida.
Use Constantes e Parâmetros em Arquivos Manifest
O arquivo manifest.lkml é o lugar ideal para definir elementos compartilhados, como constantes, arquivos e dependências externas. Assim, seus arquivos LookML podem chamar constantes para evitar valores fixos direto no código.
Exemplo:
# manifest.lkml
constant: DEFAULT_CURRENCY {
value: "USD"
}
include: "views/**/*.view"
Reutilize Código com Snippets e Templates
Para lógicas SQL ou campos calculados que aparecem muitas vezes, crie snippets reutilizáveis. Se uma lógica de data aparece em vários lugares, por exemplo, extraia-a para um arquivo compartilhado e inclua onde precisar.
Exemplo:
dimension: month {
type: date
sql: DATE_TRUNC('month', ${order_date}) ;;
}
Se isso é usado com frequência, jogue em um arquivo como date_helpers.view.lkml e inclua nas views necessárias.
Aproveite o Git para Colaboração
Refatorar em equipes grandes exige um bom uso do Git. Crie branches separadas para cada tarefa de refatoração, use pull requests (PRs) para revisão e sempre teste no modo de desenvolvimento do Looker. Mensagens de commit claras são essenciais.
Exemplo:
git checkout -b refactor-base-views
# ... faça suas alterações ...
git commit -m "Refatora views base de pedidos e usuários"
git push origin refactor-base-views
Depois, faça o merge após a aprovação:
git checkout main
git merge refactor-base-views
Remova Campos e Explores Não Utilizados
Com o tempo, projetos acumulam itens esquecidos. Refatore identificando e limpando o que não é mais usado. Use o Content Validator do Looker para achar campos órfãos e referências quebradas, depois remova ou comente o que não serve mais.
- ✅ Use o Content Validator do Looker.
- ✅ Delete ou comente campos antigos.
- ✅ Arquive explores antigos em vez de apagar na hora.
Dica: Mantenha um changelog ou documentação de tudo que foi removido.
Otimize a Lógica SQL e a Performance
Durante a refatoração, fique de olho em:
- Joins redundantes.
- Expressões SQL que poderiam ser mais eficientes.
- Uso excessivo de tabelas derivadas (PDTs).
Use tabelas derivadas persistentes (PDTs) sempre que fizer sentido e garanta que índices e partições estejam bem configurados.
Automação e Ferramentas de Linter
Projetos LookML de grande porte se beneficiam demais de ferramentas automatizadas. O Looker IDE Validator ajuda com sintaxe e dependências, enquanto o Spectacles oferece testes e validação automatizada.
Ferramentas como essas pegam problemas como:
- Includes faltando.
- Dimensões não usadas.
- Joins ou explores quebrados.
- Inconsistências de estilo.
Documentação e Convenções de Nomenclatura
Manter nomes consistentes e documentar tudo é crucial. Dê um description: para cada campo e medida. Documente views base e estendidas. Um README em cada pasta principal explicando o conteúdo também ajuda muito.

Exemplo: Refatorando um Projeto Complexo
Antes: Todos os explores, views e joins em um único arquivo.
model: ecommerce {
explore: orders {
join: users {
sql_on: ${orders.user_id} = ${users.id} ;;
}
}
view: orders {
dimension: id { primary_key: yes }
measure: total_sales { type: sum; sql: ${TABLE}.amount ;; }
}
view: users {
dimension: name {}
}
}
Depois: Estrutura organizada e código reutilizado.
Estrutura de Arquivos:
/models/ecommerce.model.lkml
/views/orders.view.lkml
/views/users.view.lkml
/views/base/base_orders.view.lkml
ecommerce.model.lkml:
include: "views/**/*.view"
explore: orders {
extends: [base_orders]
}
base_orders.view.lkml:
view: base_orders {
dimension: id { primary_key: yes }
measure: total_sales { type: sum; sql: ${TABLE}.amount ;; }
}
orders.view.lkml:
view: orders {
extends: [base_orders]
dimension: region { sql: ${TABLE}.region ;; }
}
O resultado é uma estrutura mais limpa, fácil de manter e escalar, com código reutilizado via extensões.
Testando Após a Refatoração
Depois de refatorar, a fase de testes é crucial:
- Use o modo de desenvolvimento do Looker para validar todos os explores.
- Execute o Content Validator para garantir que dashboards e Looks não quebraram.
- Utilize o LookML Validator para pegar erros de sintaxe ou dependências.
- Comunique as mudanças para o time de analytics.

Benefícios da Refatoração de LookML
Refatorar seu LookML traz um monte de vantagens, desde código mais organizado até a colaboração turbinada. Em resumo, é um investimento que compensa demais para a saúde a longo prazo dos seus projetos de dados.

Conclusão
Mantenha seu LookML modular e organizado. Refatore aos poucos, sem tentar fazer tudo de uma vez. Teste e valide cada mudança. Use Git, Content Validator e LookML Validator com frequência.
Siga as convenções de nomenclatura e mantenha a documentação em dia. Com essas práticas, seus projetos em Looker se tornarão mais robustos, escaláveis e fáceis de gerenciar.
chat_bubble Comentários (0)
Nenhum comentário ainda. Seja o primeiro a comentar!
Deixe seu comentário