basedosdados / backend

Backend da BD
https://backend.basedosdados.org/graphql
GNU General Public License v3.0
8 stars 1 forks source link

feat: cria novo campo em coluna para automatizar update em pipelines #621

Closed laura-l-amaral closed 2 months ago

laura-l-amaral commented 2 months ago

Resumo:

Add date coverage reference: para que a gente consiga saber como descobrir a cobertura temporal da tabela apenas usando os metadados que estão no django


Detalhamento Hoje em dia o lag de bdpro é passado hard coded no código de cada pipeline. Isso significa que para cada pipeline precisamos preencher os parametros da task de update_metadata (imagem).

Como reformulei o flow que materializa as tabelas no BQ para incluir download o csv que será dispnibilizado para o usuário, queria aproveitar e colocar essa task que atualiza os metadados junto. Assim a gente garantiria que toda vez que uma tabela fosse atualizada, os metadados também atualizariam logo em seguida.

O problema é: o único local que temos as informações necessárias para atualizar os metadados é o próprio código de pipeline, não temos em nenhum lugar no backend todas as informações necessarias para aplicar esse lag (nos dados e no backend).

Atualmente temos o seguinte campos nessa task que não tem nenhuma correspondência com o backend:

- date_column_name: Um dicionário especificando a unidade temporal e nome das colunas usadas para extrair a cobertura temporal. 
  Aceita como chaves do dicionario :
    {"year", "month"}, 
    {"year", "quarter"}, 
    {"date"}
  Usa esse dicionário para saber como combinar colunas para consultar a cobertura temporal dos dados. Exemplo: MAX(DATE(ano_referencia,mes_referencia,1))

Solução proposta:

Evidências

https://github.com/basedosdados/backend/assets/5381250/56dad868-098f-4f60-a7d6-7cb589601aa3

rdahis commented 2 months ago

Uma solução mais coesa seria:

Observações:

laura-l-amaral commented 2 months ago

@rdahis Pelo ponto que vc trouxe nas observações não acho que é uma solução funcional dahis, não é obrigatório que a cobertura temporal esteja no observation level. Exemplo: uma tabela tem como nível de observação uma proposição legislativa. A data de inclusão ou edição dessa proposição é uma caracteristica da proposição, por isso não deve estar no nível de observação. Ao mesmo tempo, é essa data que me informa a cobertura temporal da tabela, tem vários outros exemplos que são assim

rdahis commented 2 months ago

Hmm legal faz sentido. Iterando nisso, que tal então o campo datetime_range.unit ser uma chave estrangeira para column? O resto do argumento e properties fica igual.

laura-l-amaral commented 2 months ago

@rdahis por mim pode ser! conseguimos implementar isso rapido?

rdahis commented 2 months ago

Seguindo no #627.