DATTABI — Análise Estatística com R/CRAN
Previsão de séries, modelos estatísticos, testes de hipótese: há análises que só o ecossistema R resolve bem — e que antes exigiam exportar os dados para fora da plataforma. No DATTABI você aplica qualquer função, procedure ou pacote do CRAN diretamente sobre os datasets conectados, sem que o DATTA precise reescrever ou encapsular cada função em DATTAX: o R é um motor de análise nativo, você escreve R idiomático e o resultado é materializado como qualquer outro dataset da plataforma.
Status de implementação: o motor de execução R já existe; partes da interface descritas aqui (a aba "Análise R" e o painel de pacotes) ainda são roadmap. Este guia descreve a arquitetura-alvo.
Como a execução acontece
A plataforma mantém um conjunto de processos GNU R com Rserve (o binário que serve sessões R por socket TCP) e conversa com eles pelo cliente Java (REngine/RserveCli). O ambiente R gerenciado cuida de:
- Isolamento por worker: um processo R por worker — uma falha em R nunca derruba os demais nem a plataforma.
- Paralelismo: cada execução dispara N sessões R em paralelo (uma por fatia do dataset) usando concorrência estruturada do Java 25. Datasets grandes são particionados pela coluna que você definir (hash, faixa ou auto-shard).
- Bibliotecas paralelas de R já instaladas:
parallel,foreach,doParallel,future,data.table,Rcpp. - Transferência de dados: data frames Java ↔ R por mapeamento direto, sem serialização JSON; datasets grandes trafegam em blocos (streaming).
- On-premises: imagens
datta/r-runtime:<versão>, baseadas emr-base+ Rserve, rodam dentro da sua instalação — nada sai para a nuvem.
R puro, sem tradução intermediária
Você escreve R de verdade, importando qualquer pacote CRAN habilitado:
library(forecast)
# 'dataset' é injetado pelo DATTABI como data.frame
modelo <- auto.arima(dataset$valor)
previsao <- forecast(modelo, h = 12)
result <- data.frame(
mes = seq.Date(from = max(dataset$data) + 30, by = "month", length.out = 12),
previsto = as.numeric(previsao$mean)
)
resultNão há tradução DATTAX intermediária: o bloco LANG R { ... } é reconhecido e repassado textualmente ao motor R, anotado com os datasets de entrada e o tipo de saída esperado. Isso libera o ecossistema completo do CRAN (tidyverse, caret, xgboost, forecast, prophet, survival, igraph, sf, rstan, tm e os demais pacotes habilitados).
A aba Análise R (interface — roadmap parcial)
No editor de dataset/dashboard, a aba "Análise R" reúne:
- Editor de código R (Monaco, modo R) com auto-complete de
dataset$<coluna>. - Painel dos pacotes CRAN instalados, com a ação Solicitar pacote (sujeita a aprovação do administrador).
- Seletor multi-fonte dos datasets de entrada.
- Tipo de saída:
data.frame→ dataset materializado; gráficoggplot2em SVG (renderizado sem interface gráfica); modelo.rds; valor escalar → métrica. - Executar (preview) — roda sobre uma amostra de 1.000 linhas e mostra o resultado na hora.
- Materializar — enfileira a execução no agendador de atualizações.
- Copilot R — a IA gera o script a partir de uma descrição em português, usando o schema do dataset e os pacotes disponíveis.
R como etapa de um pipeline DATTAX
Dentro de um pipeline DATTAX, o bloco LANG R { ... } insere uma etapa R entre transformações — e o resultado segue para a materialização como qualquer dataset:
DATASET vendas_mensal =
FROM JDBC "Oracle_Vendas"
|> GROUP BY ano, mes
|> AGG total = SUM(valor)
|> LANG R {
library(forecast)
result <- data.frame(mes = dataset$mes, total = dataset$total,
tendencia = ma(dataset$total, order = 3))
result
}
|> MATERIALIZE AS ICEBERG TABLE "vendas_com_tendencia";O bloco é uma transformação opaca para o interpretador: não é validado pela gramática DATTAX, apenas repassado ao motor R. Para bases grandes, a execução pode ser particionada com LANG R PARTITION BY {coluna} CONCURRENCY {N} { ... }, que divide o dataset em N fatias processadas em paralelo, com um bloco REDUCE { ... } opcional para consolidar (sem ele, os resultados são empilhados com rbind).
Materialização dos resultados
O data.frame retornado é tratado como qualquer dataset DATTAX: a plataforma escolhe o destino — Iceberg (padrão tabular), Neo4j (colunas from_id / to_id viram nós e arestas) ou OpenSearch (texto/full-text). Para sobrescrever a escolha, use a forma explícita MATERIALIZE AS NEO4J DATABASE "..." LABEL "..." KEY "...".
Pacotes CRAN sob controle
- Catálogo: o administrador gerencia os pacotes habilitados no console do ambiente R (
/configurar/r-runtime). - Instalação: por espelho CRAN local (
miniCRAN) dentro da instalação — funciona 100% offline. O administrador aprova, a instalação roda em todos os workers e o catálogo é atualizado. - Versionamento: cada pacote tem versão fixada (resultados reproduzíveis); upgrades exigem aprovação.
- Bloqueio: o time de segurança mantém uma lista negra de pacotes inseguros (execução arbitrária, rede irrestrita, compilação inline).
Segurança, permissões e auditoria
- Ambiente isolado por worker: perfil restritivo de chamadas de sistema, sem saída de rede (exceto o espelho CRAN interno e o cache da plataforma), sistema de arquivos somente leitura fora da área temporária — limpa a cada execução — e limites de CPU e memória.
system(),download.file()externo elibrary()de pacotes não aprovados são bloqueados. - Permissões (Diretrizes do Projeto §13):
DATTABI_R_EXECUTE(executar),DATTABI_R_PACKAGE_REQUEST(solicitar pacote) eR_RUNTIME_ADMIN(aprovar instalações e bloqueios). - Auditoria: cada execução emite
DATTABI.R.EXECUTEDcomactor,datasetIds,packagesUsed,rowsIn/Out,durationMs,peakMemoryMbeoutcome, mascarando strings que casem com padrão de credencial.
Cache, observabilidade e operação
- Cache (Diretrizes do Projeto §1): resultados de execuções determinísticas (mesmo script, mesmos datasets) ficam no cache de duas camadas da plataforma sob
datta:dattabi:r:result:{hash}com TTL — repetir a análise responde na hora, sem executar de novo. - Observabilidade (Diretrizes do Projeto §11): cada execução gera o span
r.executecomr.script_hash,r.packages,r.rows_in/out,r.partitionser.runtime_version; os logs do R chegam ao OpenSearch (otel-logs-*) correlacionados portrace_id. - Console (
/configurar/r-runtime, Diretrizes do Projeto §8): workers, pacotes, fila de jobs, logs por execução e métricas de uso por usuário.