Um Guia Prático sobre Convenções de Commits

Os commits são uma parte essencial do processo de desenvolvimento de software. Eles nos permitem rastrear as alterações feitas em um projeto e fornecem um histórico de tudo o que aconteceu. No entanto, nem todos os commits são úteis, tenho certeza que você já viu algumas mensagens de commits completamente inúteis… tenho certeza que você já comitou mensagens inúteis… rsrs.. admita… estamos entre amigos aqui ;).

O que são Conventional Commits?

Os Conventional Commits são uma convenção de nomenclatura para mensagens de commit. Eles seguem um formato específico, consistindo de um cabeçalho, um corpo opcional e um rodapé também opcional, separados por uma linha em branco. O cabeçalho é composto por um tipo, um escopo (opcional) e uma descrição concisa do commit.

A estrutura básica de um commit convencional é a seguinte:

Tipo(escopo opcional): descrição

Corpo opcional

Signed-by: fulano@fulano.com.br
Refs: #123

Tipos de Commits

Existem vários tipos de commits já convencionados, mas nada impede que você crie os seus pr´óprios tipos.

Aqui estão alguns dos tipos mais comuns:

  • feat: Usado para adicionar uma nova funcionalidade ao projeto.
  • fix: Usado para corrigir um bug ou problema existente.
  • docs: Usado para adicionar ou atualizar a documentação do projeto.
  • style: Usado para fazer alterações de formatação, como espaços em branco, indentação, etc.
  • refactor: Usado para fazer alterações no código que não adicionam uma nova funcionalidade ou corrigem um bug.
  • test: Usado para adicionar ou modificar testes no projeto.
  • chore: Usado para fazer alterações na configuração do projeto, scripts auxiliares, etc.

Usos e Benefícios

Ao adotar os Conventional Commits, você estabelece uma estrutura clara e consistente para seus commits. Isso torna mais fácil para você e outros desenvolvedores entenderem o propósito de cada commit e acompanhar as mudanças feitas ao longo do tempo.

Outro benefício é a possibilidade de integração com ferramentas de automação, como sistemas de integração contínua. Por exemplo, você pode configurar seu sistema de CI/CD para executar automaticamente testes e implantar seu código em diferentes ambientes com base nos tipos de commits.

Outro benefício é a geração automática de changelogs. Com base nas mensagens de commit, você pode gerar um log de alterações que lista todas as funcionalidades adicionadas, bugs corrigidos e outras alterações relevantes em cada versão do seu projeto.

E por fim, ao adotar um padrão de commits, você terá uma melhor comunicação entre os membros da equipe. Ao seguir a convenção, todos os desenvolvedores têm uma compreensão clara do que cada commit representa e podem colaborar de forma mais eficiente.

Conclusão

Não há motivos para não adotar o uso de Conventional Commits, trata-se de uma abordagem simples e eficaz para padronizar a forma como escrevemos nossos commits. Eles fornecem clareza, organização e facilidade de entendimento para o histórico de alterações de um projeto. Além disso, eles trazem benefícios adicionais, como integração com ferramentas de automação e geração automática de changelogs.

Portanto, se você ainda não está usando os Conventional Commits em seus projetos, considere adotá-los. Segundo um estudo realizado por mim com “migo” mesmo, as chances de dor de cabeça caem 50% só de utilizar padrões nos seus projetos ;).

Se quiser conhecer em mais detalhes, indico a leitura do site oficial:

Conventional Commits: A specification for adding human and machine readable meaning to commit messages.

No próximo post trarei um exemplo prático de como adotar esse padrão pode te ajudar no seu dia-a-dia.

Enquanto o próximo post não chega, dá uma olhada nos últimos 2 posts sobre Qualidade de dados:

Fechado!?

Abraço a todos, e até a próxima!

Qualidade de dados – Parte 2

No post anterior entramos bastante no campo teórico, com a intenção de esclarecer e desmistificar alguns termos e conceitos. Agora, vamos ver como colocar tudo o que vimos no post anterior em prática.

Se você não viu o post anterior… clique aqui, e leia ele primeiro, depois pode voltar pra cá =D!

Técnicas e ferramentas para Qualidade de dados

Perfil de dados (Data Profiling)

Data profiling é uma técnica para descoberta e investigação de problemas de qualidade de dados. É nessa etapa que você entende o “estado de saúde” dos seus dados.

– Data profiling envolve analisar uma ou múltiplas fontes de dados e coletar os metadados, traçar o perfil dos dados, ver valores faltantes, entender correlações entre atributos entre outras N possibilidades.

– O Data Steward(administrador de dados) usa os resultados para investigar a origem dos erros de dados

Inicialmente essa etapa era manual e muito morosa. Felizmente hoje temos ferramentas e bibliotecas em linguagens de programação que nos ajudam e são capazes de gerar uma perfil completo em segundos, ou minutos.

Análise e interpretação de dados (Data Parsing)

Data parsing é o processo de separação de entrada de dados complexas em campos separados. Isso também significa converter o dado em um tipo de dado diferente.

Exemplos:

– Converter um tipo de dado texto para numérico.
– Converter o nome completo ou endereço em campos separados.
– Converter HTML em plain text
– Converter um arquivo json em campos separados
– …

Padronização de Dados (Data Standardization)

Data standardization é o processo que converte o dado em um formato comum.

Enquanto no data parsing podemos quebrar um dado em mais de um campo para encontrar quem está fora do padrão, com data standardization colocamos esses dados fora do padrão, no padrão comum a todos.

Exemplos:

– Converter um telefone fora do padrão esperado:
– Entrada: 99999999999
– Saída: (99) 99999-9999
– Remover pontuação do CPF:
– Entrada: 999.999.999-99
– Saída: 99999999999
– Converter uma data fora do padrão esperado:
– Entrada: DD/MM/YYYY
– Saída: YYYY-MM-DD
– …

Resolução de identidade (Identity Resolution)

Trata-se de criar um único perfil de dados para uma entidade (cliente, fornecedor, funcionário…) contendo informações de diferentes fontes de dados.

Resolução de identidade é o processo que confere, valida e adiciona informação em um único e rico perfil de dados para uma pessoa, negócio ou outra entidade

Exemplos:

  • Imagine que uma empresa de serviços digitais tenha uma base de clientes com milhões de registros. A equipe de qualidade de dados descobre que muitos clientes possuem mais de uma conta na plataforma, por terem se cadastrado com nome, sobrenome e endereço de email diferentes. Com a resolução de identidade, a equipe une esses registros em um só, evitando que um mesmo cliente seja contabilizado várias vezes e melhorando a precisão da base de dados. 
  • Em um hospital, é necessária a integração de diversos sistemas para conseguir uma visão completa do histórico de saúde de um paciente. No entanto, o cadastro de pacientes nem sempre é consistente, com variações de nomes, números de documentos e datas de nascimento. Com a resolução de identidade, os diferentes registros de cadastro podem ser unificados, facilitando a gestão de informações e assegurando uma melhor gestão de saúde

Em resumo, essa etapa visa unificar diferentes fontes de dados com intuito de criar um perfil único e rico da entidade em questão.

Processo de Resolução de Identidade

A seguir os 5 principais passos no processo de Resolução de identidade.

  1. Identify (Identificar): Neste primeiro passo, você identifica todas as fontes de dados relevantes que contêm informações sobre as entidades que deseja resolver. Isso pode incluir bancos de dados internos, sistemas de CRM, Redes sociais, feeds de dados externos, entre outros. O objetivo é reunir todas as informações disponíveis sobre as entidades que serão tratadas durante o processo de resolução de identidade.
  2. Connect (Conectar): O passo de conectar envolve a criação de pontos de conexões entre os dados de diferentes fontes que se referem à mesma entidade. Isso pode ser feito identificando e associando chaves de identidade comuns, como números de identificação exclusivos, endereços de e-mail, números de telefone, endereço IP, padrões de tempo, etc. O objetivo é estabelecer relações entre os dados dispersos que se referem à mesma entidade.
  3. Match (Corresponder): Durante o passo de correspondência, os dados conectados através dos pontos de conexões são comparados e avaliados para identificar registros que se referem à mesma entidade, mesmo que possuam diferenças em termos de formatação, ortografia, abreviações, etc. Isso é feito usando técnicas de comparação de strings e algoritmos de correspondência que atribuem uma pontuação de semelhança entre os registros. O objetivo é encontrar correspondências precisas e confiáveis entre os dados conectados.
  4. Validate (Validar): Depois que os registros correspondentes são identificados, é importante validar a precisão e a integridade das correspondências encontradas. Isso pode envolver a verificação manual das correspondências para garantir que não haja erros ou falsos positivos. Além disso, também é importante validar a qualidade dos dados de cada fonte que está sendo conectada para garantir que sejam confiáveis e precisos. O objetivo é garantir que as correspondências identificadas sejam válidas e representem com precisão as entidades em questão.
  5. Activate (Ativar): O passo final é ativar as correspondências identificadas e validadas, o que pode incluir a consolidação dos registros correspondentes em um único registro mestre ou a atualização de sistemas e bancos de dados com as informações consolidadas. O objetivo é garantir que as correspondências identificadas sejam utilizadas de forma eficaz e que as informações consolidadas sejam disponibilizadas para uso em diferentes aplicativos e processos de negócios.

Esses cinco passos trabalham juntos para realizar com sucesso o processo de resolução de identidade, garantindo que as informações dispersas sobre as entidades sejam conectadas, correspondidas, validadas e ativadas de forma precisa e confiável.

Ligação de dados (Data Linkage):

Data linkage, também conhecido como record linkage, ou simplesmente ligação de dados, refere-se ao processo de conectar ou associar conjuntos de dados distintos que se referem à mesma entidade ou evento, para criar uma visão mais completa e integrada das informações.

Mas não se engane, apesar de muito parecidos, Identity resolution e Data Linkage tem propósitos diferentes…

Exemplos:

– Em um país como o Brasil, onde há muitas informações sobre as eleições em diferentes bases de dados, é possível utilizar o Data Linkage para unificar essas informações e gerar análises mais precisas. Por exemplo, cruzando informações de votos em diferentes eleições, é possível identificar padrões políticos de regiões e faixas etárias, contribuindo para análises mais precisas e fundamentadas. 

– Em empresas que lidam com muitas fontes de dados, o Data Linkage é essencial para identificar oportunidades de negócio e segmentar clientes. Por exemplo, uma empresa de seguros pode cruzar informações de clientes que já sofreram acidentes ou sinistros com informações sobre características do veículo ou comportamento de direção, gerando perfis de risco e permitindo ajustes de preço e cobertura mais precisos.

Resolução de identidade x Data Linkage

Embora os termos “data linkage” (ligação de dados) e “identity resolution” (resolução de identidade) estejam relacionados e frequentemente usados em conjunto, eles se referem a aspectos ligeiramente diferentes do processo de integração e análise de dados:

  1. Data Linkage (Ligação de Dados):
    • A ligação de dados é o processo de conectar ou associar conjuntos de dados distintos que se referem a entidades ou eventos semelhantes, mas não necessariamente idênticos.
    • O objetivo principal da ligação de dados é criar conexões entre diferentes fontes de dados para criar uma visão mais completa e integrada das informações.
    • Isso pode envolver a identificação de chaves de identidade comuns entre os conjuntos de dados e a combinação dos dados com base nessas chaves.
    • A ligação de dados não se concentra necessariamente na resolução de duplicatas ou na identificação de registros correspondentes, mas sim em criar associações entre os dados dispersos.
  2. Identity Resolution (Resolução de Identidade):
    • A resolução de identidade é um subconjunto da ligação de dados que se concentra especificamente na identificação e resolução de registros duplicados ou correspondentes em diferentes fontes de dados.
    • O objetivo principal da resolução de identidade é identificar registros que se referem à mesma entidade ou indivíduo, mesmo que esses registros possam ter diferenças em termos de formatação, ortografia, abreviações, etc.
    • Isso envolve a comparação de registros com base em chaves de identidade comuns e a aplicação de algoritmos de correspondência para determinar a similaridade entre os registros.
    • A resolução de identidade resulta na consolidação de registros correspondentes em um único registro mestre, eliminando duplicatas e garantindo a integridade dos dados.

Em resumo, enquanto a ligação de dados se refere à conexão de conjuntos de dados distintos para criar uma visão integrada dos dados, a resolução de identidade é um aspecto específico desse processo que se concentra na identificação e eliminação de registros duplicados ou correspondentes.

Limpeza de dados (Data Cleansing):

Limpeza de dados é o processo de resolução de dados corrompidos, imprecisos, incompletos ou irrelevantes.

Esse processo se baseia nas etapas anteriores utilizando o data parsing, data standartization, identity resolution e data linkage.

A prática recomendada para qualidade de dados é determinar a origem dos erros, e eliminar a causa raíz.

Etapas da limpeza de dados:

– Identificar os campos de dados críticos
– Isso servirá para garantir que nosso tempo não seja gasto com dados sem muita relevância para o negócio

– Coletar os dados e resolver os problemas encontrados:
– Remover valores duplicados
– Resolver valores vazios
– Parsear e padronizar os dados.

– Revisar e melhorar

Enriquecimento de dados (Data Enhancement)

Data Enrichment é um processo de adicionar informações a uma base de dados existente, com o objetivo de enriquecê-la e torná-la mais útil para análises e tomadas de decisão. Por exemplo, ao adicionar informações demográficas, socioeconômicas e de comportamento do consumidor a uma base de dados de vendas, é possível criar segmentações mais precisas de clientes para direcionar campanhas de marketing.

Monitoramento e Inspeção (Data Inspection and Monitoring)

O processo de inspeção e monitoramento de dados talvez seja um dos mais subestimados dentro da qualidade de dados. Ele visa o aprimoramento contínuo, mostrando a saúde dos dados ao longo do tempo.

É interessante criar KPI’s para qualidade de dados. Dessa forma temos um compromisso com a qualidade, temos como medir nosso progresso e saber se o ROI (Retorno sobre o Investimento) está sendo positivo.
Sem um programa de monitoramento e um KPI para alcançar, a qualidade tende a cair.

Resumindo tudo em um passo a passo:

Step 1: Definir as metas de melhoria da qualidade de dados.

Etapa muito subestimada por muitos, mas é preciso investir tempo nessa etapa com o objetivo de definir o que exatamente queremos atingir com a melhoria na qualidade dos dados. É preciso saber também quais os processos de negócio serão impactados com o programa. A qualidade de dados não pode ser só um hype, ela tem que ter um objetivo muito claro e bem definido.

É preciso estar em alinhamento com o proprietário dos dados, pois será ele o responsável pela aprovação das iniciativas.

Daqui já podem sair as regras de qualidade de dados.

Step 2: Perfil de dados (Data Profiling):

Aqui será feito uma avaliação dos dados pra entender o cenário atual de saúde dos dados, e entender como está a qualidade em relação as dimensões da qualidade de dados.

Step 3: Conduzir uma avaliação da qualidade de dados:

Nessa etapa será avaliado o resultado do perfil de dados, com os objetivos que foram definidos no Step 1. Dessa avaliação surgirão os problemas que precisaremos resolver no step seguinte.

Um ponto importante é que aqui devemos avaliar a causa raíz do problema, para que possamos resolver o problema uma única vez.

Utilizar a técnica dos 5 porquês pode ser muito útil. Se você não conhece essa técnica, sugiro que leia este artigo.

Step 4: Resolver problemas de qualidade de dados:

Aqui é onde faremos o plano e a execução das melhorias.

Única premissa aqui, é que o plano deve cobrir todos os gaps encontrados na etapa anterior.

Importante definir as pessoas que executarão cada item do plano, e quando os itens serão executados.

Importante listar no plano tudo aquilo que for relevante para a execução do plano: treinamentos, budget, contratações, etc.

Este é um passo bem longo e importante pois podemos ter mudanças drásticas, como criação de novos times, alterações em sistemas, criação e/ou mudanças de processos, treinamentos…

Step 5: Monitorar e controlar:

Último mas não menos importante, é preciso monitorar a qualidade de dados, baseado sempre nas regras de qualidade de dados que foram levantadas no passo 1.

De tempos em tempos, é preciso reavaliar como está a saúde dos dados.

Lembre-se… é de extrema importância que a qualidade de dados esteja atrelada à um KPI ou algum indicador, para que a empresa tenha uma meta a ser perseguida.

Ufaaa…!!!

Acho que por enquanto isso é tudo… espero que essas anotações, que fiz para mim mesmo, sirvam para vocês também!

Abraço e até a próxima!

Qualidade de dados – Parte 1

Nesse post tentarei abordar de forma bem simples um dos temas que mais gosto. O objetivo principal é te mostrar que qualidade de dados não é somente para as gigantes do mercado e te convencer que este é um tema que deveria ser prioridade em qualquer empresa, até mesmo para a lanchonete da esquina.

O que é qualidade de dados?

De forma bem prática e resumida, qualidade de dados pode ser definido como… quão bem os seus dados satisfazem as necessidades de quem os usará… e isso não é restrito somente ao mundo digital.

Simples assim…

Vamos de exemplo:

Imagine que você é dono de uma lanchonete e possui cardápios impressos e plastificados… com uma arte linda. Um cliente entra, senta-se, e você leva à ele um dos cardápios. Ele examina com calma, vê que você serve x-salada e suco de laranja, e resolve fazer o pedido:

“Quero um x-salada”. Então você o informa que acabou o tomate.
“Ok, pode ser… quero também um suco de laranja por favor”. Então você o informa que acabou a laranja =/

Bom, não é muito incomum essa cena… e isso é um belo exemplo de uma Má qualidade de dados. Isso ai =)!

Lembra do conceito logo acima? “Quão bem os seus dados satisfazem a necessidade de quem os usará”. O cardápio dessa lanchonete está cheio de dados e informações, se eles não estiverem corretos, isso pode gerar um grande problema. Imagina se os preços estiverem desatualizados, pensa na confusão =/.

Pode parecer um exemplo bobo, mas essa experiência vivida nessa lanchonete acompanhará esse cliente por um bom tempo, talvez nem volte!

Perceberam que um dado pode ser algo do nosso mundo físico? Um preço, um ingrediente, uma temperatura, um endereço anotado em um papel… tudo isso são dados, e quando eles recebem um contexto, viram informação. Garantir a qualidade do dado, é também sobre garantir o contexto correto para ele. Afinal, você pode ter um endereço correto, vinculado ao cliente errado.

Escalando um pouco… o desenho abaixo mostra a importância da qualidade de dados para a performance de uma empresa:

Dados com qualidade GERAM informações com qualidade, que GERAM decisões com qualidade que GERAM resultados e aumentam a performance da empresa.

O que é gestão de qualidade de dados?

“Conjunto de práticas que visam aprimorar e manter informações de alta qualidade dentro da organização”.

Traduzindo:

Tudo aquilo que você faz para melhorar a qualidade dos seus dados.

De preferência de forma proativa, e não, reativa. Lembra do exemplo do x-salada logo acima? O ideal era que a falta do ingrediente fosse notada antes do cliente, e que o produto fosse sinalizado no cardápio como não disponível, ou minimamente, que falta um ingrediente.

Ok… e como poderia ser isso na prática?

Você poderia implantar uma rotina de atualização de cardápio diária, afim de indicar possíveis produtos que estejam em falta. Certo?! sim… maaas… e se fosse implantado processos para uma melhor gestão de estoque?! Acho que seria uma abordagem mais eficaz e inteligente… uma vez que você não precisaria mais ficar atualizando seu cardápio devido a falta de ingrediente.

Outro exemplo bem simples… mas a intenção é essa mesmo, para mostrar que qualidade de dados está no nosso dia-a-dia.

O objetivo final não é apenas manter a qualidade dos dados, mas melhorar o desempenho geral da empresa. Porque com dados de qualidade você terá informações de qualidade, o que gerará decisões de qualidade, o que trará bons resultados de negócio o que resultará em um melhor desempenho da empresa.

Pilares da gestão da qualidade de dados:

Certo, para continuarmos falando de qualidade de dados, vou procurar manter os exemplos o mais simples possível, para que vocês consigam enxergar a importância desse tema em qualquer empresa.

Pessoas:

De nada adianta você criar um conjunto de práticas que visem aprimorar os dados e mantê-los, sem ter pessoas-chaves nos lugares certos.

São elas que no final vão fazer a diferença para o sucesso do programa de qualidade de dados.

Perfil de dados:

Trata-se do processo para entender o estado atual dos dados. Isso será usado em posteriores comparações para analisar o avanço do programa de qualidade de dados.

Definindo Qualidade de Dados:

Aqui definimos as regras de qualidade e definimos nossas expectativas. Essas regras são baseadas nas metas que estamos querendo alcançar.

Relatório de dados:

Aqui relatamos e monitoramos a qualidade dos nossos dados para entender o ROI sobre o gerenciamento da qualidade dos dados.

Simples essa aqui né?!
Acompanhar regularmente a “saúde” dos dados.

Reparação de dados:

Aqui é onde corrigimos os dados que não estão dentro do padrão esperado.

Legal… mas e ai… como encaixo tudo isso na nossa lanchonete? =). Vamos lá!

Vamos voltar para a nossa lanchonete…

Bom, se você for contratar pessoas para lanchonete, você não colocará qualquer um em qualquer função… certo?! Isso é “Pessoas”.

Certo, e como saber onde e o que precisa ser corrigido? Aqui é preciso parar e fazer o levantamento de tudo o que você tem e como estão as coisas:
– Checagem dos cardápios pra ver se todos os preços estão corretos e se os produtos ali listados ainda estão sendo comercializados
– Checagem da sua lista de fornecedores pra ver se as informações de contato estão válidas e se a tabela de preços que você possui está atualizada… Isso é “Perfil de dados”.

Acho que deu pra entender né!?

Bom… depois desse grande levantamento, você encontrou problemas:
– Cardápios com preços errados e com produtos que não são mais comercializados
– Fornecedores com número de telefone inválido
– Tabela de preços de fornecedores desatualizadas
– …

Legal! Identificamos os problemas… mas como queremos que tudo fique?! Alguns exemplos:
– Cardápios atualizados diariamente
– Fornecedores com contatos válidos
– Tabelas de preços atualizadas
– …
Isso é “Definindo Qualidade de Dados”.

Show! Já sabemos como estão os nossos dados e já sabemos como queremos que ele fique… agora é hora de corrigir os problemas:
– Correção dos cardápios e implementação de rotina para atualização
– Correção dos contatos dos fornecedores e rotina periódica de validação desses contatos
– …
Isso é “Reparação de dados”.

E claro, depois de tudo isso, você precisa cuidar para que tudo o que foi corrigido se mantenha atualizado. Isso é “Relatório/Monitoramento de dados”.

Viu como Qualidade de dados está em tudo?! Existem vários termos bonitos que a gente usa, mas no final qualidade de dados é simples! Lembra da definição lá do início?! “Quão bem os seus dados satisfazem as necessidades de quem os usará”.

Bom… a partir desse momento vou deixar a nossa lanchonete de lado, pelo menos por ora, para trazer o tema um pouco mais para o lado corporativo.

Bora lá!

O impacto de uma má qualidade de dados

Decisões baseadas em dados… são tão boas quanto os dados em que elas são baseadas. Traduzindo: Dados ruins… decisões ruins!

Os dados estão por tudo ao nosso redor, e decisões baseadas em dados ruins podem afetar a nossa vida de diferentes formas:

  • Impacto nas Empresas: A má qualidade dos dados pode levar a análises incorretas, decisões equivocadas e prejuízos financeiros. Além disso, compromete a confiabilidade de produtos e serviços, afetando a reputação da empresa e a satisfação do cliente.
  • Impacto na Saúde: Dados imprecisos podem resultar em diagnósticos errôneos, tratamentos inadequados e colocar vidas em risco, impactando diretamente a qualidade dos cuidados de saúde.
  • Impacto nos Governos: Dados de má qualidade podem distorcer políticas públicas e alocação de recursos, prejudicando comunidades inteiras e minando a eficácia das iniciativas governamentais.
  • Desinformação e Confiança Pública: A disseminação de informações falsas ou manipuladas devido à má qualidade dos dados pode levar a desinformação generalizada, minando a confiança pública e prejudicando o funcionamento saudável da sociedade.

Estimativa de custo de uma má qualidade de dados

Isso é algo bem delicado e complicado de metrificar. Como saber o custo de uma má qualidade de dados?

Algumas situações deixam bastante explícita o tamanho do prejuízo da má qualidade de dados. Por exemplo problemas com orgãos regulatórios, onde as regras de tratamento de dados não estejam sendo cumpridas. Isso vai acarretar em multas e má reputação da empresa.

Mas e aquelas situações que não são tão explícitas assim? Como calcular o custo da oportunidade perdida? Como por exemplo a falta de dados, ou dados imprecisos de um cliente ou fornecedor que acabam acarretando em não renovação de contrato, ou uma negociação não tão vantajosa. Ou então aquele relatório que você recebeu e que te guiou a tomar uma decisão, porém se houvesse mais variáveis no relatório, a decisão seria diferente.

Enfim… nesses casos é complexo calcular o custo disso tudo.

Existem alguns casos de uso e estudos que mostram o custo da má qualidade de dados, mas não quero trazer esses números aqui. O que eu quero é estimular você a pensar nesse custo.

Imagina o tamanho do prejuízo de uma empresa, tomar decisões baseadas em dados imprecisos. Ou mesmo o risco de perder clientes, por coletar os dados para um fim, e acabar usando para outro.

Você já deve ter ouvido que cientistas de dados gastam cerca de 80% do seu tempo limpando e organizando os dados né?! pois é… e um cientista de dados é um dos profissionais mais caros do mercado.

Por que nós temos dados ruins?

Os 6 principais fatores:

1) Ainda existem muitas empresa que confiam mais na intuição do que nos dados. Isso obviamente resulta em pouco investimento na gestão de dados. E óbvio, sem recursos, não existe mágica.

2) Erros de entrada manual de dados:
Não sei se vocês sabiam… mas humanos erram… e bastante…

3) Silos de dados:
Cada departamento com o seu próprio conjunto de dados, suas próprias regras.
Os dados são coletados para uso e não são compartilhados, o que nos leva a dados duplicados e inconsistentes entre departamentos.

4) Migrações de dados e projetos de conversões:
Muitas vezes precisamos fazer migrações de dados entre sistemas, o que pode gerar problema na qualidade dos dados.
Importante ter um UAT (Teste de aceitação de usuário) adequado para garantir que tudo foi transferido como deveria, e que o usuário deu OK para a a migração.

5) Escalabilidade dos negócios e seus datasets:
Conforme a empresa cresce, é preciso ajustar a sua estratégia de dados.
Algo que funcionou para você quando a empresa era menor, pode não ser adequado quando a empresa cresce

6) Sem regras de governança de dados:
Se você não estabelecer regras para o uso dos dados, certamente terá problemas com a qualidade dos dados.

Tudo bem até aqui?! Certo… vamos seguir!

O que são dimensões da qualidade de dados?

São as diferentes maneiras pelas quais a qualidade dos dados pode ser medida.

Podem haver várias dimensões… porém o padrão global define 6 dimensões:

1) Precisão

Os dados representam com precisão a realidade!

– As vezes pode ser muito difícil identificar erros, pois podem exigir a comprovação de um dado por outros meios. Por exemplo: um nome errado no cadastro, que só poderia ser identificado, usando o número de documento e consultando o nome que consta no documento. Mas será q o errado na verdade não é o número de documento?!

– Outro exemplo comum: Número de telefone ou endereço de e-mail desatualizado. Nesse caso, a conferência desses dados também é difícil de fazer de forma automática, uma vez que só será identificado numa tentativa frustrada de contato.

– A falta de precisão nos dados pode trazer desconfiança, e os dados não serão utilizados. Pior ainda, em alguns setores, manter dados atualizados é altamente crítico e regulamentado, o que pode gerar sérios problemas.

– Em resumo: medir a precisão dos dados requer a verificação com uma referência autêntica

2) Validade

Os dados estão conforme o formato, tipo e intervalo (range) esperados!

Números de telefones fora do padrão, números de documento fora do padrão, código postal fora do padrão para o país do registro…

3) Oportunidade / Disponibilidade / Atualidade (Timeliness)

Os dados estão disponíveis quando esperado e necessário!

Muitas pessoas cometem o erro de achar que a atualidade dos dados é somente referente a garantir que os dados sejam atualizados. Isso é um erro.

Timeliness tem relação com a disponibilidade do dado.

– Ex: Se vou enviar um relatório com resultado financeiro da empresa do último trimestre, tenho alguns dias ou semanas para reunir e processar esses dados. Porém se preciso ligar para um contato de emergência de um paciente em uma UTI, preciso ter esse dado em questão de segundos ou minutos.

4) Completude

Todos os dados necessários estão presentes e você pode usá-los!

Se houver campos obrigatórios sem preenchimento, o dado não está completo

5) Singularidade / Unicidade

O dado aparece apenas uma vez no dataset.

É preciso garantir que apenas um registro exista no dataset.

6) Consistência

Os valores dos dados não conflitam com outros entre diferentes datasets

É preciso garantir que os dados de um registro são os mesmos em diferentes datasets.

Ex: dados de contato de um cliente, é preciso que eles sejam os mesmos no ERP, no CRM, no DW ou no DL.

O que são Regras de qualidade de dados?

Também conhecido como regras de validação de dados.

As regras de qualidade de dados são simplesmente as regras de negócios para seus dados.

Dentro de cada dimensão, temos regras de negócios que definem o que são dados bons dentro da dimensão.

– Quais são as regras de negócios em termos de integridade dos dados?

– Podemos saber quais são as regras de negócios para a validade dos dados?

– Quais são os diferentes formatos aceitáveis, etc.

As regras de qualidade de dados definirão a “aparência” dos dados, o que é esperado pelo time de negócio quando se trata dos dados.

Após a definição das regras de qualidade, elas serão implementadas como verificações automatizadas de qualidade de dados nos diferentes sistemas que contêm seus dados.

Quais os papéis dentro da Qualidade de dados

PapelResponsabilidade
Data Quality ManagerCoordenar atividades de GQD
Data Quality AnalystExecuta atividades associadas com processos de data quality
Data Ownerproprietário dos dados, define requisitos e aplicações para um conjunto de dados, e garante conformidade com políticas e leis.
Data Stewardsmonitora a qualidade dos dados, define padrões, identifica e soluciona problemas, e promove uma cultura de dados na empresa.
Data CustodianResponsável pelo ambiente técnico da manutenção e armazenamento dos dados
Data consumerUm usuário comum de dados.

Os papéis de DQ Manager e DQ Analyst são pessoas que serão contratadas para esse fim.

Já os outros papéis são pessoas que eventualmente desempenharão esse papel, mas que não foram contratadas exclusivamente pra isso.

Data Quality Manager:

Esse é um papel que será pouco visto em organizações pequenas.

O papel do Data Quality Manager é garantir que os dados em uma organização sejam precisos, completos e confiáveis. Isso envolve o desenvolvimento e implementação de políticas, processos e tecnologias para monitorar, melhorar e manter a qualidade dos dados ao longo do tempo, garantindo que eles atendam às necessidades e objetivos da organização.

Principais responsabilidades:

– Garantir a implementação de processos de qualidade de dados
– Definir dados críticos
– Definir metas de qualidade
– Limites de alertas e procedimentos de escalonamento
– Supervisionar a gestão de procedimentos para erros e remediações:
– Definição de planos de remediação com as áreas de negócio
– Garantir a conformidade das normas e padrões de qualidade de dados do grupo.

Esta é a pessoa que deve ter o mais profundo conhecimento sobre qualidade de dados.

Data Quality Analyst:

Será o responsável por resolver os problemas de dados e colaborar com os desenvolvedores para aprimorar os sistemas de origem dos dados.

Principais responsabilidades:

– Executar testes estatísticos em grandes conjuntos de dados para determinar a qualidade e integridade dos dados.
– Avaliar o design e o desempenho do sistema bem como o seu efeito na qualidade dos dados.
– Colaborar com desenvolvedores de banco de dados para aprimorar os processos de coleta e armazenamento dos dados.
– Executar queries para identificar problemas de código e expectativas de dados, bem como a limpeza dos dados.
– Juntar dados de fontes primárias ou secundárias afim de identificar tendências.
– Reportar achados nas análises de dados para a gestão para que seja priorizado as necessidades dos sistemas.
– Documentar processos e manter registros de dados.
– Aderir as boas práticas em análise e coleta de dados.
– Manter-se atualizado em desenvolvimento e tendências em análise de qualidade de dados.

O Gerente de GQD deve garantir que a equipe de analistas mantenham o foco na coisa certa, ao invés de tratar erros “bobos”.

Manter o foco nos grandes problemas, como por exemplo:

  • Falta de processos e procedimentos para manter o treinamento de qualidade de dados para os usuários
  • Alterar a infraestrutura de dados para facilitar a manutenção da qualidade de dados.

Problemas táticos de erros que acontecem no dia a dia, podem ser tratados pelos data owners e data stewards dos dados

Ex: Se ocorrem problemas no departamento de vendas, os analistas desse departamento deveriam resolver os problemas, e não os analistas de qualidade de dados.

Data Quality Owner

Essa é a pessoa que realmente especifica os requisitos de qualidade de dados para o conjunto de dados.

Normalmente, os proprietários dos dados são executivos seniores que representam a equipe do lado do negócio.

É extremamente importante que a equipe de dados mantenha um bom relacionamento com os proprietários dos dados, pois ele definitivamente será necessário para apoiar e conduzir o programa de qualidade de dados dentro de um domínio.

Tocar um programa de qualidade de dados se torna mais fácil quando se tem um patrocinador no alto escalão. De outro modo, será difícil convencer os donos de dados sobre a importância do programa de qualidade de dados.

Data Stewards

São o braço direito dos Data Owners. São especialistas nos dados do domínio ao qual ele pertence (Vendas, Marketing, Financeiro…).

Principais responsabilidades:

  • Manter os dados durante todo o cliclo de vida dele
  • Desenvolver processos de controle de qualidade em parceria com a equipe de qualidade de dados
  • Analisar dados que não parecem corretos e Implementar correções.
  • Criar e aplicar diretrizes internas sobre o uso de dados para garantir não apenas a eficiência interna, mas também a conformidade com os vários departamentos e obrigações regulatórias
  • Podem atuar na melhoria dos dados
  • Monitoramento de uso
  • Compartilhamento de boas práticas
  • Ajudar a fazer melhor uso dos dados disponíveis
  • Facilitar a comunicação entre os vários departamentos da organização

Data Custodian

Também conhecido como proprietário técnico dos dados.

Responsável por gerir o ambiente técnico de manutenção e armazenamento de dados.

Ex: Um DBA pode ser considerado um Data Custodian, pois é o responsável por manter o banco de dados íntegro, manter rotinas de backup entre outras atividades.

Data Consumer:

São os usuários dos dados, simples assim.

Serão as pessoas que usarão os dados no seu dia-a-dia. E todo o programa de qualidade de dados é voltado para entregar dados de qualidade para que os usuários possam fazer o seu trabalho.

Ajuda o Data Owner e Data Steward a definir o que é um dado de qualidade.

Normalmente existem centenas de consumidores de dados em um departamento, então é selecionado algumas pessoas, que serão os “Champions” e que serão as pessoas envolvidas no programa de qualidade de dados

Legal… mas e agora… por onde começo?!

Se você chegou até aqui, parabéns! Você realmente se interessa pelo assunto.

No próximo post, veremos como colocar tudo isso em prática. Você pode conferir aqui

Mas enquanto espera pelo próximo post, dá uma olhada no post anterior onde eu falei sobre Small Data e o poder dos detalhes

Abraço, e até a próxima!

Um pouco sobre Small Data e o poder dos detalhes

Nos últimos anos, muito se tem falado sobre “big data” e como ele tem revolucionado a forma como as empresas tomam decisões. No entanto, existe um outro tema ao qual particularmente gosto bastante, e vejo pouco sobre ele: o “small data”. Embora possa parecer paradoxal, o small data apresenta uma abordagem complementar ao big data, oferecendo insights valiosos em conjuntos de dados menores e mais focados. Neste post, quero passar o pouco que aprendi sobre o tema, suas vantagens e como pode se tornar uma poderosa ferramenta para impulsionar o sucesso dos negócios.

O que é Small Data

Ao contrário do big data, onde temos enormes volumes de dados, o small data refere-se a conjuntos de dados menores, mais gerenciáveis e de escopo limitado. Esses dados podem ser coletados de várias formas como pesquisas qualitativas, entrevistas, observações ou até mesmo de fontes públicas, como redes sociais ou comentários de clientes. Vale ressaltar que o small data está mais relacionado ao nível de detalhe e especificidade do dado, do que ao volume em si, uma vez que a principal característica do small data é a sua qualidade e profundidade, permitindo uma compreensão mais detalhada e contextualizada.

No livro “Small Data: Como Poucas Pistas Indicam Grandes Tendências”, o autor Martin Lindstrom destaca a importância dos detalhes, daqueles dados que a primeira vista podem parecer irrelevantes, mas que conectados uns aos outros escondem insights incríveis. Como o caso da Lego, onde um tênis velho da Adidas de um menino de 11 anos ajudou a empresa a alavancar as vendas que vinham de mal a pior. Outro caso interessante é como os imãs de geladeira das casas russas ajudaram na construção de um novo negócio.

É interessante observar nesse mesmo livro, como o autor coleta e organiza os dados na busca de insights. Todos os dados coletados recebem um contexto, sem isso, os dados podem ser interpretados de forma equivocada ou gerar conclusões incorretas. Por exemplo, um pequeno conjunto de dados pode indicar uma tendência específica, mas apenas com o contexto apropriado pode-se entender se essa tendência é uma anomalia ou algo realmente relevante.

Vantagens do Small Data

  1. Acesso a insights específicos: Enquanto o big data pode fornecer informações em grande escala, o small data permite uma análise mais profunda em aspectos específicos. Isso possibilita a descoberta de insights valiosos e a compreensão de nuances e particularidades que podem passar despercebidas em grandes conjuntos de dados.
  2. Maior confiabilidade: Diferentemente do big data, que pode conter erros, ruídos e informações irrelevantes, o small data é selecionado cuidadosamente e passa por um processo de validação rigoroso. Isso aumenta a confiabilidade das análises e evita tomadas de decisões baseadas em dados questionáveis.
  3. Agilidade e eficiência: Com conjuntos de dados menores, é possível processá-los e analisá-los de forma mais rápida e eficiente. Isso pode ser especialmente útil quando há restrições de tempo ou quando se deseja obter insights quase em tempo real.

Como utilizar o Small Data:

  1. Defina uma pergunta ou problema específico: Aqui a regra é a mesma para o Big Data. Não se começa pelos dados, e sim pelo problema/pergunta. Antes de coletar dados, é essencial ter clareza sobre a pergunta ou problema que deseja responder ou resolver. Isso permitirá que você concentre seus esforços de coleta e análise nos dados relevantes.
  2. Selecione as fontes de dados adequadas: Identifique as fontes de dados que podem fornecer informações valiosas para a sua pergunta ou problema. Isso pode incluir pesquisas de mercado, dados de vendas, feedback de clientes ou até mesmo informações disponíveis publicamente, como em redes sociais.
  3. Analise os dados com contexto: Ao analisar o small data, é fundamental considerar o contexto em que os dados foram coletados. Isso inclui fatores como o momento da coleta, a demografia dos respondentes e quaisquer outras informações relevantes que possam afetar os resultados.

Conclusão

Embora o big data seja a bola da vez, e tenha revolucionado o mercado, o small data não pode ser ignorado. Sua abordagem mais focada e detalhada pode fornecer insights específicos e confiáveis, impulsionando a tomada de decisões e o sucesso dos negócios. Usar small data, é olhar aqueles detalhes que o Big Data ignora, como as empresas podem obter uma visão mais precisa e contextualizada do seu mercado e clientes, identificar oportunidades ocultas e criar estratégias mais eficazes.

Antes de ir embora, da uma olhada no post anterior que escrevi sobre Governança de dados, está bem legal =D.

Um abraço e até a próxima

Um pouco sobre Governança de Dados

Hoje, onde a quantidade de dados gerados e armazenados cresce exponencialmente, a governança de dados tornou-se essencial para empresas que desejam obter valor estratégico a partir dessas informações. Mas afinal, o que é governança de dados? Neste post, irei explorar de forma simples e acessível o conceito de governança de dados e fornecer um passo a passo básico para iniciar sua implementação em uma empresa. Compreender e aplicar práticas de governança de dados é fundamental para garantir a qualidade, integridade, segurança e conformidade dos dados, impulsionando o sucesso dos negócios.

Entendendo a Governança de Dados

A governança de dados é um conjunto de práticas, políticas, processos e controles que garantem que os dados sejam utilizados de maneira adequada e eficiente em uma organização. Envolve a definição de responsabilidades, diretrizes, padrões e métricas para a gestão dos dados em toda a empresa. O objetivo final da governança de dados é assegurar que as informações sejam confiáveis, consistentes, completas e disponíveis para tomada de decisões estratégicas.

Benefícios da Governança de Dados

A implementação adequada da governança de dados traz uma série de benefícios para as empresas. Primeiramente, promove a transparência e a colaboração entre os diversos setores, estabelecendo uma linguagem comum para a compreensão dos dados. Além disso, melhora a qualidade dos dados, reduzindo erros e inconsistências, o que resulta em melhores análises e tomadas de decisão. A governança de dados também auxilia no cumprimento de leis e regulamentações, como a proteção de dados pessoais, fortalecendo a segurança e a privacidade dos dados.

Passo a passo para Implementar a Governança de Dados

Para iniciar a implementação da governança de dados em uma empresa, é importante seguir alguns passos fundamentais:

Primeiramente, é necessário identificar e mapear os dados existentes na organização, incluindo sua localização, formato e origem.

Em seguida, deve-se estabelecer um comitê de governança de dados, com representantes de diferentes áreas, para definir políticas e diretrizes. Essas políticas devem abordar aspectos como padrões de nomenclatura, definição de papéis e responsabilidades, políticas de acesso e uso dos dados, entre outros.

Implementação e Monitoramento

Com as políticas definidas, é hora de implementar as mudanças necessárias para aprimorar a governança de dados. Isso pode envolver a adoção de novas tecnologias, como sistemas de gerenciamento de dados, ferramentas de controle e monitoramento, e a capacitação dos colaboradores por meio de treinamentos específicos. É importante também estabelecer indicadores de desempenho para avaliar a eficácia da governança de dados ao longo do tempo e realizar ajustes conforme necessário.

Cultura de Dados

Por fim, a implementação bem-sucedida da governança de dados requer a criação de uma cultura de dados dentro da empresa. Isso envolve conscientizar os colaboradores sobre a importância dos dados, promover a educação sobre boas práticas de gestão e incentivar a colaboração e o compartilhamento responsável das informações. A cultura de dados deve estar alinhada aos objetivos estratégicos da empresa, permitindo que os dados sejam usados como um ativo valioso para impulsionar a inovação e a vantagem competitiva.

Conclusão:

A governança de dados é um elemento-chave para uma gestão eficiente e bem-sucedida de informações nas organizações. Este post apresentou uma visão simples e prática do conceito, além de um passo a passo básico para iniciar a implementação da governança de dados em uma empresa. Ao adotar a governança de dados, as empresas estarão melhor preparadas para lidar com os desafios e oportunidades trazidos pela era dos dados, alcançando uma vantagem competitiva sustentável no mercado atual.

Esse é um assunto bastante amplo e um tanto quanto complexo. Recomendo fortemente a leitura do livro “Governança de Dados” do Carlos Barbieri.

Antes de ir embora, dá uma olhada nesse post sobre Alfabetização de dados, ficou bem legal

Abraço e até a próxima!

Alfabetização em dados: Isso vai mudar a sua carreira

A alfabetização em dados, também conhecida como data literacy, envolve desenvolver habilidades para entender, interpretar e comunicar informações com base em dados. Essas habilidades capacita as pessoas a analisar e questionar informações, identificar tendências, padrões e insights ocultos nos dados. Isso é crucial para tomar decisões eficazes e estratégicas em diversos contextos, como desenvolvimento de produtos, marketing, previsão de demanda, políticas públicas e tomada de decisões pessoais.

Em um mundo cada vez mais orientado por dados, a alfabetização em dados é uma habilidade essencial para enfrentar os desafios e aproveitar as oportunidades que surgem.

Abaixo deixo algumas dicas para quem deseja iniciar:

Compreenda os conceitos básicos:

Dados: Entenda o que são dados e como são coletados. Aprenda sobre os diferentes tipos de dados, como dados numéricos, categóricos e textuais.

Análise de dados: Familiarize-se com as técnicas básicas de análise de dados, como resumir dados, encontrar padrões e identificar correlações.

Visualização de dados: Explore os princípios da visualização de dados, incluindo a escolha de gráficos adequados para diferentes tipos de dados e a criação de visualizações claras e informativas.

Aprenda estatística básica:

Média: É a soma de todos os valores dividida pelo número total de valores. Ajuda a entender o valor médio de um conjunto de dados.

Mediana: É o valor que separa a metade inferior da metade superior de um conjunto de dados ordenado. É útil para entender a tendência central dos dados.

Moda: Refere-se ao valor mais frequente em um conjunto de dados. Ajuda a identificar valores que ocorrem com mais frequência.

Desvio padrão: Mede a dispersão dos dados em relação à média. Indica o quão diferentes os valores estão em relação à média.

Distribuição normal: É uma distribuição simétrica em torno da média, onde a maioria dos valores se concentra perto da média. É um conceito importante para muitas análises estatísticas.

Explore ferramentas de análise de dados:

Microsoft Excel: É uma ferramenta amplamente utilizada para análise de dados. Possui recursos para manipulação de dados, fórmulas, tabelas dinâmicas e gráficos.

Google Sheets: É uma alternativa baseada na web ao Excel. Permite colaboração em tempo real e também possui recursos de análise de dados.

Tableau: É uma poderosa ferramenta de visualização de dados que permite criar painéis interativos e gráficos avançados.

Desenvolva habilidades em programação:

Python: Aprender Python pode ser útil na manipulação e análise de dados. Bibliotecas como Pandas, NumPy e Matplotlib são amplamente utilizadas para tarefas relacionadas a dados.

R: R é uma linguagem popular para análise estatística e visualização de dados. Possui uma vasta coleção de pacotes especializados em análise de dados.

Procure cursos e recursos online:

Coursera: É uma plataforma de aprendizado online que oferece uma ampla variedade de cursos relacionados a dados, desde introdução à ciência de dados até análise estatística avançada.

Udemy: Oferece uma variedade de cursos sobre análise de dados, visualização e ferramentas específicas.

DataCamp: É uma plataforma focada em cursos interativos de ciência de dados e análise de dados, abrangendo desde conceitos básicos até tópicos avançados.

Pratique com projetos reais:

Encontre conjuntos de dados interessantes: Procure por conjuntos de dados disponíveis gratuitamente em repositórios online, como o Kaggle, o UCI Machine Learning Repository, Portal da transparência e Dados.gov.

Defina perguntas: Estabeleça perguntas específicas que deseja responder com base nos dados disponíveis.

Análise e visualização: Utilize as ferramentas e técnicas aprendidas para explorar, analisar e visualizar os dados em busca de insights e respostas às suas perguntas.

Mantenha-se atualizado:

Blogs: Siga blogs especializados em análise de dados, ciência de dados e visualização de dados para se manter atualizado sobre as últimas tendências e práticas.

Comunidades online: Participe de fóruns, grupos de discussão e comunidades relacionadas a dados, onde você pode compartilhar conhecimento e aprender com outros profissionais.

Conferências: Acompanhe conferências e eventos relacionados a dados, como a Data Science Conference e a Tableau Conference, para ficar por dentro das novidades e conhecer especialistas da área.

E depois?

Lembre-se de que a prática constante e a aplicação dos conceitos e técnicas aprendidos são fundamentais para aprimorar suas habilidades. Por isso, tente incorporar o máximo possível dessas dicas ao seu dia-a-dia.

Espero que tenham gostado!

Abraço e até a próxima!

Viagem no tempo com o BigQuery

Esse é um daqueles recursos que nos deixam impressionados, tanto pela utilidade quanto pela facilidade de uso. Podemos literalmente voltar no tempo e visualizar nossos dados dentro do BigQuery do momento atual até 6 dias 23 horas, 59 minutos e 59 segundos atrás.

É, eu sei, parece mentira… mas é verdade.

O que é?

Recurso que permite olhar para seus dados em qualquer ponto do passado dentro da janela padrão de 7 dias.

Resumindo, é possível ver como um dado no BigQuery estava a até 7 dias atrás. E tudo isso é default do BQ, sem nenhuma necessidade de configuração adicional. Incrível né?!

Sintaxe

SELECT *
FROM `mydataset.mytable`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

A instrução acima retorna os dados da sua tabela da forma como estavam a 1 hora atrás.

Exemplo Prático:

Imagine que você executou uma instrução DML errada, e quer saber as linhas que foram afetadas ou simplesmente restaurar a tabela para o momento anterior a execução da instrução, com o Time Travel isso é perfeitamente possível e ridiculamente simples.

Da uma olhada no exemplo seguinte:

 -- criando tabela teste.usuarios
CREATE TABLE teste.usuarios AS 
SELECT 
    id,
    GENERATE_UUID() AS uuid,
    RAND() > 0.5 as ativo
FROM UNNEST(GENERATE_ARRAY(1, 10, 1)) id;

-- alterando coluna ativo dos ids 1 e 7
update teste.usuarios 
set ativo = IF(ativo, false, true) 
where id in (1,7);

Nas instruções acima, criamos uma tabela, e executamos o update na coluna ativo para os ids 1 e 7.

Abaixo um script de exemplo de como podemos consultar o que foi alterado:

-- consultando os registros que foram afetados
BEGIN

    CREATE TEMP TABLE temp_tb AS 
    SELECT * FROM teste.usuarios for system_time AS OF timestamp_sub(current_timestamp(), interval 5 minute);

    select * from teste.usuarios t inner join (
        select * from temp_tb
        except distinct
        select * from teste.usuarios
    ) t2 on t.id = t2.id;

END

Note que criamos uma temporária com os dados da tabela teste.usuarios de 5 minutos atrás. E por que criar essa temporária? Porque hoje (abril/2023) o BigQuery exige que todas as tabelas da query estejam no mesmo período de tempo. Então a solução foi criar essa tabela temporária para guardar a “foto” da tabela de 5 minutos atrás e usá-la para comparar com a tabela no presente.

Ainda no script acima, note que criei um join da teste.usuarios com o resultado da except distinct entre a temporária e a própria teste.usuarios. Isso somente para que o resultado final fosse uma única linha contendo o dado atual e o dado alterado.

E se quisermos restaurar a tabela? Usando esse mesmo script acima, poderíamos apenas trocar o select de comparação entre as tabelas por uma instrução de insert com select… assim:

-- restaurando os registros que foram afetados
BEGIN

    CREATE TEMP TABLE temp_tb AS 
    SELECT * FROM teste.usuarios FOR system_time AS OF timestamp_sub(current_timestamp(), interval 5 minute);

    TRUNCATE TABLE teste.usuarios;
    INSERT INTO teste.usuarios SELECT * FROM temp_tb;

END

Fant´ástico né?! 😀

E como isso funciona “por baixo dos panos”? Não faço a mínima idéia. Mas vou descobrir e volto aqui pra contar =D.

E se quisermos ver como estava nossa tabela em um período de tempo maior que 7 dias… ai podemos usar o recurso de SNAPSHOT. Mas isso fica pra outro post =D.

Abraço!

Outros artigos sobre o BigQuery:

https://variavelconstante.com.br/category/bigquery/

Documentação oficial do Time Travel

https://cloud.google.com/bigquery/docs/time-travel?hl=pt-br

Dicas para escrever códigos mais concisos e otimizados

Que o Python é uma linguagem fantástica e simples de trabalhar, todo mundo já sabe. Mas ele pode ser ainda mais legal =D.

Abaixo vou mostrar algumas dicas simples, e que deixarão seu código bem mais conciso e otimizado. Bora ver =).

Evite loops aninhados com função product()

Essa descobri recentemente, e curti demais. Trata-se de uma função built-in do módulo itertools.

As vezes precisamos criar loops aninhados, o que pode deixar nosso código mais lento e difícil de ser lido, e essa função vem para nos ajudar nisso.

Segue um exemplo simples:

def nested_loop():
    start_time = time.perf_counter()
    for a in list_a:
        for b in list_b:
            for c in list_c:
                v = a + b + c
    end_time = time.perf_counter()
    execution_time = end_time - start_time
    print(f">>> Nested loops execution time: {execution_time:.2f}")

Mesmo código, mas agora usando a função product():

def product_function():
    start_time = time.perf_counter()
    from itertools import product
    for a, b, c in product(list_a, list_b, list_c):
        v = a + b + c
    end_time = time.perf_counter()
    execution_time = end_time - start_time
    print(f">>> Product function execution time: {execution_time:.2f}")

Aqui o código completo com teste de performance. Essa performance aumenta conforme a complexidade do que seu código aumenta:

import numpy as np
import time

list_a = np.random.randint(1000, size=300)
list_b = np.random.randint(1000, size=300)
list_c = np.random.randint(1000, size=300)

def nested_loop():
    start_time = time.perf_counter()
    for a in list_a:
        for b in list_b:
            for c in list_c:
                v = a + b + c
    end_time = time.perf_counter()
    execution_time = end_time - start_time
    print(f">>> Nested loops execution time: {execution_time:.2f}")

def product_function():
    start_time = time.perf_counter()
    from itertools import product
    for a, b, c in product(list_a, list_b, list_c):
        v = a + b + c
    end_time = time.perf_counter()
    execution_time = end_time - start_time
    print(f">>> Product function execution time: {execution_time:.2f}")


if __name__ == "__main__":
    nested_loop()
    product_function()

Assignment Expressions

Essa é uma forma bem legal de você atribuir um valor à variável enquanto utiliza-o. Da uma olhada:

O código abaixo est´á sem o uso de expressão de atribuição

var1 = input("Valor 1: ")
var2 = input("Valor 2: ")

if int(var1) ==  int(var2):
    print("Igual")
else:
    print("Diferente")


print(f"Valor 1: {var1}, Valor 2: {var2}")

E agora utilizando expressão de atribuição:

if int(var1 := input("Valor 1: ")) ==  int(var2 := input("Valor 2: ")):
    print("Igual")
else:
    print("Diferente")


print(f"Valor 1: {var1}, Valor 2: {var2}")

Legal né… e vc pode usar de outras formas… por exemplo, em um loop:


while (texto := input("Digite um texto: ")) != "sair":
    print("Texto digitado: ", texto)

Operator condicional ternário, ou simplesmente… if ternário

Para resolver condições simples que envolvam apenas 2 saídas, mais que isso não recomendo o uso de if ternários, pois podem deixar seu código muito difícil de entender:

A sintax é simples:

min = a if a < b else b

Aplicando no if do exemplo anterior, ficaria assim:

print("Igual" if int(var1 := input("Valor 1: ")) ==  int(var2 := input("Valor 2: ")) else "Diferente")
print(f"Valor 1: {var1}, Valor 2: {var2}")

Funções lambda para operações simples

Esse é uma das coisas mais legais do python. A criação de funções anônimas para operações simples. O legal que elas não precisam ser tão anônimas assim, já que conseguimos atribuir uma função lambda a uma variável, e usar essa variável como se fosse uma função definida. Assim:

soma = lambda x,y: x+y
print(soma(1,2))

Outro exemplo legal… uma função para retornar os números da sequência fibonacci

def fib(x):
    if x<=1:
        return x
    else:
        return fib(x-1) + fib(x-2)

Com o uso de lambda:

fib = lambda x: x if x <= 1 else fib(x - 1) + fib(x - 2)

List Comprehensions

Este é sem dúvidas uma das coisas mais legais do Python, a compreensão de listas. É uma forma bem simples e prática de trabalhar com listas.

A sintaxe é simples:

lista_b = [item for item in lista_a [condições] ]

Abaixo um exemplo utilizando list comprehensions com a função lambda que criamos log acima:

fib = lambda x: x if x <= 1 else fib(x - 1) + fib(x - 2)
lista = [fib(i) for i in range(1,11)]

print(lista)

O que fizemos aqui foi simplesmente criar uma lista com 10 números da sequência fibonacci… legal né?! mas da pra fazer muito mais… olha esse outro exemplo:

# Filtrando somente frutas que comecem 
# com a letra M da lista 'frutas'
frutas = ['Banana', 'Maça', 'Pera', 'Abacaxi', 'Uva', 'Melão', 'Melancia', 'Mamão', 'Jaca']
fm = [fruta for fruta in frutas if fruta.startswith('M')]

print(frutas)
print(fm)

Funções de ordem superior

O python possui algumas funções de ordem superior que são verdadeiras jóias quando trabalhamos com dados em larga escala.

Uma função de ordem superior são aquelas funções que recebem outras funções como parâmetros e retornam funções e/ou iterators.

Abaixo um exemplo utilizando a função map():

frutas = ['Banana', 'Maça', 'Pera', 'Abacaxi', 'Uva', 'Melão', 'Melancia', 'Mamão', 'Jaca']
frutas = map(str.upper, frutas)

print(frutas)
# <map object at 0x7f881000cfa0>
print(list(frutas))
#['BANANA', 'MAÇA', 'PERA', 'ABACAXI', 'UVA', 'MELÃO', 'MELANCIA', 'MAMÃO', 'JACA']

Próximo exemplo, aproveitando a lista de frutas do exemplo anterior, vamos ver a função reduce():

r = reduce(lambda x, y: x if len(x) > len(y) else y, frutas)
print(f"{r} é a maior palavra da lista")
# MELANCIA é a maior palavra da lista

Legal né?! 😀

Se você ainda não viu o post sobre Multiprocessing com python, da uma olhada nesse link abaixo:

https://variavelconstante.com.br/2022/04/17/multiprocessing-em-python-extraindo-o-maximo-que-a-sua-maquina-pode-entregar/

Python é fantástico, e isso que eu nem falei sobre generators… mas isso é tema para um próximo post 😀

Abraço!

Fonte: https://medium.com/techtofreedom/9-fabulous-python-tricks-that-make-your-code-more-elegant-bf01a6294908

BigQuery: Como encontrar o próximo dia útil

Recentemente precisei desenvolver uma tabela agregada para servir a um dashboard e um dos dados a serem calculados era a previsão de entrega de um pedido com base em um SLA.

Até ai tudo tranquilo…

DECLARE data_inicio DATE DEFAULT '2022-09-01';
DECLARE sla INT64 DEFAULT 10;
SELECT DATE_ADD(data_inicio, INTERVAL sla DAY);

Só tinha um detalhe: no cálculo deveria ser considerado apenas os dias úteis.

Utilizando uma lógica parecida com a que foi usada na function de cálculo de dias úteis, resolvi desenvolver uma nova function para encontrar o próximo dia útil dado um intervalo de tempo e uma lista de datas a desconsiderar.

A função é bastante simples, recebe apenas 3 parametros: Data de inicio da contagem, intervalo e a lista de datas a serem desconsideradas no calculo. O resultado foi esse:

CREATE TEMP FUNCTION calc_proxima_data_util(DATA_INICIO DATE, SLA INT64, LISTA_FERIADOS ARRAY<DATE>) AS (
  (
    SELECT MAX(dt) FROM (
    SELECT dt, RANK() OVER(ORDER BY dt) as id
    FROM UNNEST(GENERATE_DATE_ARRAY(DATE_ADD(DATA_INICIO, INTERVAL 1 DAY), DATE_ADD(DATA_INICIO,INTERVAL SLA*10 DAY))) dt 
    WHERE EXTRACT(DAYOFWEEK from dt) between 2 and 6 and dt not in UNNEST(LISTA_FERIADOS)
    QUALIFY id <= SLA)
  )
);

A lógica é bastante simples: é gerado um range de datas partindo da data_inicio (mas não contabilizando-a) e indo até o intervalo * 10. Isso para ter uma margem de segurança e não correr o risco de perder alguma data.

Após a geração do range, com a cláusula where tiramos os finais de semana bem como os feriados.

Do resultado, criei um sequencial para cada linha e com a instrução QUALIFY retornei apenas as linhas com sequencial <= SLA. Precisei fazer dessa forma pois o BigQuery não aceitou que eu usasse o LIMIT passando o valor como um parâmetro… infelizmente =/

Depois só precisei fazer um MAX() na data. Legal né?! =D Eu achei =D.

Segue um exemplo de uso completo:

DECLARE DATA_INICIO DATE DEFAULT '2022-09-01';
DECLARE SLA INT64 DEFAULT 10;
DECLARE lista_feriados ARRAY<DATE> DEFAULT NULL;
SET lista_feriados = [
  DATE('2022-01-01'), 
  DATE('2022-03-01'), 
  DATE('2022-04-15'), 
  DATE('2022-04-17'), 
  DATE('2022-04-21'), 
  DATE('2022-05-01'), 
  DATE('2022-06-16'), 
  DATE('2022-09-07'), 
  DATE('2022-10-12'), 
  DATE('2022-11-02'), 
  DATE('2022-11-15'), 
  DATE('2022-12-25')
];

CREATE TEMP FUNCTION calc_proxima_data_util(DATA_INICIO DATE, SLA INT64, LISTA_FERIADOS ARRAY<DATE>) AS (
  (
    SELECT MAX(dt) FROM (
    SELECT dt, RANK() OVER(ORDER BY dt) as id
    FROM UNNEST(GENERATE_DATE_ARRAY(DATE_ADD(DATA_INICIO, INTERVAL 1 DAY), DATE_ADD(DATA_INICIO,INTERVAL SLA*10 DAY))) dt 
    WHERE EXTRACT(DAYOFWEEK from dt) between 2 and 6 and dt not in UNNEST(LISTA_FERIADOS)
    QUALIFY id <= SLA)
  )
);

SELECT 
  dt_inicio, 
  sla, 
  calc_proxima_data_util(dt_inicio, sla, lista_feriados) as previsao_entrega
FROM (
    SELECT date('2022-09-01') as dt_inicio, 10 as sla union all
    SELECT date('2022-02-25'), 7 union all
    SELECT date('2022-04-07'), 20
);

Abraço!

BigQuery: Contando os dias úteis entre datas

Existem várias formas de fazer esse cálculo, a que vou mostrar nesse post é a mais simples q eu já vi.

Cálculo com datas é algo extremamente comum quando falamos de uma tabela agregada que servirá um relatório ou dashboard, e fazer esses cálculos as vezes pode parecer muito complexo, quando na verdade não é.

Para o exemplo que vou mostrar, criei um script simples, onde simulo algumas datas de inicio e algumas datas fim, e calculo os dias úteis entre elas usando uma UDF temporária

DECLARE lista_feriados ARRAY<DATE> DEFAULT NULL;
SET lista_feriados = [
  DATE('2022-01-01'), 
  DATE('2022-03-01'), 
  DATE('2022-04-15'), 
  DATE('2022-04-17'), 
  DATE('2022-04-21'), 
  DATE('2022-05-01'), 
  DATE('2022-06-16'), 
  DATE('2022-09-07'), 
  DATE('2022-10-12'), 
  DATE('2022-11-02'), 
  DATE('2022-11-15'), 
  DATE('2022-12-25')
];

CREATE TEMP FUNCTION total_dias_uteis(DATA_INICIO DATE, DATA_FIM DATE, LISTA_FERIADOS ARRAY<DATE>) AS (
  (
      SELECT COUNT(dt)
      FROM UNNEST(GENERATE_DATE_ARRAY(DATA_INICIO, DATA_FIM)) dt 
      WHERE EXTRACT(DAYOFWEEK from dt) between 2 and 6 and dt not in UNNEST(LISTA_FERIADOS)
  )
);
SELECT dt_inicio, dt_fim, total_dias_uteis(dt_inicio, dt_fim, lista_feriados) as total_dias_uteis
FROM (
    SELECT date('2021-12-25') as dt_inicio, date('2022-01-05') as dt_fim union all
    SELECT date('2022-02-25'), date('2022-03-05') union all
    SELECT date('2022-04-05'), date('2022-04-25')
);

Acima a versão completa pra quem não quer mais explicações rsrsr.

Nesse inicio de código fiz apenas a declaração de uma variável: lista_feriados e logo em seguida inseri os feriados de 2022. Esses feriados poderiam vir de uma tabela, ai vai da imaginação de cada um 😉

DECLARE lista_feriados ARRAY<DATE> DEFAULT NULL;
SET lista_feriados = [
  DATE('2022-01-01'), 
  DATE('2022-03-01'), 
  DATE('2022-04-15'), 
  DATE('2022-04-17'), 
  DATE('2022-04-21'), 
  DATE('2022-05-01'), 
  DATE('2022-06-16'), 
  DATE('2022-09-07'), 
  DATE('2022-10-12'), 
  DATE('2022-11-02'), 
  DATE('2022-11-15'), 
  DATE('2022-12-25')
];

Logo em seguida criei um UDF temporária para facilitar a vida na hora de usar. O mais interessante aqui é criar uma UDF permanente, nesse caso, basta remover a instrução TEMP, e incluir o id do projeto e do dataset antes do nome da function.

A function recebe 3 parâmetros: data inicio, data fim e uma lista de feriados (criada logo acima).

CREATE TEMP FUNCTION total_dias_uteis(DATA_INICIO DATE, DATA_FIM DATE, LISTA_FERIADOS ARRAY<DATE>) AS (
  (
      SELECT COUNT(dt)
      FROM UNNEST(GENERATE_DATE_ARRAY(DATA_INICIO, DATA_FIM)) dt 
      WHERE EXTRACT(DAYOFWEEK from dt) between 2 and 6 and dt not in UNNEST(LISTA_FERIADOS)
  )
);

E por fim, um select simples simulando algumas datas apenas para mostrar como usar a function, porém se você sabe usar as funções built-in como count, sum, avg… vc sabe usar as UDF’s 🙂

SELECT 
    dt_inicio, 
    dt_fim, 
    total_dias_uteis(dt_inicio, dt_fim, lista_feriados) as total_dias_uteis
FROM (
    SELECT date('2021-12-25') as dt_inicio, date('2022-01-05') as dt_fim union all
    SELECT date('2022-02-25'), date('2022-03-05') union all
    SELECT date('2022-04-05'), date('2022-04-25')
);

Antes de sair… dá uma conferida na série de posts para o Projeto Video Creator que eu postei aqui no blog. Pra quem curte automatizar o trabalho, vai gostar do conteúdo =D.

Espero ter ajudado 🙂

Grande abraço!