top of page
  • Foto do escritorGabriel Quintella

Python, Manipulando Arquivos no Azure Blob Storage

Olá meu amigo, que satisfação ter você por aqui novamente! Espero que esteja bem e preparado para o desafio de hoje! Neste post vamos falar um pouco sobre uma tecnologia fantástica que ganhou o nome de cloud ou nuvem caso ache melhor.


Buscando um direcionamento dos nossos estudos, trago hoje uma nova forma de armazenar e manipular seus dados quando eles estiverem em uma nuvem, seja ela qual for. Para esse estudo, vou usar a cloud da Microsoft, o Microsoft Azure. É simplesmente fantástica! Não entrarei em muitos detalhes de cloud pois não é o nosso objetivo, mais alguns deles serei obrigado a comentar, acompanha aqui comigo!


Antes de prosseguir, vou abrir um parêntese e explicar uma situação. A uns dias, recebi um e-mail de um amigo chamado Rafael Augusto, profissional de educação física e estudante de Python! Isso mesmo, o brother é professor de Educação Física e gosta de Python, simplesmente sensacional! Nesse e-mail ele fez a seguinte pergunta:


Eu trabalho em um time de futebol, utilizamos um Drone para fazer filmagem de treinos.
Seria possível com criar um comando via API do Drone que eu consiga jogar essa filmagem direto para uma nuvem?

Diga lá meu povo, qual será a resposta pra pergunta do Rafael? Lógico que é SIM, ou melhor não pode ser outra resposta.


Rafael, segue aqui comigo e depois me conta se esse post ajudou!


Bora seguir...


Já ia esquecendo, é mole isso! Tenho anotado aqui algumas perguntas bacanas bem bacanas. Está pronto para responde-las? Sério que eu ouvi sim? Topa embarcar na nossa próxima aventura? Outro sim??? Quem dá mais???


Bora parar de chorumelas e ir direto as perguntas!


Você já ouviu falar em Cloud? Poxa! Acabou que falei a resposta pra primeira pergunta lá no início! Deixa pra lá, vou tentar outra. E Azure, já ouviu falar ou conhece? Ah não! Falei novamente a resposta! Fazer o que! Vamos pra próxima. Sabe o que é Azure Blob Storage? Já imaginou realizando o upload de arquivo do seu computador para a nuvem?



É Luna, é verdade! Muitas perguntas. Mais vamos tentar responder.


  • Você já ouviu falar em Cloud?

Cloud ou Computação em nuvem é uma tendência de mercado que vem ganhando muito espaço entre as organizações. Podemos explicar de forma simples da seguinte forma, trata-se da disponibilidade sob demanda de recursos computacionais, tais como armazenamento de dados, servidores, capacidade de computação, entre outros. Dependendo do serviço contratado, pode ser que o gerenciamento de todo esse ativo não seja feito pelo utilizador.

  • Já ouviu falar em Azure?

O Azure é uma plataforma da Microsoft onde é destinada à execução de aplicativos e serviços, baseada nos conceitos da computação em nuvem.

  • Sabe o que é Azure Blob Storage?

O Blob do Azure é uma solução de armazenamento de objetos da Microsoft para a nuvem. Seu armazenamento é otimizado para armazenar grandes quantidades de dados não estruturados e estruturados.

  • Já imaginou realizando o upload de arquivo do seu computador para a nuvem?

Essa vou responder codificando. Preste atenção pois pode parecer complexo mais repare como que é simples!


Antes de iniciarmos o nosso estudo, precisaremos dar um passo atrás e realizar algumas configuração. Fique calmo, nada complexo!


Conforme citado anteriormente, o Microsoft Azure

É uma plataforma da destinada à execução de aplicativos e serviços, baseada nos conceitos da computação em nuvem

Como primeira configuração, vamos realizar a criação do nosso ambiente no Azure. Veja como que é simples! O primeiro passo será criação de uma conta grátis. Não abordarei com grande detalhes, trabalharemos com o necessário!


Bora, clique aqui para realizar a criação!


Criada concluída, vamos abrir o painel do Azure e continuar a configuração. Clique aqui que vou guiando você.


Login realizado, vamos para o segundo passo, criação de um Resource Group.


Antes de iniciar, uma breve explicação da necessidade do Resource Group.



A principal finalidade do Resource Group é possibilidade de agrupar recursos do Azure, permitindo ao administrador realizar a criação, monitorar, controlar os acessos e o custo de cada recursos.




Após uma breve introdução, mãos a massa! É bem simples, não fique nervoso! Vamos lá...Conforme imagem abaixo, no canto superior esquerdo existe três barras empilhadas, vai clica nela!


Ao clicar, um menu na vertical irá aparecer, basta clicar em Create a resource, e na barra de digitação que irá aparecer no meui da tela, você irá digitar RESOURCE GROUP.



Feito isso, a tela abaixo será apresentada. Clique no botão CREATE e vamos para a próxima tela.



Após o clique, a tela abaixo com três abas (Basics, Tags, Review+create) será carregada. Pronto chegamos onde precisamos! Nessa tela iremos detalhar as informações necessárias para a criação do nosso recurso.



Primeiro passo será na aba BASICS. Ela é composta basicamente por três informações fundamentais:



Subscription nada mais é do que sua assinatura e onde todos os seus recursos ficaram alocados



Region ou Região é conjunto de data centers que disponibiliza um gama de recursos em um raio continental. O Azure oferece a flexibilidade de implantar aplicativos onde você precisa, incluindo entre várias regiões, para fornecer resiliência entre regiões.



Feito os primeiros spoilers do dia, vamos voltar a nossa atividade de criação do Resource Group.


Para poder avança, vamos precisa definir 3 pontos:

  1. Qual subscription ele será criado;

  2. Qual será o seu nome;

  3. E em qual REGION do Azure ele será criado.


Concluída essa etapa, vamos avança na aba TAG.



A tela onde informamos a TAG, é o penúltimo último passo antes da criação do nosso RESOURCE GROUP.


A definição da TAG não é um etapa obrigatória em nenhum passo dentro do Microsoft Azure.


Caso não tenha essa informação de imediato, pulo ignorar e retornar a qualquer momento para informar.



Caso informe ou não, basta clicar em "Next: Review + Create".


No passo seguinte, é realizada uma validação levando em consideração os dados informados e caso esteja tudo OK, o botão CREATE ficará disponível, ou seja, seu recurso está pronto para ser criado.


Depois de clicar em CREATE, basta esperar um pouco enquanto seu RESOURCE GROUP estará sendo criado.



Parabéns para nós! Recurso criado e disponível!



O próximo recurso que vamos configurar é o Azure Storage Account.


Se realizarmos uma comparação com o passo anterior, entenderemos que é um pouco mais detalhada. Novamente, será apenas uma abordagem superficial, sem entrar em detalhes. No final deixo um link para um entendimento mais aprofundado e qualquer dúvida pode enviar que procurarei responder.


Mãos a obra, simbora meu povo!


O inicio é igual ao anterior. No canto superior à esquerda, clique nas três barras empilhadas, em seguida em Create a resource. Quando foi apresentada a barra de digitação digite STORAGE ACCOUNT. E vamos seguindo...



Igualzinho o outro! Basta clicar no botão CREATE.



Nesse momento vou precisar da sua atenção pois vamos começar a configuração. Faça com calma e de forma pausada.


Após clicar no botão CREATE, uma tela com seis abas (Basics, Advanced, Networking, Data Protection, Tags, Review+create) será apresentada.


Algumas informações são obrigatórias, como suscription, resource group, storage account name e region. Serão apenas estas que estaremos informando, para as outras abas seguiremos as recomendações.


Para um pouquinho e observe na aba Basics dois pontos. As informações de subscription e o resouce group já vem preenchidos. Em nosso possuís apenas um de cada, porém se existissem outros, seria possível alterados.


Vou preencher somente as informações de referente a Storage Account-Name e a Region, para as demais vou deixar com o valor Default que ele assume do Resource Group.



Vamos criar uma Tag para o nosso recurso.


Em seguida, vamos clicar em "Next: Review + Create" e após realizar a criação em si, clicando em CREATE.



É necessário esperar um pouco enquanto seu AZURE STORAGE ACCOUNT estará criado.



Opa!!!!! Parabéns para nós! Outro Recurso criado e disponível!



O passo seguinte será acessar o Azure Storage Account criado e criar um container.


Para esse container daremos o nome de containerdbaassists.



Na barra vertical à esquerda, procure Data storage, após encontrar clique em Containers.


Quando clicar, será aberta uma nova tela. Nessa tela clique em "+ Container" e a aba da direita New container será aberta. Informe o nome do container, em seguida clique em CREATE.



Novamente espere um pouco até que seu Container no AZURE STORAGE ACCOUNT seja criado.



Pronto! Aqui termina nossa missão no Microsoft Azure!


Vamos em busca agora dos arquivos que estaremos trabalhando. Nesse caso usarei um velho conhecido do Blog.


Novamente vamos buscar dados do Repositório de Dados Eleitorais, clique aqui para acessar.


Realizado o acesso, na sua esquerda clique em Candidatos.



Em seguida, escolha o ano de 2020 e basta clicar em Vagas (formato ZIP).


Após concluir o download, precisamos descompactar esse arquivo em algum diretório.



Você não é obrigado a realizar o download desse arquivo para o nosso exemplo. Pode utilizar qualquer diretório de sua máquina desde que possua algum arquivo.


Utilizei essa fonte porque além de apresentar como carregar, estarei fazendo também a manipulação dos dados.


Concluídas todas as configurações, o download dos dados e descompactação dos arquivos, vamos partir para a codificação em Python.


Primeira configuração que devemos realizar trata da instalação das bibliotecas azure, azure-storage-blob e pyyaml (No final do post tem um link para a documentação das bibliotecas).


# Comando para instalação das bibliotecas
pip install azure
pip install azure-storage-blob --upgrade
pip install pyyaml

Dica importante! Caso você esteja utilizando o Jupyter Notebook, ao concluir a instalação é necessário realizar um restart do kernel.


Instalação e restart do kernel realizada, vamos para o código. Seguindo as melhores prátivas de mercado, vou usar um arquivo yam para isolar dos parâmetros de configuração colocando em um arquivo a parte, como citei, melhores práticas, não que deve ser assim.


Esse arquivo receberá será chamado de configuracao.yam. O nosso arquivo de configuração será formado pelos seguintes parâmetros:


  • azure_storage_connectionstring - Receberá a connection string do Azure Blob Storage. Confira abaixo obter essa informação.

  • arquivo - Nome do Blob em que os arquivos serão carregados no azure. Caso ele não existe, o processo faz realiza a sua criação;

  • source_folder - Diretório que contém os arquivos que serão upados para o Azure Blob Storage.


Para buscar a string de conexão (azure_storage_connectionstring), basta seguir os passos abaixo.


Volte na sua conta do Microsoft Azure e siga os passos abaixo.


1 - Clique em Resource Group;

2 - Depois em Azure Storage Account.



Na coluna da esquerda clique em Access keys.



Depois em Show keys para apresentar os valores.



E finalmente clique no botão copiar da Key1 referente a Connection String.



E nosso arquivo ficará assim!


azure_storage_connectionstring: "DefaultEndpointsProtocol=https;AccountName=storageaccountdbaassists;AccountKey=G5HcRkcbcG16glhZ2GapFr9xHzzQk0PjtlN4h/LZqr0D5lqME7PdQVqYR8O+z8yShxFGpEw4TfjDCw1fV4I/tw==;EndpointSuffix=core.windows.net"
arquivo: "containerdbaassists/eleicao"
source_folder: "C:/Temp/Python/consulta_vagas_2020/"
storageaccounturl: "https://storageaccountdbaassists.blob.core.windows.net"
storageaccountkey: "G5HcRkcbcG16glhZ2GapFr9xHzzQk0PjtlN4h/LZqr0D5lqME7PdQVqYR8O+z8yShxFGpEw4TfjDCw1fV4I/tw=="
diretorioBlob: "eleicao"

Agora vamos para o código Python.


Para ficar um script mais claro, estarei dividindo ele em três funções, conforme abaixo.


  • fn_carrega_arquivo_configuracao - Função responsável pela leitura do arquivo de configuração;

  • fn_lista_arquivos_diretorio - Função responsável pela leitura do diretório;

  • fn_upload_arquivo_blob - Função responsável pelo Upload pro Blob;


Vejamos como que irá ficar! Não precisa copiar agora, no final disponibilizarei o notebook utilizado aqui!


# Bibliotecas utilizadas

import os 
import yaml
from azure.storage.blob import ContainerClient

# Caminho físico do arquivo de configuração
diretorioArquivoConfiguracao = 'configuracao.yam'

# Função responsável pela leitura do arquivo de configuração
def fn_carrega_arquivo_configuracao(diretorioArquivoConfiguracao):
    
    dir_root = os.path.dirname(os.path.abspath(diretorioArquivoConfiguracao))
    
    with open(dir_root + '\\' + diretorioArquivoConfiguracao ,"r") as ArqConfiguracao:
        return yaml.load(ArqConfiguracao, Loader=yaml.FullLoader)

# Função responsável pela leitura do diretório    
def fn_lista_arquivos_diretorio(dir):
    with os.scandir(dir) as entries:
        for entry in entries:
            if entry.is_file() and not entry.name.startswith('.'):
                yield entry

# Função responsável pelo Upload                
def fn_upload_arquivo_blob(listaDeArquivos, connectionString, nomeDoContainerBlob):
    
    conexao_container_blob = ContainerClient.from_connection_string(connectionString,nomeDoContainerBlob)
    print('Processo de Upload para o Azure Blob Storage iniciado!')
    
    for arquivo in listaDeArquivos:
        
        NomeArquivoBlobClient = conexao_container_blob.get_blob_client(arquivo.name)
        
        with open(arquivo.path, "rb") as data:
            
            try:
                NomeArquivoBlobClient.upload_blob(data,overwrite=True)
                print(f'{arquivo.name} - Uploaded para o Azure Blob Storage realizado com sucesso!')                
            except Exception as e:
                print(e)

# Chamada das funções para upload                
                
configuracao = fn_carrega_arquivo_configuracao(diretorioArquivoConfiguracao)
            
listaDeArquivos = fn_lista_arquivos_diretorio(configuracao['source_folder'])    

fn_upload_arquivo_blob(listaDeArquivos,configuracao['azure_storage_connectionstring'], configuracao['arquivo'])

Reparem que o container está vazio! Agora vou executar o nosso script.



Olhe agora como que ficou!


Primeiro analise o output.


Processo de Upload para o Azure Blob Storage iniciado!
consulta_vagas_2020_AC.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_AL.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_AM.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_AP.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_BA.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_BRASIL.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_CE.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_ES.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_GO.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_MA.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_MG.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_MS.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_MT.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_PA.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_PB.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_PE.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_PI.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_PR.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_RJ.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_RN.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_RO.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_RR.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_RS.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_SC.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_SE.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_SP.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
consulta_vagas_2020_TO.csv - Uploaded para o Azure Blob Storage realizado com sucesso!
leiame.pdf - Uploaded para o Azure Blob Storage realizado com sucesso!

Agora analise o Blob.


Exatamente conforme nosso script. Diretório eleicao criado e arquivos carregados.




Muito bem! Primeiro passo concluído! 75% do nosso objetivo concluído. Para concluir com louvor, precisamos descobrir agora como manipular esses arquivos carregados.


Bora pro desafio final? Se tiver preparado, segue ai...


Primeiro desafio! Carregar apenas um arquivo do Blob!


# Bibliotecas utilizadas
import os
from azure.storage.blob import BlobServiceClient
import pandas as pd

# Caminho físico do arquivo de configuração
diretorioArquivoConfiguracao = 'configuracao.yam'

# Função responsável pela leitura do arquivo de configuração
def fn_carrega_arquivo_configuracao(diretorioArquivoConfiguracao):
    
    dir_root = os.path.dirname(os.path.abspath(diretorioArquivoConfiguracao))
    
    with open(dir_root + '\\' + diretorioArquivoConfiguracao ,"r") as ArqConfiguracao:
        return yaml.load(ArqConfiguracao, Loader=yaml.FullLoader)
    
configuracao = fn_carrega_arquivo_configuracao(diretorioArquivoConfiguracao)    

# Definição de Variáveis
storageaccounturl= configuracao['storageaccounturl']
storageaccountkey= configuracao['storageaccountkey']
diretorioBlob= configuracao['diretorioBlob']
containerBlob= configuracao['arquivo']
NomearquivoBlob = 'consulta_vagas_2020_BRASIL.csv'

# Processo responsável pela criação da conexão com o blob
blob_service_client_instance = BlobServiceClient(account_url=storageaccounturl, credential=storageaccountkey)
blob_client_instance = blob_service_client_instance.get_blob_client(containerBlob, NomearquivoBlob, snapshot=None)

# Processo de leitura no diretório
with open(diretorioBlob, "wb") as my_blob:
    blob_data = blob_client_instance.download_blob()
    blob_data.readinto(my_blob)

# Processo de carga em nosso dataframe Pandas
dataframe_blobdata = pd.read_csv(diretorioBlob,encoding = "cp1252",engine='python',sep=';')

dataframe_blobdata

Olha o output! Dados carregados com sucesso!



Vamos agora enfrentar o chefão! Preparado?



No desafio final vamos gerar um script para ler em blob container eleicao arquivo por arquivo e em seguida armazenar em um DataFrame Pandas.




# Bibliotecas utilizadas
import os
from azure.storage.blob import BlobServiceClient
import pandas as pd

# Caminho físico do arquivo de configuração

diretorioArquivoConfiguracao = 'configuracao.yam'

# Função responsável pela leitura do arquivo de configuração
def fn_carrega_arquivo_configuracao(diretorioArquivoConfiguracao):
    
    dir_root = os.path.dirname(os.path.abspath(diretorioArquivoConfiguracao))
    
    with open(dir_root + '\\' + diretorioArquivoConfiguracao ,"r") as ArqConfiguracao:
        return yaml.load(ArqConfiguracao, Loader=yaml.FullLoader)
    
configuracao = fn_carrega_arquivo_configuracao(diretorioArquivoConfiguracao)    

# Definição de Variáveis
diretorioBlobArquivo= configuracao['diretorioBlob']
container= configuracao['arquivo']
azure_storage_connectionstring = configuracao['azure_storage_connectionstring']
conexao_container_blob = BlobServiceClient.from_connection_string(azure_storage_connectionstring)
container_name=configuracao['arquivo'].replace('/eleicao','')

# Processo responsável pela criação da conexão com o blob
container_client=conexao_container_blob.get_container_client(container_name)

# Criação de um dataframe vazio para receber os dados
tabela_vagas = pd.DataFrame()

blob_list = container_client.list_blobs(name_starts_with="eleicao")

# Processo de leitura no blob para carga dos arquivos
for blob in blob_list:

    arquivoBlob = blob.name
    arquivoBlob = arquivoBlob.replace('eleicao/','')
    print(arquivoBlob)
    blob_client_instance = blob_service_client_instance.get_blob_client(container, arquivoBlob, snapshot=None)
    
    with open(diretorioBlobArquivo, "wb") as my_blob:
        blob_data = blob_client_instance.download_blob()
        blob_data.readinto(my_blob)

        dataframe_blobdata = pd.read_csv(diretorioBlobArquivo,encoding = "cp1252",engine='python',sep=';')
        
        tabela_vagas = tabela_vagas.append(dataframe_blobdata)

tabela_vagas.head()

Analise comigo o output e observe a listagem de arquivos carregados com sucesso!


consulta_vagas_2020_AC.csv
consulta_vagas_2020_AL.csv
consulta_vagas_2020_AM.csv
consulta_vagas_2020_AP.csv
consulta_vagas_2020_BA.csv
consulta_vagas_2020_BRASIL.csv
consulta_vagas_2020_CE.csv
consulta_vagas_2020_ES.csv
consulta_vagas_2020_GO.csv
consulta_vagas_2020_MA.csv
consulta_vagas_2020_MG.csv
consulta_vagas_2020_MS.csv
consulta_vagas_2020_MT.csv
consulta_vagas_2020_PA.csv
consulta_vagas_2020_PB.csv
consulta_vagas_2020_PE.csv
consulta_vagas_2020_PI.csv
consulta_vagas_2020_PR.csv
consulta_vagas_2020_RJ.csv
consulta_vagas_2020_RN.csv
consulta_vagas_2020_RO.csv
consulta_vagas_2020_RS.csv
consulta_vagas_2020_SC.csv
consulta_vagas_2020_SE.csv
consulta_vagas_2020_SP.csv
consulta_vagas_2020_TO.csv

Agora uma pequena amostra dos dados carregados!




Muito bem meu amigo! Bela batalha, assim como a sua vitória!


Por hoje encerramos aqui. Hoje consegui trazer para você uma tendência que está dominando o mercado. Ambiente em cloud estão cada vez mais presentes no dia a dia de várias empresas de todos os seguimentos por vários motivos. Não fique para traz, camarão que dorme a onda leva!


Aqui tratamos com o nosso querido Python um processo muito comum de um Engenheiro de Dados. Foi simples e objetivo, lógico que você pode encontrar diversos outros casos no seu ambiente profissional ou até mesmo acadêmico. A intenção foi apresentar para você como que é simples o processo de upload e manipulação de dados a partir de um Azure Blob Storage. Dando um passo atrás e repetindo, aconselho muito você a criar uma conta gratuita em qualquer ambiente de cloud, explore seus recursos, veja as vantagens e desvantagens para o seu negócio, é um mundo gigante, parece sem fim!


Deixo alguns links de referência para você. Bons estudos e simbora pro próximo post! Até lá! Grande abraço e fique com Deus!











Bibliotecas Azure for Python - https://azure-storage.readthedocs.io/







174 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page