top of page

Search

119 resultados encontrados com uma busca vazia

  • 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

  • Boas Práticas com AWS Athena para Iniciantes

    AWS Athena O que é o AWS Athena? O AWS Athena  é um serviço serverless da Amazon que permite consultas SQL diretamente em dados armazenados no Amazon S3 . Ele elimina a necessidade de gerenciar infraestrutura e é uma solução poderosa para análise de dados. Boas Práticas para Melhor Performance e Redução de Custos 1. Use Particionamento para Reduzir Escaneamento de Dados Por padrão, o AWS Athena escaneia todos os dados de uma tabela ao executar uma consulta. Para otimizar: Crie partições  baseadas em colunas frequentemente filtradas , como data ou categoria. Registre as partições manualmente  com ALTER TABLE ADD PARTITION. Organize os dados no S3  com uma estrutura de diretórios eficiente, como s3://meu-bucket/dados/ano=2024/mes=01/. O que é uma partição? Uma partição é uma forma de dividir uma tabela em subgrupos menores com base em um critério específico, como data, região ou categoria. Em vez de armazenar todos os dados em um único local, as partições permitem que os dados sejam segmentados em diferentes diretórios no S3. Isso melhora significativamente a eficiência das consultas, pois o Athena lê apenas as partições relevantes ao invés de escanear toda a tabela. Vantagens do uso de partições: Redução de custos : Apenas as partições necessárias são escaneadas, diminuindo o volume de dados processado. Melhoria na performance : O tempo de consulta é reduzido, pois menos dados precisam ser lidos. Facilidade na organização dos dados : Os dados são armazenados de forma estruturada, facilitando o gerenciamento e a recuperação eficiente. Exemplo: ALTER TABLE minha_tabela ADD PARTITION (ano='2024', mes='01') LOCATION 's3://meu-bucket/dados/ano=2024/mes=01/'; Consulta eficiente utilizando partições: SELECT nome, idade FROM minha_tabela WHERE ano='2024' AND mes='01'; Se a tabela estiver particionada corretamente, o Athena escaneará apenas os dados do ano e mês especificados, melhorando a performance e reduzindo custos. 2. Compacte e Otimize os Arquivos no S3 Prefira Parquet ou ORC  ao invés de CSV/JSON, pois são formatos colunarizados que melhoram a performance e reduzem custo. Combine vários arquivos pequenos em arquivos maiores para reduzir a latência. Por que evitar CSV ou JSON? CSV e JSON são formatos baseados em texto , o que significa que ocupam mais espaço e exigem maior tempo de leitura. Falta de suporte a compressão nativa : CSV e JSON não possuem compressão embutida como Parquet e ORC, levando a maiores custos de armazenamento e processamento. Leitura ineficiente : Como esses formatos armazenam dados em linhas, o AWS Athena precisa escanear toda a tabela, ao contrário de formatos colunarizados que leem apenas as colunas necessárias. Estrutura inconsistente : JSON pode ter estrutura variada dentro do mesmo conjunto de dados, dificultando a análise e exigindo transformação prévia. 3. Evite SELECT *, Escolha Apenas as Colunas Necessárias Consultar todas as colunas aumenta o volume de dados processado, gerando custos desnecessários. Sempre especifique apenas as colunas necessárias. Exemplo: SELECT nome , idade FROM minha_tabela WHERE ano='2024'; 4. Crie Tabelas Externas e Utilize Glue Catalog Utilize o AWS Glue Data Catalog  para gerenciar metadados e facilitar consultas. Defina esquemas corretamente para evitar erros e retrabalho. Por que criar tabelas externas? Economia de custos : O Athena não copia os dados, ele simplesmente lê diretamente do S3. Facilidade na gestão de dados : Não é necessário importar ou carregar os dados, apenas definir um esquema e apontar para o local correto no S3. Desempenho otimizado : Definir esquemas melhora a eficiência das consultas e reduz o tempo de leitura. Suporte a múltiplos formatos : Você pode armazenar dados em formatos otimizados como Parquet e ORC e consultá-los diretamente. Exemplo de criação de tabela externa no Athena: CREATE EXTERNAL TABLE minha_tabela ( id STRING, nome STRING, idade INT ) STORED AS PARQUET LOCATION 's3://meu-bucket/dados-parquet/'; 5. Utilize Filtragem e Predicados nas Consultas Use WHERE  e LIMIT  para restringir a quantidade de dados lidos. Prefira filtros em colunas particionadas para evitar escaneamento desnecessário. Exemplo: SELECT * FROM minha_tabela WHERE ano='2024' AND mes='01' LIMIT 100; Conclusão O AWS Athena é uma ferramenta incrível para consultas em grandes volumes de dados sem precisar gerenciar infraestrutura. No entanto, seguir boas práticas como particionamento, uso de formatos otimizados e filtragem eficiente é fundamental para melhorar a performance e reduzir custos. 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

  • Introdução às Common Table Expressions (CTE) em SQL

    Common Table Expressions Se você trabalha com SQL, provavelmente já se deparou com consultas complexas que envolvem diversas junções e subqueries. Para facilitar a leitura e manutenção dessas consultas, podemos usar Common Table Expressions (CTE) . O que é uma Common Table Expression (CTE)? Uma CTE  é uma espécie de "tabela temporária" criada dentro de uma consulta SQL, que pode ser referenciada múltiplas vezes na mesma consulta. Isso melhora a organização do código e o desempenho da consulta. A sintaxe básica de uma CTE é: Exemplo 1: Uso Básico de uma CTE Vamos supor que temos uma tabela vendas e queremos calcular a receita total por produto. Neste exemplo, a CTE vendas_por_produto  calcula a receita total por produto, e então a consulta principal apenas recupera esses dados. Exemplo 2: Usando CTE com Junções Podemos combinar CTEs com JOINs  para tornar consultas complexas mais organizadas. Suponha que temos uma tabela clientes e queremos listar os clientes que fizeram compras acima de R$ 5000. Aqui, a CTE clientes_vips  calcula os clientes que gastaram mais de R$ 5000, tornando o SQL mais legível e reutilizável. Exemplo 3: CTE Recursiva Uma das grandes vantagens das CTEs é que elas podem ser recursivas , ou seja, podem se referenciar dentro da própria definição. Isso é útil para lidar com hierarquias, como estruturas de árvore. Vamos considerar uma tabela empregados  com um campo supervisor_id , que define a hierarquia dos funcionários dentro de uma empresa. Resultado do CTE Neste caso, a CTE hierarquia_empregados  encontra a hierarquia da empresa, listando os empregados e seus respectivos níveis na estrutura organizacional. Exemplo 4: Filtrando Dados em uma CTE Podemos usar CTEs para filtrar registros antes de processá-los. Suponha que queremos listar apenas as vendas realizadas no ano de 2023 antes de calcular a receita total. Aqui, filtramos as vendas do ano de 2023 antes de calcular a receita total. Exemplo 5: CTE com Agregação de Dados Se quisermos calcular a média de vendas por cliente e, em seguida, filtrar apenas os clientes com uma média superior a R$ 1000, podemos usar: Isso facilita consultas mais organizadas e performáticas. Benefícios do Uso de CTEs Melhora a legibilidade do código Facilita a manutenção de consultas complexas Permite reutilização de consultas dentro da mesma query Melhor desempenho em alguns cenários , eliminando a necessidade de tabelas temporárias Ideal para consultas recursivas , como hierarquias de dados Facilidade na segmentação e agregação de dados Conclusão As Common Table Expressions são um recurso poderoso do SQL que ajudam a organizar consultas complexas, tornando-as mais eficientes e fáceis de entender. Se você ainda não usa CTEs, experimente incorporá-las nas suas consultas para melhorar a legibilidade e o desempenho! 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

  • Modelagem de Dados: Star Schema, Snowflake e Galaxy

    Como modelagens Star Schema, Snowflake e Galaxy funcionam na prática Modelagem de Dados A modelagem de dados é uma etapa essencial na construção de um Data Warehouse eficiente. Três das abordagens mais comuns são Star Schema , Snowflake Schema  e Galaxy Schema . Neste artigo, vamos explorar esses modelos, compará-los e apresentar exemplos práticos para facilitar o entendimento. 1. Star Schema O Star Schema  é uma abordagem simples e eficaz para modelagem de dados, caracterizada por uma tabela fato central conectada a tabelas dimensionais. As tabelas dimensionais não são normalizadas, resultando em redundância de dados, mas melhorando o desempenho de consultas. Exemplo de Estrutura Tabela Fato: Vendas Tabela Dimensão: Cliente Exemplo de Query Vantagens e Desvantagens do Star Schema Vantagens: Facilidade de entendimento e implementação : Sua estrutura intuitiva permite que analistas e desenvolvedores compreendam rapidamente como os dados estão organizados. Consultas mais rápidas : Como todas as tabelas dimensionais estão diretamente ligadas à tabela fato, há menos necessidade de joins complexos. Ótima performance para análises : Como o modelo é otimizado para consultas OLAP (processamento analítico online), a execução de relatórios é mais eficiente. Desvantagens: Redundância de dados : Como as tabelas dimensionais não são normalizadas, informações como nomes de cidades podem ser repetidas diversas vezes, aumentando o consumo de armazenamento. Possível dificuldade na manutenção : Caso haja mudanças frequentes nos dados dimensionais, o esquema pode exigir atualizações constantes para evitar inconsistências. 2. Snowflake Schema O Snowflake Schema  é uma evolução do Star Schema, onde as tabelas dimensionais são normalizadas para reduzir a redundância. Exemplo de Estrutura Tabela Dimensão Normalizada: Cidade Tabela Dimensão: Cliente Exemplo de Query Vantagens e Desvantagens do Snowflake Schema Vantagens: Redução da redundância de dados : Como as tabelas são normalizadas, há menor repetição de informações, economizando espaço de armazenamento. Melhor integridade de dados : Como cada atributo é armazenado separadamente, há menos risco de inconsistências nos dados. Desvantagens: Consultas mais complexas : O aumento no número de tabelas e joins necessários pode tornar as consultas mais difíceis de escrever e interpretar. Impacto no desempenho : Devido à maior quantidade de joins, as consultas podem ser mais lentas, especialmente em grandes volumes de dados. 3. Galaxy Schema O Galaxy Schema , também chamado de Constellation Schema , é uma abordagem que combina múltiplas tabelas fato compartilhando dimensões comuns. Exemplo de Estrutura: Fato_Vendas  (fatos sobre vendas) Fato_Devolucoes  (fatos sobre devoluções) Dim_Cliente  (dimensão compartilhada) Dim_Produto  (dimensão compartilhada) Exemplo de Query Vantagens e Desvantagens do Galaxy Schema Vantagens: Alta flexibilidade : Permite a modelagem de múltiplos processos de negócios dentro do mesmo Data Warehouse. Análise mais abrangente : Como múltiplas tabelas fato são conectadas, é possível obter insights mais detalhados sobre diferentes aspectos do negócio. Desvantagens: Complexidade na manutenção : Como há muitas tabelas fato e dimensões interligadas, manter e atualizar o esquema pode ser um desafio. Performance pode ser afetada : O alto número de joins necessários para consultas pode impactar o tempo de resposta. Conclusão A escolha do modelo ideal depende dos requisitos específicos do negócio: Se busca simplicidade e rapidez em consultas , o Star Schema  é a melhor opção. Se a redundância de dados for um problema , o Snowflake Schema  pode ser a escolha mais eficiente. Para cenários complexos com múltiplos processos de negócios , o Galaxy Schema  oferece a flexibilidade necessária. Independentemente do modelo escolhido, o mais importante é garantir que a modelagem esteja alinhada com os objetivos da empresa e os requisitos de 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

  • Guia Completo: Como Criar e Testar uma AWS Lambda Localmente com AWS SAM

    Lambda com AWS SAM Rodando AWS Lambda Localmente com AWS SAM A AWS Lambda é um serviço de computação serverless que permite executar código sem a necessidade de provisionar servidores. No entanto, testar funções Lambda diretamente na AWS pode ser demorado e custoso, pois cada alteração exige um novo deploy. Para resolver esse problema, podemos rodar e testar a Lambda localmente usando a ferramenta AWS SAM (Serverless Application Model) . Testar localmente ajuda a: Reduzir o tempo de desenvolvimento , evitando a necessidade de múltiplos deploys. Depurar problemas mais rapidamente , já que podemos inspecionar logs localmente . Simular interações com serviços AWS , como API Gateway, DynamoDB, entre outros. Para resolver esses problemas, a AWS disponibiliza o AWS SAM (Serverless Application Model) , uma ferramenta que permite rodar e testar Lambdas localmente  antes de implantá-las na nuvem. O AWS SAM: Emula o ambiente da AWS no seu computador, permitindo testes rápidos. Oferece suporte a interações com API Gateway, DynamoDB, S3 e outros serviços da AWS. Facilita a depuração e logs locais, tornando o desenvolvimento mais eficiente. Permite modificações e reexecução da Lambda sem necessidade de novos deploys. Neste guia, você aprenderá a criar uma AWS Lambda do zero , testá-la localmente com AWS SAM  e, opcionalmente, fazer o deploy para a AWS. Passo 1: Como instalar Instalação no Linux Para instalar o AWS SAM no Linux , siga os passos abaixo: Baixar e instalar o SAM CLI curl -Lo aws-sam-cli-linux-x86_64.zip https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip Extrair o arquivo baixado unzip aws-sam-cli-linux-x86_64.zip -d sam-installation Mover para o diretório correto e dar permissão de execução sudo mv sam-installation /usr/local/aws-sam-cli sudo ln -s /usr/local/aws-sam-cli/bin/sam /usr/local/bin/sam Verificar se a instalação foi bem-sucedida sam --version Instalação no macOS brew install aws/tap/aws-sam-cli Instalação no Windows Baixe o instalador no site oficial da AWS  e siga as instruções. Passo 2: Criando um novo projeto AWS Lambda usando AWS SAM Criando o projeto Abra um terminal e execute o comando abaixo: sam init Escolha a fonte do template: Isso iniciará um assistente interativo. Selecione a opção 1 - AWS Quick Start Templates dentre as opções abaixo: Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Escolha um template: Selecione   1 - Hello World Example   (ideal para começar com uma Lambda simples) dentre as opções abaixo: Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow 3 - Serverless API 4 - Scheduled task 5 - Infrastructure event management 6 - Lambda Response Streaming 7 - Multi-service API 8 - Serverless Connectors 9 - GraphQL DynamoDB API 10 - Hello World Example with Powertools Escolha linguagem e empacotamento: Use the most popular runtime and package type? (Python and zip) [y/N]: Digite y para manter Python como linguagem e zip como empacotamento. Ao digitar y e confirmar, a seguinte pergunta será feita: Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]: Para o nosso tutorial, não precisaremos habilitar esta função, por isso digite N e prossiga. 4. Habilitar CloudWatch Insights? Would you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: Esta etapa é sobre habilitar o CloudWatch Insights, neste caso fica a seu critério. CloudWatch é uma ferramenta poderosa da AWS de observabilidade importante para entender os comportamentos das aplicações. Temos que tomar cuidado com custos extras que podem vir em caso de habilitar ferramentas como estas. A ideia aqui do tutorial é apenas mostrar da maneira mais simples de como criar um Lambda e testa-lo localmente, então sugiro digitar N para não usar esta funcionalidade neste momento. 5. Criando o nome do Projeto Digite o nome do projeto que você deseja criar. Project name [sam-app]: Pronto, após digitar e confirmar, uma pasta com o nome do projeto será criada. No meu caso, o meu projeto se chamará lambda-local . Veja a estrutura de arquivos que foi criado: ├── events │   └── event.json ├── hello_world │   ├── app.py │   ├── __init__.py │   └── requirements.txt ├── __init__.py ├── README.md ├── samconfig.toml ├── template.yaml └── tests ├── __init__.py ├── integration │   ├── __init__.py │   └── test_api_gateway.py ├── requirements.txt └── unit ├── __init__.py └── test_handler.py Não iremos explicar o que são todos estes arquivos, mas iremos alterar o arquivo hello_world/ app.py . Passo 3: Escrever a Função Lambda Abra o arquivo hello_world/ app.py e adicione o código abaixo: import json def lambda_handler(event, context): return { "statusCode": 200, "body": json.dumps({"message": "Hello, AWS Lambda is running locally!"}) } Passo 4: Testar a Lambda Localmente Agora que temos a função pronta, podemos testá-la sem precisar fazer deploy . Pelo terminal, acesse a pasta onde o projeto foi criado e execute o seguinte comando: sam local invoke HelloWorldFunction Isso simula uma execução da Lambda e retorna a seguinte saída esperada: { "statusCode": 200, "body": "{\"message\": \"Hello, AWS Lambda is running locally!\"}" } Testar a Lambda via API Gateway Local Podemos expor a Lambda como uma API local para testá-la com chamadas HTTP. Inicie o servidor local sam local start-api Executando via curl Agora, abra um navegador ou use curl para testar: curl http://127.0.0.1:3000/hello O retorno esperado será: { "message": "Hello, AWS Lambda is running locally!" } Massa demais, é possível transformar o Lambda em uma API e rodar localmente! Alterar o código Agora que você sabe como funciona, você pode alterar o código e simplesmente invocar o Lambda novamente já alterado ou iniciar novamente o serviço caso queira usar a API. Passo 5: Deploy do Lambda Como última etapa, podemos subir o AWS Lambda para AWS tornando um recurso produtivo. Para isso é necessário você já ter uma conta criada e caso não tenha, a AWS oferece contas gratuitas visando que você aprenda mais sobre as ferramentas gratuitamente. Acesse este link para criar. Mesmo que seja gratuita, é de grande importância que você tome bastante cuidado com esta conta e siga todas as boas práticas para a criação da conta e procure sempre apagar cada recurso após criado, caso seja só para testes. Vamos lá, caso tenha a conta criada. Vamos configurar as credenciais, acesse o terminal e digite o comando abaixo: aws configure Após digitar, você precisará preencher com os dados das suas chaves de acesso: AWS Access Key ID [****************V66Z]: AWS Secret Access Key [****************DlN7]: Caso você não tenha estas chaves de acesso, basta acessar o link da AWS com o passo a passo. Após preenchido, basta rodar o seguintes comandos abaixo: sam build sam deploy --guided Você deverá fazer algumas confirmações até finalizar, mas nada sem muito segredo, bem simples. Veja o Lambda criado na AWS: Console AWS Lambda Perceba que como gatilho, o API Gateway foi incorporado, habilitando o funcionamento do Lambda como uma API, caso queira usar. Passo 6: Testando o Lambda Para testar é bem simples, no próprio console da AWS na aba Testar , você consegue executar o Lambda facilmente. Resultado do teste: Passo 7: Apagando o Lambda Caso os testes já tenham finalizado, é importante remover o Lambda para evitar cobranças futuras. Existem algumas forma de remover o Lambda, ou seja, diretamente no painel do serviço do Lambda ou pelo CloudFormation, que é o serviço de provisionamento de recursos da AWS. Caso queira entender mais sobre este recurso, acesse o post Criando recursos utilizando CloudFormation . Neste caso, o AWS SAM utilizou o CloudFormation para criar o Lambda na AWS, por isso é melhor apagar o recurso pelo próprio CloudFormation. Na AWS, busque por CloudFormation e irá aparecer os recursos criados ou stacks (pilhas), assim como é chamado cada recurso criado via CloudFormation. Console CloudFormation Apagando pelo CloudFormation, garantimos que qualquer recurso além do próprio Lambda como roles e etc serão removidos. 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 SQL OVER (PARTITION BY) com Exemplos Práticos

    Como usar a Window Function OVER (PARTITION BY)? Se você já trabalhou com SQL, provavelmente conhece a cláusula GROUP BY, que permite agrupar dados e aplicar funções agregadas. Mas e se você quiser calcular agregações sem agrupar os dados? É aí que entra o poderoso OVER (PARTITION BY ...). Neste post, vamos explorar esse conceito com exemplos práticos e de fácil compreensão. Mas o que é OVER (PARTITION BY)? A cláusula OVER (PARTITION BY column) pertence às Window Functions  no SQL e permite realizar cálculos sobre um subconjunto de linhas sem alterar a estrutura da consulta . Ela é útil para calcular somas, médias, contagens, ranking de dados e muito mais, sem precisar agrupar os registros com GROUP BY. Comando básico: FUNÇÃO_AGREGADA() OVER (PARTITION BY coluna) FUNÇÃO_AGREGADA() : Pode ser SUM( ) , AVG( ) , COUNT( ) , RANK( ) , entre outras. PARTITION BY coluna : Divide os dados em grupos com base na coluna especificada. Exemplo 1: Soma acumulada por categoria Vamos supor que temos uma tabela chamada vendas  com os seguintes dados: Agora, queremos calcular a soma acumulada (SUM( )) para cada categoria , sem agrupar os dados. Resultado: Entendendo o resultado: O SQL calcula a soma de valor para cada categoria  separadamente. O resultado mostra a mesma soma para todas as linhas da mesma categoria , mas sem agrupar os registros. Exemplo 2: Média de vendas por categoria Se quisermos calcular a média de vendas dentro de cada categoria, podemos usar AVG( )  da mesma forma: Resultado: Entendendo o resultado: O SQL calcula a média de valor  para cada categoria e exibe o mesmo valor em todas as linhas pertencentes ao grupo. Exemplo 3: Contagem de produtos por categoria Se quisermos saber quantos produtos existem em cada categoria, usamos COUNT( ) : Resultado: Entendendo o resultado: O SQL conta quantos registros existem dentro de cada categoria e repete esse valor nas linhas do mesmo grupo. Exemplo 4: Ranking de vendas dentro de cada categoria Se quisermos numerar os produtos dentro de cada categoria com base no valor da venda, podemos usar RANK( ) : Resultado: Entendendo o resultado: O RANK( )  numera as vendas dentro de cada categoria. Ele ordena os valores de forma decrescente , ou seja, a venda mais alta recebe 1 . Caso existam valores iguais, o ranking pode pular posições. Conclusão O uso de OVER (PARTITION BY ...)  é uma técnica extremamente útil para análises no SQL, pois permite calcular valores por grupos sem precisar agrupar os dados. Funciona com funções agregadas ( SUM( ) , AVG( ) , COUNT( ) , etc.). Permite criar rankings e outras análises avançadas. Não agrupa os registros, mantendo a granularidade dos 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

bottom of page