Data Engineering — Transfer Jobs na Google Cloud Platform

Marina Cavalari
4 min readAug 1, 2022

--

Data Warehouse. Data lake. Transferir Dados. É muito fácil achar qualquer uma dessas palavras e expressões em algum texto sobre engenharia de dados ultimamente, e é ainda mais fácil achar essas palavras em textos difíceis de serem lidos ou interpretados.

Se não for pra mergulhar nos dados eu nem vou.

De uma forma bem simples e abstrata podemos entender os Data lakes como grandes “lagos” de dados não processados, fazendo uma ponte, seria um grande bucket com todos os dados crus de uma empresa (isso inclui dados de apps, métricas provenientes de parcerias, marketing, etc). Um Data Warehouse é algo mais robusto, então podemos descrevê-lo como um repositório onde concentram-se os dados (muitas vezes já tratados de forma clara e coerente conforme as regras de negócio aplicáveis) e através dessas informações centralizadas podemos tirar insights e resultados dos dados provenientes de análises e também utilizá-los para a criação de políticas internas ou sobre determinado comportamento de usuários/clientes.

Hoje é muito comum encontrar nas empresas as Clouds como ferramentas principais para o tratamento e armazenamento dessas informações. Claro que não é só para lidar com o ambiente de dados que as empresas investem nas clouds(mas é o foco do post pelo menos), então, é possível fazer a transferência de dados entre uma cloud e outra de maneira fácil e escalável? A resposta é: Sim. Mas por quê eu iria querer fazer transferencia entre clouds? Algumas (muitas) empresas tem um ambiente multi cloud e dessa forma precisa sim ter o dado disponível em dois lugares, já outras estão em processo de migração de dados, e mesmo que a transferência seja feita uma única vez, é bom fazer sempre do melhor jeito :)

Dwight é igual console de cloud: completo e confuso

Transfer Jobs dentro da GCP o que são, do que se alimentam, onde vivem?

Um Transfer Job pode ser compreendido como um processo que roda para realizar a transferências de dados, podendo ser algo periódico ou pontual. Os transfer jobs são usados quando vamos realizar a transferências entre as nuvens (ou dentro da própria GCP mesmo) e ele guarda todos os metadados sobre a transferência, por exemplo: Onde encontrar os arquivos e para onde move-los; A quantidade de arquivos; Se ele vão ser subscritos ou não, etc.

O Google nos oferece diversas formas de criar esses transfer Jobs, desde a interface web, API em si, e até mesmo uma SDK Java e uma em Python (os exemplos de hoje vão ser feitos usando a versão Python da SDK).

Dessa forma, para criarmos nosso Data Warehouse, e disponibilizarmos nossos dados tratados em plataformas Google de BI (por exemplo: Looker ou DataStudio) vamos criar um TransferJob entre buckets da própria GCP conforme exemplo abaixo.

O primeiro passo para interagirmos com a SDK da GCP é a autenticação do seu usuário e também o import das dependências que vão ser necessárias pra gente conseguir acessar com sucesso:

Para gerar suas credenciais para o processo de autenticação voce pode seguir o fluxo dentro da própria interface web do google através da trilha:

Console → API & Services → Create OAuth client ID → Desktop Application

Uma vez que o usuário esteja autenticado e o cliente seja inicializado, nós precisamos apenas passar o objeto que é a construção do Transfer Job, e ele lembra muito a forma de um json. Abaixo podemos ver todos os atributos dele, desde seu projeto, status (que é um enum conforme podemos encontrar na própria documentação do Google aqui), suas especificações de buckets a serem acessados e os buckets de destino, e também o método de transferência, lembrando que podemos subscrever os arquivos, mantê-los duplicados, ou excluí-los após a realização das transferências.

O Transfer Job acima é responsável por retirar de um bucket e colocar em outro, uma vez concluída a transferência o arquivo do bucket de origem será excluído, visando otimizar a utilização dos buckets dentro do ambiente do storage da Google cloud. Caso os nossos arquivos de origem estivessem dentro do ambiente AWS por exemplo, precisaríamos apenas substituir os atributos de path dentro do objeto transfer_specs e seria trocar gcs_data_source por awsS3DataSource seguindo as especificações próprias do Google.

Caleb é meu nerd favorito sim

Uma vez concluído isso, nossa transfer está pronta e os dados transferidos.

Para checarmos os transfer Jobs, podemos usar a função abaixo, e ela irá listar todos os transfer jobs existentes de um determinado projeto.

O processo é bem simples e também é facilitado e abstraído pela SDK. Mas podemos fazer ele em qualquer outra linguagem, seguindo as recomendações e orientações do Google.

Alguns links úteis caso seja necessário acessar informações específicas:

--

--