top of page

Search

112 resultados encontrados com uma busca vazia

  • Vibe Coding: A nova forma de programar com IA

    Já imaginou criar um sistema apenas descrevendo o que ele deve fazer, sem escrever manualmente cada linha de código?  Com o avanço dos modelos de linguagem natural, como o ChatGPT, isso não só é possível, como está se tornando uma nova forma de programar — e ganhou nome: Vibe Coding . Popularizado por Andrej Karpathy , esse conceito propõe um jeito mais leve, rápido e criativo de desenvolver software com ajuda da inteligência artificial. Neste guia, você vai entender o que é, como funciona e como aplicá-lo com ferramentas modernas Vibe Coding O que é Vibe Coding? Vibe Coding é um estilo de desenvolvimento onde você interage com uma IA (como o ChatGPT, Claude ou Copilot), descrevendo o que deseja em linguagem natural, e a IA gera o código correspondente. Diferente do desenvolvimento tradicional, onde o programador digita tudo manualmente, o Vibe Coding incentiva a colaboração com a IA, transformando o processo em algo mais: Iterativo : você gera, testa, ajusta e repete. Expressivo : a IA interpreta intenções, não apenas comandos. Criativo : dá espaço para prototipação rápida de ideias. Por que o Vibe Coding é importante? 1. Acessibilidade para todos Com Vibe Coding, qualquer pessoa com uma ideia pode começar a construir sem dominar uma linguagem de programação. Ideal para empreendedores, designers e analistas. 2. Velocidade Descreva uma funcionalidade e, em segundos, você tem um código funcional para começar a testar. Isso reduz drasticamente o tempo de desenvolvimento de MVPs. 3. Foco na lógica e não na sintaxe A IA cuida da parte técnica, enquanto você se concentra no raciocínio de negócio, na arquitetura e na usabilidade do software. 4. Menos reuniões, mais código Equipes podem evitar etapas burocráticas, como longas validações de design docs, e ir direto ao protótipo. Como aplicar Vibe Coding na prática 1. Comece com uma descrição clara Antes de usar uma IA, pense como você descreveria o sistema para um colega técnico.Evite instruções vagas. Quanto mais específico for, melhor o resultado. Exemplo ruim: “Quero um site de cadastro.” Exemplo bom: “Crie uma API REST em Node.js com dois endpoints: POST /users (para cadastrar um usuário com nome e e-mail) e GET /users/{id} para buscar o usuário por ID. Armazene os dados em SQLite.” Dica:  use palavras como “usar”, “implementar”, “armazenar”, “validar”, “autenticar” para deixar sua intenção mais clara para a IA. 2. Escolha a ferramenta ideal para Vibe Coding Aqui estão algumas ferramentas que já funcionam com o modelo “você escreve, a IA codifica”: Cursor Editor de código com IA embutida. Ideal para substituir o VS Code com recursos de geração, refatoração e explicações de código. Suporta contextos maiores que o Copilot tradicional. Replit + Ghostwriter Ambiente completo de desenvolvimento online. Você programa no navegador e interage com a IA enquanto escreve. Suporte a várias linguagens, integração fácil com deploy. GitHub Copilot Assistente de código dentro do VS Code. Completa automaticamente funções, testes e até comentários explicativos. Excelente para quem já usa Git e trabalha em repositórios. [ChatGPT, Claude, Gemini] Ferramentas mais livres para gerar blocos de código sob demanda. Você pode usá-las para criar snippets, revisar, explicar e até debugar. Combine com o seu editor preferido para uma experiência poderosa. 3. Gere código e revise iterativamente Agora é hora de interagir com a IA. O processo básico é: Prompt:  descreva o que deseja. Código gerado:  a IA entrega a estrutura funcional. Testes:  execute e veja se atende ao esperado. Feedback:  peça ajustes ou melhorias específicas. Exemplo de prompt: "Crie um backend Flask com um endpoint GET que retorna a lista de produtos a partir de um banco SQLite. Inclua tratamento de erro e logging." Exemplo de ajuste após teste: “Adicione autenticação via token JWT.”“Melhore o nome das variáveis para refletirem boas práticas.”“Me explique como está implementado o tratamento de erros.” 4. Divida projetos em partes menores Evite sobrecarregar a IA pedindo um sistema inteiro de uma vez. Trabalhe em partes: Primeiro a estrutura base do app Depois os endpoints Em seguida, a autenticação Depois testes, documentação, etc. Esse fluxo incremental aumenta a precisão do código gerado e permite maior controle da qualidade. 5. Refatore e valide o código gerado Mesmo com IA ajudando, é essencial: Revisar cada função Adicionar testes automatizados Rodar ferramentas como linters, formatadores e analisadores de segurança Dica: peça para a própria IA gerar os testes com Pytest, JUnit, etc. Boas práticas com Vibe Coding Use comentários nos prompts : “adicione docstring”, “explique a lógica” Guarde os prompts usados  para reproduzir versões ou revisar ideias Combine com ferramentas de versionamento  (como GitHub) para manter controle Conclusão: Codar com vibe é o futuro? Vibe Coding não é apenas um atalho. É uma nova abordagem de desenvolvimento , onde a colaboração entre humanos e IA acelera a criação de software com mais liberdade, menos burocracia e muito mais criatividade. Você deixa de digitar por obrigação e passa a projetar soluções de forma fluida . Mas tenho algumas ressalvas quanto ao uso dessa metodologia, se pudemos chamar assim. Efetuando alguns testes e acompanhando relatos em alguns grupos, apesar da IA gerar um bom MVP ela pode deixar algumas brechas de segurança colocando todo o projeto em níveis altos de vulnerabilidade. A minha recomendação é que revise bem o código e dê atenção aos detalhes de segurança e pontos que possam colocar diretrizes de privacidade em risco. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • Git para Iniciantes: Entendendo os 15 Comandos Git Mais Usados

    Entendendo a estrutura dos comandos no Git 15 Comandos Git Antes de mergulhar nos comandos, vamos entender a estrutura geral de um comando Git: git [argumentos] [parâmetros] Comando : A ação que o Git vai executar (ex: commit, pull, add) Argumentos (ou flags) : Modificam o comportamento do comando (ex: -m, --force) Parâmetros : São os valores ou alvos do comando (ex: nome de arquivo, nome de branch) Exemplo clássico: git pull origin master git : chama o Git pull : comando para "puxar" ou pegar as atualizações do repositório remoto origin : parâmetro , nome do repositório remoto (padrão é "origin") master : parâmetro , nome da branch que você quer atualizar localmente 1. git init Comando:  init O que faz:  Inicializa um novo repositório Git no diretório atual. git init Sem argumentos nem parâmetros na forma básica. Pode usar: --bare : cria um repositório sem diretório de trabalho (modo servidor). Erro comum:  Rodar git init em pasta que já tem um repositório Git. 2. git clone Comando:  clone O que faz:  Cria uma cópia local de um repositório remoto. git clone https://github.com/user/repo.git https://... : parâmetro com o link do repositório remoto. Argumentos úteis: --branch nome : clona uma branch específica. - -depth 1 : clona apenas o último commit. 3. git status Comando:  status O que faz:  Mostra o que foi alterado, adicionado ou removido. git status Sem argumentos ou parâmetros obrigatórios. 4. git add Comando:  add O que faz:  Adiciona arquivos ao stage (área de preparação para commit). git add arquivo.txt arquivo.txt : parâmetro que define qual arquivo será adicionado, nesse caso o próprio arquivo.txt. Argumentos úteis: . : O ponto (.) adiciona todos os arquivos do diretório atual. -A : adiciona todos os arquivos (inclusive deletados). -u : adiciona modificações e deleções. 5. git commit Comando:  commit O que faz:  Salva as alterações do stage no histórico do Git. git commit -m "mensagem" -m : argumento obrigatório que define a mensagem do commit. "mensagem" : parâmetro (o texto que explica a mudança). Outros argumentos: --amend : edita o último commit. 6. git push Comando:  push O que faz:  Envia os commits locais para o repositório remoto. git push origin main origin : parâmetro — o nome do repositório remoto. main : parâmetro — a branch que será atualizada no repositório remoto, ou seja, será a branch que vai receber os commits (arquivos) feitos localmente. Argumentos úteis: --force : força o envio (cuidado com esse argumento, GG?). --set-upstream : define a branch padrão para futuros pushs. 7. git pull Comando:  pull O que faz:  Traz mudanças do repositório remoto para sua branch local. git pull origin main origin : parâmetro — nome do repositório remoto. main : parâmetro — branch a ser atualizada localmente. Argumentos úteis: - -rebase : reaplica seus commits no topo dos commits remotos, ao invés de mesclar com merge. Erro comum:  Ter alterações locais não commitadas e gerar conflitos. 8. git branch Comando:  branch O que faz:  Lista, cria, renomeia ou deleta branches. git branch nova-feature nova-feature : parâmetro — nome da nova branch. Argumentos úteis: - d nome : deleta uma branch. -m novo-nome : renomeia a branch atual. 9. git checkout Comando:  checkout O que faz:  Troca de branch ou restaura arquivos. git checkout nova-feature nova-feature : parâmetro — branch de destino. Argumentos úteis: -b : cria e já muda para uma nova branch. git checkout -b nova-feature 10. git merge Comando:  merge O que faz:  Une mudanças de uma branch para outra. git merge nome-da-branch nome-da-branch: parâmetro — branch com as alterações que serão aplicadas. 11. git log Comando:  log O que faz:  Mostra o histórico de commits. git log Argumentos úteis: --oneline : mostra commits em uma linha. --graph : desenha o gráfico das branches. --all : inclui todas as branches no log. 12. git reset Comando:  reset O que faz:  Volta para um commit anterior. git reset --soft HEAD~1 --soft : mantém as mudanças no código. HEAD~1 : parâmetro — indica voltar o commit anterior. Outros: --hard: apaga tudo sem volta. 13. git revert Comando:  revert O que faz:  Cria um novo commit desfazendo um commit específico. git revert abc1234 abc1234: parâmetro — hash do commit a ser revertido. 14. git stash Comando:  stash O que faz:  Guarda temporariamente mudanças não commitadas. git stash git stash pop Argumentos úteis: pop : aplica e remove o stash salvo. list : mostra todos os stashes. 15. git remote Comando:  remote O que faz:  Gerencia conexões com repositórios remotos. Imagina que você precisa plugar em um repositório Git existente e que esteja remoto. Apenas usando o comando abaixo, já é possível fazer isso. git remote add origin https://github.com/user/repo.git add : argumento — adiciona novo remoto. origin : parâmetro — nome do remoto. https://... : parâmetro — URL do repositório. Outros: -v : mostra remotos existentes. remove : remove um remoto. Conclusão final Saber o que cada parte de um comando faz (comando, argumento, parâmetro) é um divisor de águas para quem está aprendendo Git. Com esse guia, você não só executa os comandos — você entende o que está fazendo , e isso faz toda a diferença. Saiba que em toda sua jornada trabalhando em projetos com multi-times, a necessidade de entender sobre Git é quase uma obrigação. Utilize este guia para o seu dia a dia e tenho certeza que vai te ajudar bastante. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • Scraping Python: Guia Completo Para Iniciantes com Exemplo Prático

    Scraping com Python Aprenda como coletar dados da web com Scraping Python, passo a passo, usando BeautifulSoup e requests. Se você já se perguntou como alguns sites conseguem coletar dados da internet de forma automática, a resposta provavelmente passa por uma técnica chamada web scraping . E adivinha quem é o queridinho para isso? Exatamente: o scraping com Python ! Neste post, vamos explorar: O que é scraping ; Casos de uso; Vantagens e desvantagens; Um exemplo prático completo com explicação do código. O que é Scraping Python? Scraping é o processo de coletar informações de sites automaticamente . No caso de scraping com Python , usamos bibliotecas específicas para simular a navegação, capturar conteúdo de páginas e transformar em dados utilizáveis. Casos de Uso de Scraping com Python Monitoramento de preços em e-commerces; Coleta de dados para análise de mercado; Extração de informações de sites de notícias; Agregadores de conteúdo (como buscadores de promoções); Atualização automática de bancos de dados com dados públicos; Extração de dados para uso em ETLs ; Vantagens do Scraping com Python Python tem diversas bibliotecas poderosas  pra scraping; Código simples e legível, ideal pra quem está começando; Automação de tarefas repetitivas e coleta de dados em larga escala; Integração fácil com bibliotecas de data science, como pandas e matplotlib. Desvantagens Sites com proteção (como Cloudflare ou captchas) dificultam o scraping; Mudanças na estrutura do site quebram o código; Legalidade: nem todo site permite scraping (veja o robots.txt); Pode ser bloqueado por excesso de requisições. Exemplo Prático Completo de Scraping com Python Vamos usar as bibliotecas requests e BeautifulSoup para extrair dados do site Books to Scrape , um site criado justamente para treinar scraping. Instale as bibliotecas pip install requests beautifulsoup4 Agora, vamos desenvolver o código Resultado da execução Título: A Light in the Attic Preço: £51.77 Disponibilidade: In stock --- Título: Tipping the Velvet Preço: £53.74 Disponibilidade: In stock --- Título: Soumission Preço: £50.10 Disponibilidade: In stock --- Título: Sharp Objects Preço: £47.82 Disponibilidade: In stock --- Título: Sapiens: A Brief History of Humankind Preço: £54.23 Disponibilidade: In stock --- Entendo o código fonte Entendendo a função - requests.get(url) O que essa linha faz? response = requests.get(url) Ela envia uma requisição HTTP do tipo GET  para a URL informada, ou seja, ela acessa o site  como se fosse um navegador pedindo o conteúdo da página. Se a URL for: url = "http://books.toscrape.com/" Então requests.get(url)  vai fazer a mesma coisa que você digitar esse endereço no seu navegador e apertar "Enter". O que é o requests? O requests é uma biblioteca super popular no Python pra lidar com requisições HTTP (GET, POST, PUT, DELETE...). Ela é tipo o "correio" do seu código: você manda uma carta (a requisição) e espera a resposta (o conteúdo do site). O que vem dentro de response? O objeto response traz várias informações importantes sobre a resposta da página. Algumas que a gente usa bastante: response.status_code → mostra o código de status HTTP  (200, 404, 500...); 200 = Sucesso ✨ 404 = Página não encontrada ❌ response.text → o HTML completo da página  (em formato string); response.content → igual ao text, mas em bytes (útil pra imagens, PDFs etc.); response.headers → os headers  HTTP que o servidor enviou (dá pra ver tipo o tipo de conteúdo, encoding etc.). Dica de ouro: Sempre teste o status_code antes de seguir com o scraping, tipo: if response.status_code == 200: # Tudo certo, bora continuar else: print("Erro ao acessar a página") Assim seu código não quebra se o site estiver fora do ar ou mudar o caminho. Entendendo a função - BeautifulSoup() O que essa linha faz? soup = BeautifulSoup(response.text, 'html.parser') O BeautifulSoup  é uma ferramenta de parsing HTML  (ou seja, de “entender” o HTML). Ele transforma aquele texto enorme que vem do site  em um objeto navegável , onde você pode buscar tags, atributos, classes, textos... tudo de forma simples. response.text: é o HTML da página , que veio da requisição com requests.get(). 'html.parser' : é o parser  usado, ou seja, o motor que vai interpretar esse HTML. Existem outros parsers como 'lxml' ou 'html5lib', mas o 'html.parser' já vem com o Python e funciona bem na maioria dos casos. O que a variável soup vira? Ela vira um objeto BeautifulSoup . Esse objeto representa toda a estrutura da página, e aí você pode usar métodos como: .find() → pega o primeiro elemento que corresponde ao que você procura. .find_all() → pega todos  os elementos que batem com o filtro. .select() → busca usando seletores CSS  (como .classe, #id, tag tag). .text ou .get_text() → extrai só o texto do elemento, sem tags HTML. 🔍 Exemplo visual: html = "Oi!" soup = BeautifulSoup(html, 'html.parser') print(soup.h1) # Oi! print(soup.h1.text) # Oi! Em contexto com scraping: response = requests.get(" http://books.toscrape.com/") soup = BeautifulSoup(response.text, 'html.parser') # Agora dá pra buscar qualquer tag: title_tag = soup.find('title') print(title_tag.text) # Vai imprimir o título da página Entendendo a função - soup.find_all() O que essa linha faz? books = soup.find_all('article', class_='product_pod') Ela busca todos os elementos HTML  que representam livros na página, usando como base a tag HTML article  e a classe CSS product_pod . No site Books to Scrape, cada livro é exibido dentro de uma estrutura mais ou menos assim: < article class=" product_pod "> £51.77 In stock Ou seja, essa linha está dizendo: “Ei, BeautifulSoup, pega pra mim todos os elementos article que tenham a classe product_pod, e me devolve em uma lista chamada books.” Que tipo de dado ela retorna? books será uma lista de objetos BeautifulSoup , cada um representando um livro. Aí a gente pode percorrer essa lista com um for, e extrair os dados de cada livro individualmente (como o título, o preço e a disponibilidade). [ ..., ..., ... (20 vezes) ] Entendendo a função - book.find() O que essa linha faz? price = book.find('p', class_='price_color').text O método .find()  é usado para buscar o primeiro elemento HTML  que corresponda ao filtro que você indicar. A estrutura básica é: elemento = objeto_soup.find(nome_da_tag, atributos_opcionais) No nosso caso: book.find('p', class_='price_color') Significa: “Procure dentro do book pela primeira tag  que tenha a classe price_col or .” 🔍 Exemplos com .find(): Pegando o preço: preco = book.find('p', class_='price_color').text # Resultado: "£13.76" Pegando o título: titulo = book.find('h3').a['title'] # O h3 tem uma tag dentro com o atributo "title" Conclusão: Vale a pena usar Scraping com Python? Com certeza! Scraping com Python  é uma habilidade super útil pra qualquer pessoa que trabalha com dados, automação ou simplesmente quer otimizar tarefas repetitivas. Com algumas linhas de código e bibliotecas como requests e BeautifulSoup, você consegue extrair informações valiosas da web de forma rápida e eficiente . Além disso, Python é acessível, tem uma comunidade gigante, e uma tonelada de tutoriais e recursos — ou seja, você nunca tá sozinho nessa jornada. Porém, é importante lembrar: Nem todo site permite scraping  — sempre respeite o robots.txt e os termos de uso; Mudanças na estrutura do HTML podem quebrar seu código — então mantenha seu scraper atualizado; Sites mais complexos (com JavaScript, login etc.) podem exigir ferramentas mais avançadas como Selenium  ou Scra py. Se você está começando agora, esse post foi só o primeiro passo. Daqui pra frente, você pode evoluir pra salvar os dados em planilhas usando Pandas , bancos de dados, integrar com dashboards, ou até criar bots de automação mais complexos. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • Como se tornar um Engenheiro de Dados em 6 passos

    Quer se tornar um Engenheiro de Dados? Como se tornar um Engenheiro de Dados Introdução A engenharia de dados  é uma das carreiras mais promissoras do mercado de tecnologia. Com a explosão do volume de dados, as empresas precisam de profissionais capazes de coletar, armazenar, processar e transformar dados brutos em informações valiosas. O salário médio de um engenheiro de dados no Brasil  é de R$ 13.392,93 , podendo chegar a R$ 16.453,60 em São Paulo  e ultrapassar R$ 23.000  para profissionais mais experientes ( Salario.com.br ). Se você quer ingressar nessa área e conquistar essas oportunidades, siga estes 6 passos essenciais  para se tornar um engenheiro de dados de sucesso! Compreenda o Mercado de Trabalho e as Perspectivas Salariais O que faz um engenheiro de dados? Constrói pipelines de dados  para coletar, transformar e armazenar informações. Gerencia bancos de dados SQL e NoSQL  para estruturar e organizar informações. Implementa arquiteturas de Big Data  para lidar com grandes volumes de dados. Trabalha com nuvem (AWS, Azure, GCP)  para armazenar e processar dados de forma escalável. Fornece dados confiáveis  para cientistas de dados e analistas. A seguir, veja os salários médios  por região no Brasil: Domine Linguagens de Programação Essenciais A programação é fundamental  para criar pipelines de dados eficientes, automatizar processos e lidar com grandes volumes de informação. Python Possui bibliotecas poderosas  como Pandas, PySpark e Airflow. É amplamente utilizado em ETL, análise de dados e machine learning . Oferece integração fácil com bancos de dados, cloud e Big Data . SQL Essencial para extrair e manipular dados armazenados em bancos relacionais . É usado para transformar e agregar dados  antes da análise. Bancos populares: PostgreSQL, MySQL, SQL Server . Quer aprender mais sobre SQL? Baixe o E-Book gratuito agora! Scala e Java Usados em processamento de dados em larga escala  com Apache Spark. Oferecem melhor desempenho  para cargas de trabalho intensivas. Aprenda Sobre Bancos de Dados e Armazenamento Os dados precisam ser armazenados corretamente  para garantir segurança e acesso eficiente. Bancos Relacionais (SQL) Utilizados quando os dados possuem estrutura fixa  (ex: registros de clientes, vendas). Bancos mais usados: PostgreSQL, MySQL, SQL Server . Bancos NoSQL Projetados para armazenar grandes volumes de dados não estruturados . Ideais para logs, dados de IoT e documentos JSON . Exemplos: MongoDB, Cassandra, DynamoDB . Data Warehouses Criados para armazenar grandes volumes de dados históricos e otimizar consultas analíticas . Ferramentas: Google BigQuery, Amazon Redshift, Snowflake . Desenvolva Competências em Big Data Quando os dados crescem, ferramentas comuns não bastam . Você precisará dominar: Apache Spark Processa grandes volumes de dados de forma distribuída . Suporte a Python, Scala e Java . Apache Hadoop Usado para armazenar e processar dados distribuídos . Menos utilizado hoje, mas ainda presente em grandes empresas. Streaming de Dados (Tempo Real) Kafka  – Processamento de eventos e mensagens. Flink  – Processamento contínuo de grandes fluxos de dados. Adquira Conhecimentos em Computação em Nuvem A maioria das empresas processa dados na nuvem , então conhecer plataformas como AWS, Azure e Google Cloud  é essencial. AWS (Amazon Web Services) S3  → Armazenamento escalável. Redshift  → Data warehouse. Glue  → Pipelines ETL serverless. Google Cloud BigQuery  → Consultas ultra-rápidas para Big Data. Microsoft Azure Synapse Analytics  → Solução de análise avançada. Desenvolva Soft Skills Essenciais Além das habilidades técnicas, algumas soft skills  são indispensáveis para um engenheiro de dados: ✅ Resolução de Problemas  – Dados são caóticos, você precisará criar soluções escaláveis. ✅ Comunicação  – Explicar conceitos técnicos para times não técnicos. ✅ Trabalho em Equipe  – Você trabalhará com cientistas de dados, analistas e engenheiros de software. ✅ Gestão de Tempo  – Projetos de dados podem ser longos e complexos. Conclusão A engenharia de dados é um campo essencial e em rápido crescimento , com alta demanda no mercado e salários atrativos. No entanto, se destacar na área exige mais do que apenas conhecimento técnico . Ao seguir esses 6 passos , você estará construindo uma base sólida para sua carreira: ✅ Dominar linguagens de programação  como Python, SQL e Scala para manipulação e processamento de dados. ✅ Compreender bancos de dados  relacionais (SQL) e NoSQL para estruturar e armazenar informações de forma eficiente. ✅ Aprender sobre Big Data  e ferramentas como Apache Spark e Hadoop para processar grandes volumes de dados. ✅ Entender computação em nuvem , utilizando serviços como AWS, Google Cloud e Azure para escalabilidade e segurança. ✅ Desenvolver habilidades interpessoais , como comunicação, trabalho em equipe e resolução de problemas, para atuar de forma eficaz em times multidisciplinares. A prática e o aprendizado contínuo são a chave para o sucesso!  Comece explorando projetos práticos, participe de comunidades, contribua para repositórios open-source e busque certificações relevantes para consolidar seus conhecimentos. Se você quer se aprofundar no universo da engenharia de dados , continue acompanhando nossos conteúdos e se inscreva na nossa newsletter para receber novidades exclusivas! Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • Criando ETLs simples com Python

    Criando ETLs simples com Python ETL de forma simples ETL é a sigla para Extract, Transform, Load  (Extração, Transformação e Carga). Trata-se de um processo fundamental em engenharia de dados, permitindo a coleta de informações de diferentes fontes, sua padronização e armazenamento em um destino adequado, como um banco de dados ou data warehouse. A ideia deste Post é ensinar sobre como criar ETLs de uma forma simples e prática para aqueles que estão em busca de entender os fundamentos. Para isso, iremos criar um exemplo simples, porém bem claro de como criar um ETL em Python. Mais a frente falamos dos detalhes, por enquanto, vamos entender mais a parte teórica. As Três Etapas do ETL Extração (Extract) • Coleta dados de diversas fontes: No mundo Big Data existe infinitas possibilidades de extrair dados para extrair insights. Mas como assim? No fim das contas, o que um Engenheiro de Dados faz é tornar possível que através da coleta de Dados, tomadas de decisões sejam feitas. É claro que ele não faz isso sozinho, existe toda uma pipeline de dados, seja arquitetural ou negocial onde Cientista de Dados e Analista de Dados em conjunto utilizando uma plataforma de Dados, tornam os dados coletados em algo de valor. Mas onde extrair Dados para fazer este ETL ? Internet utilizando algum crawler, arquivos espalhados pelos repositórios da empresa, Banco de Dados, APIs e até o próprio Data Lake, que seria o repositório central de Dados. Transformação (Transform) A transformação deve ser pensada em algo que após acesso aos dados extraídos, você possa enriquece-los, trata-los para evitar duplicação ou remover informações que não sejam necessárias. Carga (Load) Após a extração e tratamento (Transformação) dos Dados, estes devem ser disponibilizados em algum local para que sejam consumidos. O consumo destes dados e decisões que serão tomadas irão agregar valor a todo o trabalho feito anteriormente. Essa carga pode ser feita em um novo arquivo, por exemplo um arquivo CSV, ou em um Banco de Dados, ou no local mais comum em Big Data, em um Data Warehouse . Por que o ETL é Importante? Melhora a qualidade dos dados : Um dos papeis dos ETLs é prover a qualidade dos dados após a extração da origem, ou seja, é totalmente possível aplicar qualquer tratamento na etapa de transformação. Facilita a análise : Os dados ficam isolados do ambiente produtivo gerando uma facilidade de consumo e desempenho. Automatiza processos : É possível automatizar toda a extração, transformação e load em determinadas horas do dia. Isso facilita acesso aos dados sem necessidade de intervenção manual. Elimina altos workloads em bancos transacionais: É comum nas empresas as áreas estratégicas consumirem dados dos bancos de dados de produção, como por exemplo o principal banco da empresa usada na plataforma, para gerar relatórios e dependendo do volume podendo impactar o desempenho do banco de dados pois muitas vezes não é o melhor cenário para a extração de um volume alto de dados. Dessa forma, são criados ETLs para isolar este consumo para um local mais apropriado, como um Data Warehouse. Ferramentas Populares de ETL Talend : Solução open-source com diversos conectores. Apache Nifi : Ideal para fluxos de dados em tempo real. Pentaho Data Integration (PDI) : Muito usado para ETLs complexos. AWS Glue : Serviço gerenciado da Amazon para ETL em nuvem. Google Dataflow : Focado em processamento de dados escalável. Exemplos de ETL com Python A ideia deste exemplo será um passo a passo de como criar um ETL usando Python. Saiba que ETL independe de linguagem de programação, mas é muito comum o uso de Python e SQL por serem linguagens que possuem uma série de vantagens mas que não entraremos nos detalhes neste Post. Para este exemplo iremos extrair os dados de uma API da Internet de um site chamado https://jsonplaceholder.typicode.com/ onde é fornecido uma API que retorna um JSON. Essa API retorna 100 registros fictícios relacionados a Posts onde temos o seguinte exemplo de JSON: { "userId": 1, "id": 4, "title": "eum et est occaecati", "body": "ullam et saepe reiciendis voluptatem adipisci\nsit amet autem assumenda provident rerum culpa\nquis hic commodi nesciunt rem tenetur doloremque ipsam iure\nquis sunt voluptatem rerum illo velit" } Após a extração dos Dados, iremos efetuar um tratamento visando enriquecer mais os dados para que sejam carregados em um arquivo CSV. Finalizando estes passos, teremos um ETL simples e funcional ! Vamos ao código abaixo: Entendendo o ETL Perceba que é um código Python simples dividido em três etapas onde: Começamos importando as biblioteca necessárias como pandas e requests , esta última responsável por chamar a API externa. Já o pandas, temos um tutorial nesse link Análise de Dados usando Pandas: O Guia Completo para Iniciantes . Após a importação das bibliotecas nas 6 e 7, é iniciado a extração dos dados , onde é feito um request na API externa https://jsonplaceholder.typicode.com/posts onde irá retornar 100 registros que serão convertidos em formato JSON. Na linha 10 é criado um Dataframe, para entender mais sobre Dataframes, acesse o link a seguir Criando Schemas com Spark Dataframes usando PySpark . A ideia é usar o poder computacional do Pandas para manter e processar os dados em memória. Na linha 18 a 27, é feito a transformação dos dados , ou seja, renomeamos algumas colunas e normalizamos alguns dados, como por exemplo, o campo Conteudo , onde removemos espaços e quebras de linhas usando Regex. Após o dados transformado, faremos o load , ou seja, carregaremos para um destino que no caso é uma planilha CSV para que seja analisada mais tarde. Conclusão Veja que a principio o termo ETL parece ser algo assustador, mas é algo mais simples do que você imagina. Existem diversas formas de se criar um ETL, usando Python, SQL ou ferramentas de mercado que já fazem toda a parte de automatização. Basta avaliar e escolher a mais adequada para o seu contexto. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • Como transformar Dados em Tempo Real usando AWS Kinesis Firehose e Lambda

    Lambda Transform Introdução Como transformar Dados em Tempo Real usando AWS Kinesis Firehose e Lambda? A AWS fornece diferentes maneiras de transformar dados por meio de seus serviços e um dos meus favoritos é o Kinesis Firehose Data Transformation. Essa é uma estratégia para transformar dados aproveitando o serviço de Streaming na entregar dos dados. Para este tutorial, vamos ensinar em como criar um Kinesis Firehose Data Transformation baseado na estratégia abaixo. O Kinesis Firehose enviará dados e, em vez de escrever no S3, invocará um Lambda para transformar esses dados e, em seguida, enviá-los de volta ao Kinesis Firehose, que entregará os mesmos dados ao S3. Kinesis Firehose Data Transformation Criando o projeto Para este post usaremos Java como linguagem e Maven como gerenciador de dependências. Portanto, é necessário gerar um projeto Maven que criará a estrutura do nosso projeto. Se você não sabe como gerar um projeto Maven, recomendo ler o post Gerando um projeto Maven sem IDE em 2 minutos , onde mostro como gerá-lo. Estrutura do projeto Após gerar o projeto Maven e importá-lo para sua IDE, vamos criar os mesmos arquivos e pacotes conforme imagem ao lado, exceto o pom.xml que foi criado pelo gerador maven. Dentro da pasta java , crie um pacote chamado coffee.tips.lambda e crie também uma classe Java chamada Handler.java dentro deste mesmo pacote. Agora, crie um pacote chamado model dentro do pacote coffee.tips e então, crie duas classes java: Record.java Records.java Por fim, crie um novo pacote chamado status e também crie um enum chamada Status . Criando a classe Record Por que precisamos da classe Record? Kinesis Firehose espera um objeto como retorno contendo os campos acima. Isso acontece quando o Kinesis Firehose invoca o Lambda para transformar os dados e o mesmo Lambda deve retornar um objeto contendo esses campos preenchidos. recordId Este valor de campo deve conter o mesmo id vindo do Kinesis result Esse valor de campo controla o resultado do status da transformação. Os valores possíveis são: Ok : Registro transformado com sucesso. Dropped : O registro rejeitado intencionalmente de acordo com sua lógica de processamento. ProcessingFailed : Os dados não puderam ser transformados. data Este campo deve conter os dados após serem convertidos usando o algoritmo de conversão base64. Este modelo deve conter os seguintes parâmetros. Caso contrário, o Kinesis Firehose rejeita e define como falha na transformação. Criando a classe Records A classe Records será nossa classe Java onde será utilizada como retorno na classe Handler.java onde abordaremos mais a frente, contendo uma lista do tipo Record. Criando o Enum Status Decidi criar o Enum acima apenas para criar um código mais elegante, mas é útil quando precisamos mapear valores diferentes para um contexto específico. Criando a classe Handler A classe Handler será nosso controlador para o Lambda. Este Lambda será invocado pelo Kinesis Firehose passando alguns parâmetros contendo os dados a serem transformados. Observe que, para o método handleRequest , um parâmetro chamado input do tipo KinesisFirehoseEvent contém os registros enviados pelo Kinesis Firehose e o mesmo método retornará um objeto do tipo Records contendo uma lista de registros que posteriormente serão enviados de volta ao Kinesis Firerose entregando ao S3. Dentro da iteração usando o Java Stream, criamos algumas condições apenas para explorar como o campo de result funciona. Dependendo da condição, definimos o valor do result como Dropped , o que significa que os dados não serão entregues ao Kinesis Firehose. Caso contrário, para aqueles que foram definidos como Ok , os dados serão enviados para o Kinesis Firehose. Outro detalhe é que você pode alterar os valores durante a execução. Definimos "TECH" como o valor para o campo TICKER_SYMBOL quando o valor do campo SECTOR for TECHNOLOGY . É uma forma de transformar dados aplicando uma certa logica. Por fim, foram criados outros dois métodos apenas para decodificar e codificar os dados como requisito para o bom funcionamento do processamento. Atualizando o arquivo pom.xml Após gerar nosso projeto via Maven, precisamos adicionar algumas dependências e um plugin para empacotar o código e as bibliotecas para implantação. Seguindo o conteúdo do pom.xml abaixo: Criando recursos via Terraform Em vez de criar o Kinesis Firehose, Lambda, policies e roles manualmente por meio do console, vamos criar por meio do Terraform. Se você não conhece muito sobre Terraform, recomendo ver este tutorial Primeiros passos utilizando Terraform na AWS . Dentro da pasta terraform , crie os seguintes arquivos: Conteúdo do arquivo vars.tf O arquivo vars.tf é onde declaramos as variáveis. As variáveis ​​fornecem flexibilidade quando precisamos trabalhar com recursos diferentes. Conteúdo do arquivo vars.tfvars Agora precisamos definir os valores dessas variáveis. Então, vamos criar uma pasta chamada development dentro da pasta terraform . Após a criação da pasta. Crie um arquivo chamado vars.tfvars como na imagem e cole o conteúdo abaixo. Observe o campo bucket , você deve especificar o nome do seu próprio bucket. O nome do bucket deve ser único. Conteúdo do arquivo main.tf Para este arquivo, apenas declaramos o Provider. Provider é o serviço de nuvem que usaremos para criar nossos recursos. Neste caso, estamos usando a AWS como provider e o Terraform fará o download dos pacotes necessários para criar os recursos. Observe que, para o campo region , estamos usando a palavra-chave var para atribuir o valor da região já declarado no arquivo vars.tfvars . Conteúdo do arquivo s3.tf Este arquivo é onde declaramos os recursos relacionados ao S3. Nesse caso, estamos criando apenas o bucket S3. Mas, se você deseja criar mais recursos relacionados ao S3, como policies, roles e etc, pode declará-lo aqui. Conteúdo do arquivo lambda.tf O conteúdo abaixo será responsável pela criação do AWS Lambda e suas roles e policies . Observe que no mesmo arquivo estamos criando um recurso chamado aws_s3_object . É uma estratégia carregar o arquivo Jar diretamente no S3 após o empacotamento. Manter alguns arquivos no S3 é uma forma inteligente quando trabalhamos com arquivos grandes. Entendendo o conteúdo do lambda.tf 1. Declaramos aws_iam_policy_document que descrevem quais ações os recursos que serão atribuídos a essas políticas podem executar. 2 . aws_iam_role fornece a função IAM e controlará algumas ações do Lambda. 3. Declaramos o recurso aws_s3_object porque queremos armazenar nosso arquivo Jar que será criado no S3. Assim, durante a fase de implantação, o Terraform obterá o arquivo Jar que será criado na pasta target e fará o upload para o S3. depends_on : O recurso atual somente será criado caso o recurso atribuído neste campo, já estivesse sido criado. bucket : É o nome do bucket onde também irá armazenar o arquivo Jar. key : N ome do arquivo Jar. source : L ocalização do arquivo de origem. etag : A ciona atualizações quando o valor muda. 4. aws_lambda_function é o recurso responsável por criar o Lambda e precisamos preencher alguns campos como: function_name : nome Lambda. role : Função do Lambda declarada nas etapas anteriores que fornece acesso aos serviços e recursos da AWS. handler : Neste campo você precisa passar o caminho da classe principal. source_code_hash : Este campo é responsável por acionar as atualizações do lambda. s3_bucket : É o nome do bucket onde também irá armazenar o arquivo Jar gerado durante o deploy. s3_key : N ome do arquivo Jar. runtime : A qui você pode definir a linguagem de programação suportada pelo Lambda. Para este exemplo, java 11 . timeout : Tempo limite de execução do Lambda. Lembrando que o timeout máximo é de minutos. 5. aws_iam_policy fornece políticas IAM para os recursos onde definimos algumas ações a serem executadas. Nesse caso, definimos ações como invocação do Lambda e habilitação aos logs no CloudWatch. 6. Para o recurso aws_iam_role_policy_attachment , podemos anexar policies do IAM às roles. Nesse caso, anexamos as policies lambda_iam_role criadas anteriormente. 7. Finalmente, temos o recurso aws_lambda_permission. Precisamos desse recurso para dar permissão ao Kinesis Firehose para invocar o Lambda. Conteúdo do arquivo kinesis.tf Entendendo o conteúdo do kinesis.tf 1. Declaramos o recurso aws_kinesis_firehose_delivery_stream e seus campos, seguindo os detalhes: destination : Esse é o próprio destino, o Kinesis fornece um mecanismo para entregar dados ao S3 (extended_s3), Redshift, Elasticsearch (OpenSearch serviço AWS), splunk e http_endpoint. name : Nome Kinesis Firehose. depends_on : O recurso atual somente será criado caso o recurso atribuído neste campo, já estivesse sido criado, ou seja, Kinesis Firehose será criado se o S3 Bucket já existir. extended_s3_configuration : 1. bucket_arn : S3 Bucket utilizando o prefixo arn. 2. role_arn : ARN role. 3. prefix : P asta do S3 Bucket onde os dados serão armazenados. Você pode especificar o formato de pastas usando as seguintes expressões, " /year=! {timestamp:yyyy}/month=!{timestamp:MM}/ ". 4. error_output_prefix : Para este campo, você pode definir um caminho para armazenar os resultados da falha do processo. 5. buffer_interval : Buffer do Kinesis Firehose utilizando configurações de intervalo para a entrega do dado. 6. buffer_size : Buffer do Kinesis Firehose utilizando configurações de tamanho de dados para a entrega do dado. 7. compression_format: Existem algumas opções de formato de compactação como ZIP, Snappy, HADOOP SNAPPY e GZIP. Para este tutorial, escolhemos GZIP. processing_configuration : Esse é o bloco onde definimos qual recurso será processado. Para este caso, AWS Lambda. 1. enabled : true para habilitar e false para desabilitar. 2. type : Tipo do processador. No caso, Lambda. 3. parameter_value : Nome da função Lambda com prefixo arn. 2. Declaramos aws_iam_policy_document que descrevem quais ações os recursos que serão atribuídos a essas políticas podem executar. 3. aws_iam_role recurso que fornece a função do IAM para controlar algumas ações do Kinesis. 4. aws_iam_policy fornece IAM policies para os recursos onde definimos algumas ações a serem executadas. Nesse caso, definimos S3 e algumas ações do Lambda. 5. Para o recurso aws_iam_role_policy_attachment , podemos anexar policies do IAM às roles. Nesse caso, anexamos as policies firehose_iam_role e firehose_policies criadas anteriormente. Packaging Criamos nosso projeto Maven, classe Handler com arquivos Java e Terraform para criar nossos recursos na AWS. Agora, vamos executar os seguintes comandos para o deploy do nosso projeto. Primeiro, abra o terminal e verifique se você está no diretório raiz do projeto e execute o seguinte comando maven: mvn package O comando acima empacotará o projeto criando o arquivo Jar a ser implantado e carregado no S3. Para ter certeza, verifique a pasta target e veja se alguns arquivos foram criados, incluindo o arquivo lambda-kinesis-transform-1.0.jar . Executando Terraform Agora, vamos executar alguns comandos do Terraform. Dentro da pasta terraform , execute os seguintes comandos no terminal: terraform init O comando acima iniciará o terraform, baixando as bibliotecas do terraform e também validará os arquivos do terraform. Para o próximo comando, vamos executar o comando plan para verificar quais recursos serão criados. terraform plan -var-file=development/vars.tfvars Após a execução, você verá logs semelhantes no console: Por fim, podemos solicitar a criação dos recursos através do seguinte comando: terraform apply -var-file=development/vars.tfvars Após a execução, você deve confirmar para executar as ações, digite " sim ". Agora a provisão foi concluída! Enviando mensagens Bem, agora precisamos enviar algumas mensagens para serem transformadas e vamos enviá-las via console do Kinesis Firehose. Obviamente existem outras formas de enviar, mas para este tutorial vamos enviar pela forma mais fácil. Abra o console do Kinesis Firehose, acesse a opção Delivery Stream conforme a imagem abaixo. Na seção Test with demo data , clique no botão Start sending demo data para iniciar o envio. Após clicar, as mensagens serão enviadas pelo Kinesis Firehose e de acordo com as configurações do buffer, o Kinesis levará 2 minutos para entregar os dados ou caso atinja 1 MIB em quantidade de dados. Vamos dar uma olhada no nosso Lambda e ver as métricas: Clique na guia Monitor e depois, na opção Metrics e observe que o Lambda está sendo invocado e não há erros. Resultado dos Dados Transformados Agora que sabemos que tudo está funcionando bem, vamos dar uma olhada nos dados transformados diretamente no Amazon S3. Vá e acesse o S3 Bucket criado. Observe que muitos arquivos foram criados. Vamos ler um deles e ver os dados transformados. Escolha um arquivo como na imagem abaixo e clique no botão Actions e depois na opção Query with S3 Select . Seguindo as opções selecionadas na imagem abaixo, clique no botão Run SQL query para ver o resultado. Com base na imagem acima, você pode ver que, de acordo com a classe Handler.java , definimos um algoritmo para descartar dados com valor do campo CHANGE menor que zero e para aqueles com valor de campo SECTOR igual a TECHNOLOGY , definiríamos o valor de campo TICKER_SYMBOL como TECH . Este foi um exemplo de como você pode transformar dados usando Kinesis Firehose Data Transformation e Lambda como um componente barato para transformar dados. Parar de enviar mensagens Você pode parar de enviar mensagens antes de destruir os recursos criados via Terraform procurando economizar dinheiro. Então, basta voltar ao console do Kinesis Firehose e clicar no botão Stop sending demo data . Destroy As cobranças da AWS ocorrerão se você não destruir esses recursos. Portanto, recomendo destruí-los evitando algumas cobranças desnecessárias. Para evitá-lo, execute o comando abaixo. terraform destroy -var-file=development/vars.tfvars Lembra que você precisa confirmar essa operação, ok? Conclusão Definitivamente, Kinesis Firehose não é apenas um serviço de Streaming. Existe flexibilidade integrando os serviços da AWS e a possibilidade de entregar dados para diferentes destinos possibilitando a transformação de dados e aplicando a lógica de acordo com o seu caso de uso. Repositório GitHub Espero que tenha curtido!

  • Análise de Dados usando Pandas: O Guia Completo para Iniciantes

    A análise de dados é uma habilidade essencial no mundo atual, e o Pandas  é uma das bibliotecas mais populares para essa tarefa. Neste guia, vamos explorar o que é o Pandas, como instalá-lo, quem o utiliza, seus principais conceitos como os DataFrames, e exemplos práticos de uso. O que é o Pandas? O Pandas  é uma biblioteca de código aberto em Python usada para manipulação e análise de dados. Ele fornece estruturas de dados poderosas, como DataFrames  e Series , que facilitam o trabalho com grandes conjuntos de dados de forma eficiente e intuitiva. Com o Pandas, você pode: Limpar e transformar dados. Realizar análises estatísticas. Combinar e reorganizar conjuntos de dados. Exportar dados para diversos formatos, como CSV e Excel. Como instalar o Pandas? A instalação do Pandas é simples e pode ser feita com o comando abaixo: pip install pandas Se você está usando o Jupyter Notebook , não esqueça de verificar se o Pandas já está instalado com: !pip show pandas Para atualizar para a última versão: pip install --upgrade pandas Quem usa o Pandas? O Pandas é amplamente utilizado por profissionais de diferentes áreas de Dados, como: Cientistas de Dados : Para tratar e preparar dados para modelos de Machine Learning. Analistas de Dados : Para criar relatórios e gerar insights. Engenheiros de Dados : Para transformar e manipular grandes volumes de dados em pipelines. Pesquisadores Acadêmicos : Para organizar e analisar dados em estudos. Principais conceitos: DataFrames e Series Series : Uma estrutura de dados unidimensional, similar a uma lista ou coluna de Excel. DataFrame : Uma estrutura de dados bidimensional, semelhante a uma tabela, onde você pode manipular linhas e colunas com facilidade. Exemplo de criação de uma Series: import pandas as pd # Criando uma Series com dados de exemplo dados = [10, 20, 30, 40, 50] series = pd.Series(dados) print(series) Saída: 0 10 1 20 2 30 3 40 4 50 dtype: int64 Podemos também personalizar os índices: # Criando uma Series com índices personalizados series = pd.Series(dados, index=["A", "B", "C", "D", "E"]) print(series) Saída: A 10 B 20 C 30 D 40 E 50 dtype: int64 Podemos acessar elementos específicos: # Acessando um valor pelo índice print(series["C"]) # Saída: 30 Exemplo de criação de um DataFrame: import pandas as pd data = { "Nome": ["Ana", "Bruno", "Carlos"], "Idade": [25, 30, 22], "Cidade": ["São Paulo", "Rio de Janeiro", "Belo Horizonte"] } df = pd.DataFrame(data) print(df) Saída: Nome Idade Cidade 0 Ana 25 São Paulo 1 Bruno 30 Rio de Janeiro 2 Carlos 22 Belo Horizonte Casos de uso do Pandas Limpeza de Dados : Remover valores ausentes ou duplicados. Transformação de Dados : Reorganizar colunas ou calcular novos valores. Análise Estatística : Calcular médias, medianas e correlações. Visualização : Integrar com bibliotecas como Matplotlib e Seaborn. Exemplos práticos com código Leitura de dados de um arquivo CSV: # Ler um arquivo CSV import pandas as pd df = pd.read_csv("dados.csv") print(df.head()) # Exibe as 5 primeiras linhas Filtragem de dados: # Filtrar dados onde a idade é maior que 25 filtro = df[df["Idade"] > 25] print(filtro) Agrupamento de dados: # Agrupar por cidade e calcular a média das idades agrupado = df.groupby("Cidade")["Idade"].mean() print(agrupado) Exportação para CSV: # Exportar o DataFrame para um novo arquivo CSV df.to_csv("resultado.csv", index=False) Conclusão O Pandas  é uma ferramenta indispensável para quem trabalha com dados, oferecendo funcionalidades que tornam a análise mais rápida e eficiente. Se você é iniciante, comece explorando seus próprios conjuntos de dados e testando as funcionalidades mencionadas aqui. Fique à vontade para deixar suas dúvidas nos comentários e se inscrever na nossa newsletter para mais conteúdos como este: Inscreva-se aqui . Bons estudos e boas análises de dados! 😉

  • O que são comandos DDL ou Data Definition Language Commands: Guia para iniciantes em SQL

    Data Definition Language Commands O que são comandos DDL ou Data Definition Language Commands? Se você está começando no mundo do SQL, já deve ter ouvido falar sobre DDL  – a Linguagem de Definição de Dados . Basicamente, são comandos usados para criar e modificar a estrutura do banco de dados, como tabelas, índices e esquemas. Diferente dos comandos DML  (que manipulam os dados), os comandos DDL  mexem na estrutura do banco. Os principais comandos DDL são: CREATE  (Criar) ALTER  (Modificar) DROP  (Excluir) TRUNCATE  (Limpar) RENAME  (Renomear) COMMENT  (Comentar) 1. CREATE (Criar) O comando CREATE  é utilizado para criar novos objetos no banco de dados, como tabelas e bancos de dados. Criando um banco de dados CREATE DATABASE MeuBanco; Esse comando cria um novo banco de dados chamado MeuBanco. Você pode criar vários bancos no mesmo servidor para organizar melhor os seus dados. Criando uma tabela CREATE TABLE Clientes ( ID INT PRIMARY KEY AUTO_INCREMENT, Nome VARCHAR(100) NOT NULL, Email VARCHAR(100) UNIQUE NOT NULL, Idade INT CHECK (Idade >= 18), DataCadastro TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); Aqui, estamos criando a tabela Clientes  com algumas colunas essenciais. Veja que: ID é uma chave primária e se auto incrementa. Nome e Email não podem ser nulos. Email precisa ser único. Idade precisa ser maior ou igual a 18. DataCadastro recebe automaticamente a data/hora da inserção. 2. ALTER (Modificar) O ALTER  permite fazer mudanças na estrutura de uma tabela existente sem precisar recriá-la. Adicionando uma nova coluna ALTER TABLE Clientes ADD Telefone VARCHAR(15) NOT NULL; Esse comando adiciona a coluna Telefone  à tabela Clientes . O NOT NULL  significa que todo cliente deve ter um telefone cadastrado. Alterando o tipo de uma coluna ALTER TABLE Clientes MODIFY COLUMN Idade SMALLINT; Aqui, estamos alterando o tipo da coluna Idade para SMALLINT, que ocupa menos espaço na memória. Renomeando uma coluna ALTER TABLE Clientes RENAME COLUMN Telefone TO Contato; Se quiser mudar o nome de uma coluna sem alterar seus dados, esse comando resolve! Removendo uma coluna ALTER TABLE Clientes DROP COLUMN Contato; Isso remove a coluna Contato  da tabela. E-book Grátis SQL Avançado Quer Aprender mais sobre SQL? Baixe nosso E-book Grátis! 3. DROP (Excluir) Se precisar apagar completamente uma tabela ou um banco de dados, o comando DROP  é a solução – mas use com cuidado! Excluindo uma tabela DROP TABLE Clientes; Isso apaga a tabela Clientes  e todos os seus registros. Não há como recuperar os dados após isso! Excluindo um banco de dados DROP DATABASE MeuBanco; Isso remove MeuBanco  para sempre. Certifique-se de ter um backup antes! 4. TRUNCATE (Limpar dados) Quer apagar todos os dados de uma tabela, mas manter sua estrutura? Use TRUNCATE ! TRUNCATE TABLE Clientes; Diferente do DROP , esse comando apaga apenas os dados , mas mantém a tabela para futuras inserções. Diferença entre DROP e TRUNCATE Comando O que faz? DROP Remove a tabela e todos os seus dados. TRUNCATE Apenas apaga os registros, mantendo a estrutura. Use TRUNCATE quando quiser limpar uma tabela sem precisar recriá-la depois! 5. RENAME (Renomear) Se precisar mudar o nome de uma tabela, o RENAME  resolve isso de forma simples. RENAME TABLE Clientes TO ClientesNovo; Agora, Clientes  passa a se chamar ClientesNovo . Isso pode ser útil quando uma tabela muda de propósito e precisa de um nome mais adequado. 6. COMMENT (Comentar) O comando COMMENT  permite adicionar descrições em tabelas e colunas, ajudando na documentação do banco de dados. Adicionando um comentário a uma tabela COMMENT ON TABLE Clientes IS 'Tabela que armazena informações dos clientes da empresa'; Adicionando um comentário a uma coluna COMMENT ON COLUMN Clientes.Email IS 'Endereço de e-mail único do cliente'; Isso facilita a organização e a manutenção do banco de dados! Se você trabalha em equipe, adicionar comentários evita confusão e facilita o entendimento da estrutura do banco. Conclusão Agora que você conhece os principais comandos DDL ou Data Definition Language , vamos recapitular: CREATE  ➝ Cria tabelas e bancos de dados. ALTER  ➝ Modifica tabelas existentes. DROP  ➝ Exclui tabelas e bancos permanentemente. TRUNCATE  ➝ Limpa os dados sem apagar a tabela. RENAME  ➝ Renomeia tabelas e colunas. COMMENT  ➝ Adiciona descrições para melhor documentação. Saber utilizar esses comandos é essencial para qualquer profissional de banco de dados! Comece a praticar e veja como eles podem facilitar seu trabalho no dia a dia. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • O que é Streaming de Dados? Entenda o Conceito e as Ferramentas!

    O que é Streaming de Dados? O que é Streaming de Dados? O Streaming de Dados  é uma forma de processar informações em tempo real, permitindo que os dados sejam analisados conforme são gerados. Diferente do processamento tradicional em lotes (batch processing), onde os dados são coletados e processados periodicamente, o streaming possibilita insights imediatos, sendo essencial para aplicações que demandam baixa latência. Como funciona o Streaming de Dados? O streaming de dados segue um fluxo contínuo, composto por três etapas principais: Produção de Dados: Diversas fontes podem gerar dados em tempo real, como sensores IoT, logs de servidores, eventos de redes sociais, transações financeiras e interações em aplicativos. Essas fontes produzem dados constantemente, sem um intervalo fixo, criando um fluxo contínuo de informações. Processamento em Tempo Real: O processamento é realizado por frameworks e motores de stream processing, como Apache Kafka, Apache Flink e Spark Streaming . Os dados são ingeridos, filtrados, transformados e analisados conforme chegam, possibilitando a geração de alertas e insights instantâneos. Dependendo do caso de uso, algoritmos de machine learning  ou regras de negócios  podem ser aplicados para enriquecer a análise. Entrega e Armazenamento: Após o processamento, os dados podem ser enviados para diferentes destinos, como dashboards analíticos, bancos de dados, APIs e notificações automáticas . Algumas soluções utilizam data lakes  para armazenar grandes volumes de informações processadas e garantir acesso futuro. Em sistemas de automação, os eventos processados podem acionar outras aplicações, como sistemas de recomendação ou respostas automáticas a incidentes. Comparando Streaming de Dados e Processamento em Lotes Diferenças entre Streaming de Dados e Processamento em Lotes Principais Ferramentas para Streaming de Dados Existem diversas ferramentas que possibilitam a implementação de pipelines de streaming de dados. Algumas das mais populares são: Apache Kafka : Plataforma de mensageria distribuída que permite o envio e consumo de eventos em tempo real. Apache Flink : Framework poderoso para processamento de streams de baixa latência e alta escalabilidade. Apache Spark Streaming : Extensão do Apache Spark que permite processamento distribuído em tempo real. Google Cloud Dataflow : Serviço gerenciado pelo Google para processamento de dados em fluxo e em lotes. Amazon Kinesis : Solução da AWS para coleta, processamento e análise de streams de dados. Ferramentas de Streaming para Usuários Comuns Além das soluções para engenheiros de dados, há ferramentas populares usadas por pessoas no dia a dia para consumo de streaming: Netflix : Plataforma de streaming de vídeo sob demanda. Spotify : Streaming de músicas, podcasts e áudio em tempo real. YouTube Live : Transmissão ao vivo de conteúdos para públicos diversos. Twitch : Plataforma de streaming focada em games e transmissões ao vivo Benefícios do Streaming de Dados Tomada de decisão em tempo real : Empresas podem reagir instantaneamente a eventos críticos, como fraudes bancárias ou falhas em sistemas de monitoramento. Escalabilidade : Plataformas de streaming podem lidar com grandes volumes de dados sem comprometer a performance, garantindo que a análise seja contínua e eficiente. Eficiência operacional : A capacidade de processar dados à medida que chegam reduz significativamente o tempo entre a coleta e a obtenção de insights, otimizando processos empresariais. Melhoria na experiência do usuário : Serviços como Netflix e Spotify utilizam streaming de dados para oferecer recomendações personalizadas em tempo real, aprimorando a interação com seus usuários. Monitoramento contínuo : Sistemas de segurança cibernética e aplicações de IoT dependem do streaming para detectar anomalias e agir rapidamente, evitando prejuízos. Integração com Inteligência Artificial : Algoritmos de machine learning podem ser aplicados em fluxos de dados para prever tendências, automatizar respostas e gerar insights valiosos. Conclusão E então, O que é streaming de dados? Streaming de dados está revolucionando a maneira como lidamos com informações, trazendo agilidade e maior poder analítico para empresas e aplicações modernas. Se você deseja implementar essa tecnologia, conhecer as ferramentas certas e entender as diferenças entre os modelos de processamento é essencial. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • Linguagem R: Aplicação, Vantagens e Exemplos

    Linguagem R O que é a linguagem R? R é uma linguagem de programação voltada para análise estatística, ciência de dados e machine learning. Amplamente utilizada por estatísticos e cientistas de dados, a linguagem oferece uma vasta gama de pacotes para manipulação de dados, visualização e modelagem estatística.  Quando e por que a linguagem R foi criada? A linguagem R foi criada em 1993  pelos estatísticos Ross Ihaka e Robert Gentleman  na Universidade de Auckland, na Nova Zelândia. O objetivo era fornecer uma alternativa gratuita e de código aberto para o software S , amplamente usado para análise estatística, mas que era proprietário. R foi desenvolvido para facilitar a análise de dados estatísticos , tornando mais acessível a manipulação de grandes volumes de dados e a criação de modelos estatísticos complexos. Em quais áreas o R é aplicado? R é amplamente usado em: Ciência de Dados : Manipulação de grandes volumes de dados e modelagem preditiva. Bioinformática : Análise genética e estatística aplicada à biologia. Financeiro : Modelos estatísticos para análise de risco e previsão de mercado. Pesquisas Acadêmicas : Estudos quantitativos e testes estatísticos. Saúde Pública : Análise de dados epidemiológicos e modelagem de surtos. Marketing : Análise de comportamento do consumidor e segmentação de mercado. Exemplos de Código em R Criando e manipulando um DataFrame Criando um gráfico de barras Criando um gráfico de dispersão Cálculo de Média, Mediana e Desvio Padrão Vantagens e Desvantagens da Linguagem R ✅ Vantagens Grande suporte para estatística e análise de dados. Comunidade ativa e vasta gama de pacotes. Excelente para visualização de dados com ggplot2 . Integrável com Python e outras linguagens. Código aberto e gratuito, sem necessidade de licença. ❌ Desvantagens Menos eficiente para manipulação de grandes volumes de dados comparado ao Python. Sintaxe pode ser confusa para iniciantes. Curva de aprendizado mais íngreme para quem não tem conhecimento em estatística. Desempenho pode ser inferior ao de outras linguagens em tarefas computacionalmente intensivas. Linguagem R vs Python: Qual a melhor escolha? R é frequentemente comparado ao Python , pois ambas são usadas para análise de dados. Aqui estão algumas diferenças principais: Conclusão:  R é mais forte em estatística e visualização, enquanto Python tem vantagem na integração com outras tecnologias e machine learning. Casos de Uso da Linguagem R Algumas empresas e setores onde R é amplamente utilizado: Facebook  usa R para análise de dados estatísticos. Google  aplica R para modelagem estatística em pesquisas. Bancos e fintechs  utilizam R para análise de risco financeiro. Pesquisadores acadêmicos  empregam R para modelagem estatística e machine learning. Empresas de saúde  usam R para análise epidemiológica e previsão de surtos. Conclusão R é uma linguagem extremamente poderosa para análise de dados, estatística e visualização. Seu foco estatístico faz com que seja uma escolha ideal para cientistas de dados e pesquisadores acadêmicos. Apesar de algumas limitações, como desempenho em Big Data, seu vasto ecossistema de pacotes e sua comunidade ativa fazem com que continue sendo uma das linguagens mais importantes na análise de dados. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • Entendendo UDF (User Defined Functions) com Exemplos Simples

    UDF - User Defined Functions O que é uma Spark UDF (User Defined Functions)? UDF (User Defined Function) é uma função definida pelo usuário que permite aplicar transformações personalizadas em colunas de um DataFrame. Embora o Spark possua diversas funções embutidas, nem sempre elas atendem a todas as necessidades. Quando isso acontece, podemos criar uma UDF para manipular os dados do jeito que quisermos. Por que usar UDFs no Spark? Permite criar lógicas personalizadas para manipulação de dados. Útil quando as funções nativas do Spark não são suficientes. Facilita a reutilização de código. Pode ser escrita em diferentes linguagens como Python, Scala e Java . Criando e Usando Spark UDFs Exemplo 1: Criando uma UDF para uso no Spark SQL Pontos importantes: A UDF name_length  retorna o número de caracteres do nome. Usamos spark.udf.register  para que a função possa ser utilizada diretamente em consultas SQL. Criamos uma tabela temporária pessoas  para demonstrar o uso da UDF em uma query SQL. Esse exemplo demonstra como registrar uma UDF para ser usada dentro de consultas SQL no Spark. Criamos uma função para contar o número de caracteres de um nome, útil para análises textuais e segmentação de clientes em bases de dados estruturadas. Podemos registrar uma UDF e utilizá-la diretamente em consultas SQL no Spark. Saída esperada: Vamos ver como criar UDFs usando PySpark . Exemplo 2: Criando uma UDF para converter texto em maiúsculo Pontos importantes: Utilizamos a função udf  do PySpark para definir a UDF. A função recebe um nome como entrada e retorna a versão em maiúsculo. O tipo de retorno é definido como StringType()  para garantir compatibilidade com Spark DataFrames. Neste exemplo, criamos uma UDF para converter os nomes em maiúsculas. O objetivo é transformar qualquer entrada textual em letras maiúsculas, facilitando padronizações e comparações de strings. Saída esperada: Exemplo 2: Criando uma UDF para calcular o dobro de um número Pontos importantes: A função double_value  retorna o dobro do número de entrada. Se o valor for None, a função retorna None para evitar erros. O tipo de retorno é IntegerType()  para corresponder ao tipo de dado esperado. Aqui, criamos uma UDF que recebe um número como entrada e retorna o seu dobro. Essa função pode ser útil para cálculos financeiros, métricas de análise e transformações matemáticas em geral. Saída esperada: Exemplo 3: Criando uma UDF para verificar se um número é par ou ímpar Pontos importantes: A função even_or_odd  retorna "Par" para números pares e "Ímpar" para números ímpares. O tipo de retorno é StringType() , pois estamos classificando os números como texto. Esse tipo de UDF é útil para categorização e segmentação de dados. Neste exemplo, criamos uma UDF que verifica se um número é par ou ímpar. Essa função pode ser usada para categorização de dados, segmentação de clientes, entre outros casos onde essa classificação seja relevante. Saída esperada: Considerações sobre UDFs Embora as UDFs sejam muito úteis, elas podem ter um desempenho inferior às funções nativas do Spark, pois são executadas linha por linha e podem impedir otimizações como o processamento em vetores. Algumas dicas para melhorar o desempenho: Sempre que possível, use funções nativas do Spark  antes de recorrer a uma UDF. Para funções matemáticas e estatísticas, prefira Spark SQL functions . Se precisar de UDFs mais eficientes, considere usar Pandas UDFs , que são otimizadas para processamento em lote. Conclusão As UDFs ou User Defined Functions são ferramentas poderosas para customizar transformações de dados. Com elas, você pode aplicar lógicas específicas que não estão disponíveis nas funções padrão do Spark. No entanto, é importante considerar a performance e sempre optar por soluções nativas quando possível. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

  • Airflow Sensor: Monitorando Condições em Workflows de Dados

    Apache Airflow é uma ferramenta poderosa para orquestração de workflows de dados, permitindo a automação e monitoramento de pipelines complexos. Dentro do Airflow, Sensors  são operadores especializados que aguardam por uma condição específica antes de permitir a execução da próxima tarefa. Neste artigo, exploramos em detalhes como os Sensors funcionam e mostramos exemplos práticos. Airflow Sensor O que é um Airflow Sensor? O Airflow Sensor  é um operador no Airflow que verifica periodicamente se uma condição foi satisfeita antes de liberar o fluxo de execução. Ele é especialmente útil para aguardar eventos externos, como: Presença de um arquivo em um bucket S3 Disponibilidade de dados em um banco de dados Conclusão de um processo em outra ferramenta Os Sensors podem funcionar em diferentes modos de execução : poke : verifica periodicamente uma condição e dorme entre as tentativas. reschedule : libera o worker e reagenda a verificação para o futuro, otimizando o uso de recursos. Exemplo 1: FileSensor Caso de Uso: O FileSensor  é utilizado em workflows que precisam aguardar a chegada de um arquivo antes de prosseguir com o processamento. Por exemplo: Monitorar diretórios de entrada para iniciar o processamento de novos arquivos. Garantir que um relatório seja exportado antes de iniciar uma análise de dados. Código: Entendendo a DAG Este DAG monitora um diretório local para verificar a existência de um arquivo antes de permitir a execução da próxima tarefa. O DAG file_sensor_example  é configurado para rodar diariamente. A tarefa wait_for_file  usa FileSensor  para aguardar o arquivo no caminho especificado. O poke_interval=60  define que a verificação será feita a cada 60 segundos. O timeout=600  limita o tempo total de espera a 10 minutos. Assim que o arquivo for detectado, a tarefa process_file  será executada. Exemplo 2: S3KeySensor Caso de Uso O Airflow Sensor possui um operador chamado S3KeySensor,   essencial para pipelines de ingestão de dados que dependem de arquivos armazenados na AWS S3. Exemplos: Aguardar arquivos CSV antes de iniciar uma carga para um Data Warehouse. Sincronizar dados entre diferentes sistemas utilizando arquivos no S3. Código: Entendendo a DAG Este DAG monitora a presença de um arquivo em um bucket AWS S3 antes de continuar o fluxo de execução. O S3KeySensor  aguarda até que o arquivo input.csv  seja encontrado no bucket meu-bucket . O parâmetro mode='reschedule'  economiza recursos reagendando a verificação ao invés de manter a tarefa ativa constantemente. O DAG só continuará quando o arquivo estiver disponível. Exemplo 3: SQLSensor Caso de Uso O SQLSensor  é utilizado para aguardar registros específicos em um banco de dados antes de prosseguir com um fluxo de trabalho. Exemplos: Esperar a chegada de novos pedidos antes de gerar relatórios de vendas. Garantir que uma tabela tenha sido preenchida antes de iniciar o processamento de dados. Código: Entendendo a DAG Este DAG aguarda a presença de novos registros em uma tabela do banco de dados antes de executar a próxima etapa. O SqlSensor  executa a query para verificar se há registros com status 'pendente'. Se a contagem for maior que zero, a próxima tarefa poderá ser executada. O poke_interval=120  define que a verificação será feita a cada 120 segundos. O timeout=1800  define que o sensor pode esperar por até 30 minutos. Exemplo 4: HttpSensor Caso de Uso O HttpSensor  é utilizado para aguardar uma API externa estar disponível antes de continuar a execução do DAG. Exemplos: Garantir que um serviço de machine learning esteja ativo antes de enviar solicitações de inferência. Aguardar que um sistema de terceiros conclua um processamento antes de buscar os resultados. Código: Entendendo a DAG Este DAG aguarda até que um serviço externo esteja pronto antes de continuar o processamento. O DAG http_sensor_example  é configurado para rodar a cada hora. A tarefa wait_for_api  usa HttpSensor  para verificar o status de uma API externa. O parâmetro response_check  avalia a resposta JSON para garantir que a API retorne ready antes de liberar a próxima etapa. Assim que a API estiver pronta, a tarefa process_data  será executada. Exemplo 5: ExternalTaskSensor Caso de Uso O ExternalTaskSensor  é útil para coordenar workflows entre diferentes DAGs. Exemplos: Esperar que um pipeline de transformação finalize antes de iniciar uma análise de dados. Garantir que um processamento de logs seja concluído antes de acionar relatórios. Código: Entendendo a DAG Este DAG sincroniza a execução entre dois DAGs distintos, garantindo que um processo externo seja concluído antes de iniciar o próximo. O DAG external_task_sensor_example  monitora a finalização de uma tarefa em outro DAG. A tarefa wait_for_external_task  aguarda a conclusão da tarefa_concluida  no DAG outra_dag . O poke_interval=300  define que a verificação será feita a cada 5 minutos. Assim que a tarefa externa for concluída, a próxima etapa do DAG será liberada. Considerações Finais Os Sensors  do Airflow são essenciais para sincronizar workflows com eventos externos. No entanto, eles podem consumir muitos recursos se não forem configurados corretamente. O uso do modo reschedule, quando possível, é uma boa prática para evitar sobrecarga no ambiente. Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal! Não perca nossas dicas exclusivas de Tech e Data! Inscreva-se Agora na Newsletter da Coffee & Tips Receba semanalmente: Tutoriais práticos e diretos sobre Engenharia de Software e Dados Insights de tecnologia e notícias da semana

bottom of page