Selo de estado:
Preview(teto atual do produto) · Curso ACD-330 — Dashboards: visuais, filtros, interações e design · Aula 10 de 12 · Atualizado em 2026-10-04.
Objetivo#
Ao final desta aula você vai decidir modo por frescor × custo.
Vídeo#
Identificador: acd-330-10-import-directquery-cache · Duração-alvo: 8 min · Tela: /dashboards.
Roteiro (capítulos):
- 0:00–1:30 — Import (snapshot) (
/dashboards/[id]) — refresh agendado, custo zero na visualização. - 1:30–3:00 — DirectQuery (ao vivo) (
/dashboards/[id]) — consulta ao vivo com cache, cobrança no cache-miss. - 3:00–4:00 — cache de consulta — por que a 2ª leitura costuma sair de graça.
- 4:00–5:15 — refresh incremental (
/dashboards/[id]) — recalcular só o período recente. - 5:15–6:30 — guarda de custo (FinOps) — teto de bytes faturáveis em toda consulta.
- 6:30–8:00 — o advisor e a decisão frescor × custo (
/dashboards/[id]) — o que ele sugere, e por que nunca troca por conta própria.
Conteúdo#
Dois modos, a mesma pergunta: frescor vale o custo?
Como no Power BI, todo dashboard tem um modo de dados. O ingestia.bi oferece dois: Import (o painel lê um snapshot materializado, com custo zero por acesso) e DirectQuery (o painel consulta a base ao vivo, com cache para reduzir custo). A decisão entre os dois não é estética — é uma troca explícita entre frescor (o quão atual o número precisa ser) e custo (quanto cada consulta ao BigQuery pesa no orçamento do workspace).
Como aparece no produto
Em Import, o motor materializa um snapshot em refresh agendado: até 1.000 linhas por gráfico e 5.000 por tabela, 1 crédito debitado por refresh, gravado no Storage (gzip) ou inline. A partir daí, abrir o painel não gera custo novo — você está lendo um arquivo já pronto, não reconsultando o datalake. O Δ% vs período anterior (aula 3) lê o snapshot bom anterior, sem nova consulta. É o modo padrão para painéis executivos que não precisam de tempo real.
Em DirectQuery, o painel consulta a base a cada visualização — mas com um cache de 10 minutos (Redis) entre o painel e o BigQuery: a cobrança só acontece no cache-miss (a primeira leitura depois do cache expirar); leituras dentro da janela de 10 minutos saem do cache, sem custo novo. Se um widget falhar, ele vira um card de erro sem derrubar o restante do painel. Sem Redis configurado, o cache cai num fallback em memória (não compartilhado entre instâncias) — ainda funciona, só perde o compartilhamento entre servidores.
O refresh incremental ataca um problema específico do Import: recalcular anos de histórico todo santo dia é caro e lento quando só os últimos dias realmente mudaram. Ativado por visual, ele recalcula só a janela recente (recentDays, no fuso do painel) — mas a elegibilidade é restritiva: o motor só assume o caminho incremental quando garante que o resultado é idêntico ao de um refresh completo (mesmas linhas, mesma ordem); na menor dúvida, ele faz o refresh completo por segurança do número.
Em qualquer modo, toda consulta passa por uma guarda de custo: maximumBytesBilled (1 GiB por padrão) limita o que uma única consulta pode faturar, maxRows é travado em 50.000 (nunca ilimitado), e existe um custo mínimo por consulta (10 MB) convertido para reais. Isso é o que torna o modo DirectQuery seguro de habilitar sem medo de uma consulta fugir do controle.
Para ajudar na decisão entre Import e DirectQuery, o produto tem um advisor: ele compara o padrão de uso e o orçamento do workload e sugere o modo mais adequado para aquele painel especificamente — mas a decisão final é sempre sua, porque o advisor nunca troca o modo por conta própria. O mesmo mecanismo foi testado em volumes sintéticos de 10 milhões, 100 milhões e 1 bilhão de linhas (gerador determinístico, percentis calculados de forma consistente) para garantir que a recomendação não quebra em escala — a execução real desses volumes em nuvem de produção é Preview.
Exemplo na Aurora Varejo
O painel "Comercial — Aurora" (executivo, atualizado uma vez por dia) é um bom caso de Import: refresh agendado de madrugada, custo zero durante o dia inteiro de consultas da diretoria. Um painel operacional de "pedidos em aberto agora", por outro lado, pede DirectQuery — mesmo pagando o cache-miss ocasional, o frescor de poucos minutos vale o custo. Ative o refresh incremental na linha mensal de Receita (aula 4): o histórico 2024–2026 fica fixo, e só os últimos 7 dias são recalculados a cada refresh.
Erros comuns de design
- DirectQuery em painel executivo sem necessidade. Se o número só precisa ser de "ontem", Import é mais barato e igualmente útil — reserve DirectQuery para o que realmente precisa de minutos, não de dias.
- Confiar no cache como garantia de custo zero. Fora da janela de 10 minutos, a próxima leitura é cache-miss e cobra de novo — o cache reduz custo, não o zera.
- Ignorar a sugestão do advisor sem entender o motivo. O advisor nunca decide por você, mas ignorar a recomendação sem saber por que ela foi feita é desperdiçar a análise.
- Ativar incremental em visual que não qualifica. Se a consulta não é particionável por período e ordenada ascendentemente, o motor cai para full de qualquer forma — ativar o toggle não força o incremental contra a segurança do número.
- Achar que o snapshot é tempo real. Em Import, o painel reflete a última atualização agendada — não o estado atual da base; isso é lembrado explicitamente no rótulo de frescor do painel.
Estado atual (Preview)
Rollups Gold/roteador semântico/refresh incremental (C07.4) e o advisor Import/DirectQuery com budgets por workload (C07.6) estão em Preview: a lógica (elegibilidade restritiva, identidade incremental==completo, advisor que nunca troca sozinho, budget fail-closed) é coberta por suíte determinística — mas a execução real desses mecanismos no BigQuery de produção, em escala, é NÃO MEDIDO nesta documentação. O motor de Import em si é GA-candidato, mas a execução end-to-end com BigQuery e billing reais não tem teste de integração — funcionamento em produção também é NÃO MEDIDO. Sem GCP configurado, a plataforma roda em modo demonstração (3 linhas fixas SP/RJ/MG), declarado como tal.
Aviso
maximumBytesBilled e maxRows valem em toda consulta, nos dois modos — é a guarda que faz DirectQuery seguro de habilitar sem supervisão manual de cada consulta.
| Pergunta | Modo recomendado |
|---|---|
| "O painel pode esperar até a próxima madrugada?" | Import |
| "Preciso do estado de agora, aceitando custo no cache-miss?" | DirectQuery |
| "Anos de histórico, só os últimos dias mudam?" | Import + refresh incremental |
| "Não sei qual escolher" | Consultar o advisor — ele sugere, você decide |
Faça você mesmo#
No workspace de treino Aurora Varejo (abra /dashboards no console):
- Abra o painel "Comercial — Aurora" e confirme que ele está em modo Import.
- Dispare um refresh manual e confirme, na auditoria, o débito de 1 crédito.
- Abra o painel de novo sem disparar refresh e confirme que não houve novo custo.
- Num painel de teste, mude o modo de um visual para DirectQuery e abra-o duas vezes em menos de 10 minutos — confirme que a 2ª leitura não gera custo novo.
- Ative o refresh incremental na linha mensal de Receita e confirme que o número bate com o do refresh completo.
- Consulte o advisor para o painel "Comercial — Aurora" e anote a recomendação (Import ou DirectQuery) e o motivo.
- Decida, com base na recomendação, se mantém o painel em Import ou muda — e registre por quê.
Você terminou quando: você sabe explicar, para esse painel específico, por que Import (ou DirectQuery) é a escolha certa, com o advisor consultado e a guarda de custo confirmada na auditoria.
Checagem rápida#
Três perguntas no final da aula, corrigidas no servidor. A aula só conta como concluída depois da checagem.
Documentação relacionada#
Capacidades ensinadas#
C07.4 · C07.6 — o selo exibido na aula é sempre o estado mais conservador entre as capacidades citadas; nada aqui é "GA".