SIQL — NL-to-SQL
O NL-to-SQL do SIQL transforma uma pergunta escrita em português num SELECT válido sobre as tabelas certas do lakehouse, ancorado na ontologia e no knowledge graph da plataforma. Escrever SQL para um lakehouse que você não conhece de cor significa abrir o catálogo, adivinhar nomes de tabela e torcer. Aqui você digita "mostre transações suspeitas em 2024" e recebe o SQL pronto — com trilhos de governança de fábrica: somente leitura, sempre limitado, restrito ao escopo semântico resolvido e nunca executado automaticamente. Você revisa, copia e decide.
Onde fica: aba NL-to-SQL em . Requer a permissão SIQL:ADMIN.
Como funciona
O caminho da pergunta ao SQL, em nove etapas:
- A pergunta é quebrada em termos relevantes (as palavras vazias são descartadas).
- Cada termo é casado com os conceitos da ontologia — só entram correspondências com pontuação a partir de 0,6.
- Os conceitos resolvem, no grafo semântico, as tabelas do escopo; a união de todas elas forma a lista de "Tabelas Resolvidas".
- O modelo de linguagem recebe a pergunta acompanhada dessa lista fechada — e só pode usar as tabelas que estão nela.
- A resposta volta estruturada, com o SQL, a confiança, a explicação e as tabelas efetivamente referenciadas.
- O SQL passa pela validação de somente leitura — qualquer comando de escrita, DDL ou múltiplos comandos na mesma resposta é rejeitado.
- Um LIMIT é injetado ou ajustado para o teto configurado.
- A plataforma confere que as tabelas referenciadas estão contidas nas Tabelas Resolvidas; fora disso, a resposta é descartada.
- A geração fica registrada na auditoria.
Em nenhum momento o sistema executa o SQL — você copia e cola onde quiser.
Trilhos de segurança
- Somente leitura — INSERT, UPDATE, DELETE, DROP, ALTER, MERGE, TRUNCATE, CREATE, GRANT, REVOKE, REPLACE, UPSERT, LOAD, COPY, EXECUTE, EXEC e CALL são rejeitados, assim como qualquer resposta com mais de um comando.
- Limite rígido —
LIMITsempre presente; o teto é configurável emdatta.siql.semantic.nl-to-sql.max-limit(padrão 10 000 linhas). - Escopo fechado — se o SQL referenciar tabela fora da lista resolvida, a resposta é rejeitada e marcada como degradada (
degraded=true). - Limite de uso — 30 gerações por hora por usuário, controladas por um contador distribuído com fallback em memória.
- Auditoria exaustiva — os eventos
SIQL.NL_TO_SQL_*cobrem gerado, rejeitado, falha de interpretação da resposta, modelo degradado, fora-de-escopo, bloqueio por limite de uso e nenhuma tabela resolvida. - Privacidade — o prompt não inclui dados do usuário, apenas a pergunta e o esquema/ontologia. Qualquer dado pessoal que apareça na explicação é mascarado antes de ser exibido.
Usando a aba NL-to-SQL
- Abra e clique na aba NL-to-SQL.
- Digite a pergunta no campo de texto — por exemplo, "top 10 processos por valor".
- Clique em Gerar SQL.
- O resultado aparece com o SQL em destaque e etiquetas com a confiança, o custo estimado e as entidades resolvidas:
SELECT * FROM hive.public.processos ORDER BY valor DESC LIMIT 10- Revise. Se estiver bom, clique em Copiar SQL — o SQL vai para a área de transferência e não é executado pela tela.
- Execute no cliente que preferir (Trino, DATTAX) quando e como quiser.
O SQL gerado é dialeto Trino 480.
O que esperar do resultado
| Pergunta | Resultado |
|---|---|
| "mostre transações em 2024" | SELECT * FROM hive.public.transacoes WHERE data >= DATE '2024-01-01' LIMIT 1000 |
| "top 10 processos por valor" | SELECT * FROM hive.public.processos ORDER BY valor DESC LIMIT 10 |
| "clientes de são paulo" | SELECT * FROM hive.public.clientes WHERE estado = 'SP' LIMIT 1000 |
| "total por mês" | Pergunta ambígua — o SIQL escolhe uma das tabelas resolvidas |
| "apagar registros antigos" | Rejeitada — comando de escrita é bloqueado por projeto |
A meta de acurácia é de pelo menos 75% num conjunto de 20 perguntas representativas do domínio. Nos cinco exemplos acima, a acurácia observada foi de 4 em 5 (80%) — contando o bloqueio da última como o comportamento correto. É justamente por isso que a revisão humana faz parte do fluxo: a confiança e a explicação são exibidas para apoiar a sua decisão.
Solução de problemas
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| A geração é bloqueada por limite de uso | Mais de 30 gerações na última hora | Aguardar a próxima janela de uma hora |
| Resposta marcada como degradada | O SQL referenciou tabela fora do escopo resolvido, ou a resposta do modelo não pôde ser interpretada | Reformular a pergunta com termos mais próximos dos conceitos do domínio |
| Nenhuma tabela resolvida | Os termos da pergunta não casaram com a ontologia (pontuação abaixo de 0,6) | Enriquecer a ontologia/glossário do domínio ou usar o vocabulário do catálogo |
| SQL correto mas incompleto | Pergunta ambígua | Adicionar contexto: "por mês de 2024, na tabela de transações" |
A geração também está disponível por API para integrações administrativas, com a mesma permissão e o mesmo limite de 30 chamadas por hora — veja a referência de API.