Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pesquisar formato para guardar consultas #518

Open
turicas opened this issue Mar 22, 2021 · 1 comment
Open

Pesquisar formato para guardar consultas #518

turicas opened this issue Mar 22, 2021 · 1 comment

Comments

@turicas
Copy link
Owner

turicas commented Mar 22, 2021

Uma das dificuldades atuais em criar novos paineis facilmente na plataforma (com gráficos a partir dos dados vindos dos datasets) reside no fato de termos que escrever as consultas manualmente e criar views específicas para serví-las. Se existisse uma forma de salvar no banco de dados os filtros/agrupamentos de uma consulta (ex: de um QuerySet do Django), seria fácil criar uma view que recuperasse essas "perguntas" salvas, fizesse a desserialização dos filtros/agrupamentos, executasse as operações no banco e então serializasse os registros resultantes em JSON.
Poderíamos simplesmente adotar alguma ferramenta de BI (como o PowerBI e o QlikView), mas isso vai na contramão dos valores do projeto: não são software livre, dificultam o download dos dados por trás dos gráficos etc. Testei bastante o Metabase, mas não vi uma maneira simples de se fazer integração (o custo da integração talvez seja o mesmo ou maior de que aproveitar algo já implementado para o Django, com algumas eventuais personalizações para nossas necessidades).
Creio que o ideal, para resolver esse problema de maneira mais consistente, seria adotar algum padrão de filtros/agrupamentos em datasets que pudesse ser serializável/desserializável para JSON, algo como uma DSL genérica para consultas em datasets (SQL parece ser essa DSL, mas requer um parser mais complexo que algo baseado em JSON - talvez o moz-sql-parser possa resolver). Qualquer ferramenta de BI ou análise de dados deve utilizar algum formato interno - a pergunta é: existe algum formato aberto para isso? O mais perto que cheguei de encontrar algo nesse sentido foi na padronização de filtros para query strings em APIs, como em:

O problema de todas as abordagens da lista acima é a dificuldade de trabalhar com agrupamentos em consultas em múltiplas tabelas (como um simples SELECT coluna, COUNT(*) FROM tabela GROUP BY coluna).

O Microsoft PowerBI suporta múltiplos datasets e agrupamentos "por baixo dos panos", no seu JSON verborrágico que é trafegado entre o front e o backend.

GraphQL poderia resolver, mas talvez possa adicionar complexidade desnecessária também. Hasura.io também é super interessante.

Estou pensando em algo como pegar essa consulta:

SELECT
	cnpj
FROM empresa
WHERE
	uf = "SP"
	AND municipio != "SAO PAULO"
ORDER BY cnpj;

ou mesmo esse QuerySet:

Empresa.objects.filter(uf="SP").exclude(municipio="SAO PAULO").order_by("cnpj").values_list("cnpj", flat=True)

e transformar em algo como:

{
  "select": [
    "empresa.cnpj"
  ],
  "filter": [
    [
      "empresa.uf",
      "eq",
      "SP"
    ],
    [
      "empresa.municipio",
      "neq",
      "SP"
    ]
  ],
  "order": [
    "empresa.cnpj"
  ]
}
@fabriziomello
Copy link

No PostgreSQL existe a libpg_query para efetuar o parser SQL corretamente: https://github.com/pganalyze/libpg_query

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants