No post de hoje, mostrarei como é possível gerar extrato/relatório a partir de consulta SQL na base em tempo real ou preservada. É importante que você conheça de linguagem SQL, pois alguns conceitos serão utilizados nessa geração de relatórios.
O que é o aplicativo Brsql?
Trata-se de um aplicativo desenvolvido pelo CEPEL para acesso à base do SAGE via SQL. O aplicativo brsql executa consultas sql genéricas sobre bases em tempo real (MCDs) ou preservadas (XDR).
Como usar o aplicativo Brsql?
brsql [-c conexao] [-r <servidor[:porta]] [-s <query>] [-v] [-q] [--csv][--json] [--html] [--count] [--meta]
Onde:
-c <conexao>
: A conexão tem o formato path|conta[@contexto], onde:
– path: caminho absoluto da bd em xdr;
– conta: conta sage para conexão (default: $USER);
– contexto: contexto das mcds (default: $CONTEXTO).
-r <servidor:[porta]>
onde:
– servidor: nome ou IP do servidor SAGE remoto;
– porta: porta de conexão (default: 8808).
-s <query sql>
;
-v
: modo verbose;
-q
: modo quiet;
--csv
: saída como arquivo csv na stdout;
--json
: saída como arquivo json na stdout;
--html
: saída como arquivo html na stdout;
--count
: retorna somente o número de registros encontrados;
--meta
: retorna somente json com os nomes das colunas e o número de registros encontrados.
Sem parâmetros, o brsql considera, como default, uma conexão com a base tempo real em execução na própria $USER e no contexto $CONTEXTO. Se a query sql (parâmetro -s) não é informada, abre prompt BRSQL> e aguarda comandos sql a serem executados. Por default, o brsql exibe os resultados de forma tabular.
Para o nosso exemplo vamos utilizar a saída como arquivos csv na stdout do terminal, --csv
.
Exemplo: Relacionar todas as ligações de aquisição (lia), com todos os pontos de medição analógica (pas), e seus endereços físicos (paf), caso existam, tanto de aquisição como de distribuição e o relacionamento do ponto analógico com possíveis distribuições de dados associadas (pad), se também existirem. No caso, conforme se mostra no conjunto relacional, poderemos ter extratos de pontos analógicos sem nenhuma relação com endereços físicos e/ou distribuição da dados, porém para todo ponto analógico deveremos ter uma ligação de aquisição definida.
Montando nosso SQL para rodar sobre o brsql, usaremos as instruções INNER JOIN (intersecção de lia e pas) primeiro conjunto e LEFT JOIN (todo pas independente de ter ou não paf e/ou pad definido) segundo conjunto traduzindo o que esperamos do conjunto relacional exemplificado de forma agrupada.
SELECT l.id id_lia, l.nome lia_nome, l.opera lia_opera, pa.id id_pas,
pa.nome pas_nome, pf.id end_aquis, pd.idtdd id_tdd, pf1.id end_dist
FROM pas pa
INNER JOIN lia l ON pa.idlia = l.id
LEFT JOIN paf pf ON pa.a_paf = pf.br_rowid
LEFT JOIN pad pd ON pa.br_rowid = pd.a_pas
LEFT JOIN paf pf1 ON pd.a_paf = pf1.br_rowid
Com o SQL estruturado vamos passar o mesmo no brsql seguindo as orientações do comando, em caso de dúvida comando brsql -h (help).
brsql -s "SELECT l.id id_lia, l.nome lia_nome, l.opera lia_opera, pa.id, id_pas,
pa.nome pas_nome, pf.id end_aquis, pd.idtdd id_tdd, pf1.id end_dist
FROM pas pa
INNER JOIN lia l ON pa.idlia = l.id
LEFT JOIN paf pf ON pa.a_paf = pf.br_rowid
LEFT JOIN pad pd ON pa.br_rowid = pd.a_pas
LEFT JOIN paf pf1 ON pd.a_paf = pf1.br_rowid"
brsql -s "SELECT l.id id_lia, l.nome lia_nome, l.opera lia_opera, pa.id id_pas,
pa.nome pas_nome, pf.id end_aquis, pd.idtdd id_tdd, pf1.id end_dist
FROM pas pa
INNER JOIN lia l ON pa.idlia = l.id
LEFT JOIN paf pf ON pa.a_paf = pf.br_rowid
LEFT JOIN pad pd ON pa.br_rowid = pd.a_pas
LEFT JOIN paf pf1 ON pd.a_paf = pf1.br_rowid" --csv
Para direcionar a saída do terminal STDOUT
para um arquivo use:
brsql -s "SELECT l.id id_lia, l.nome lia_nome, l.opera lia_opera, pa.id id_pas,
pa.nome pas_nome, pf.id end_aquis, pd.idtdd id_tdd, pf1.id end_dist
FROM pas pa
INNER JOIN lia l ON pa.idlia = l.id
LEFT JOIN paf pf ON pa.a_paf = pf.br_rowid
LEFT JOIN pad pd ON pa.br_rowid = pd.a_pas
LEFT JOIN paf pf1 ON pd.a_paf = pf1.br_rowid" --csv > arquivo.csv
Um ponto interessante nesse extrato é que podemos investigar o estado da ligação (lia.opera), quando zero, a aquisição não está fechada. Também é possível gerar uma boa relação para um processo de análise entre sites N2/N3 para validação dos endereços.
Conhecendo as entidades do SAGE a estruturação de outros SQL lhe ajudará a montar outros extratos para análise específicas, tais como digitais, comandos entre outros. Usando saídas JSON, faça intercâmbio de informações integrando com outros sistemas.
Você tem dificuldade em SQL? Experimente estudar através desse site: w3schools
Agora como forma de ampliar seus conhecimentos, tente produzir um SQL que retorne os pontos digitais inválidos seguindo o mesmo princípio. Caso tenha dúvida dos nomes dos campos, recomendo utilizar outro comando de outra aplicação do SAGE chamado Tabular.
Use sua imaginação e seja feliz.
Espero ter contribuído com você em mais uma utilidade.