Pular para o conteúdo

Como fazer ETL com Python e Oracle: um guia passo a passo com exemplos práticos

Como fazer ETL com Python e Oracle: um guia passo a passo com exemplos práticos

ETL é o processo de extrair, transformar e carregar dados de diferentes fontes para um destino, como um banco de dados, um data warehouse, ou uma plataforma em nuvem. ETL é uma técnica essencial para integrar e analisar dados de diferentes sistemas e aplicações.

Python é uma linguagem de programação popular e versátil, que oferece diversas bibliotecas e ferramentas para trabalhar com dados. Python pode ser usado para realizar as três etapas do ETL de forma eficiente e flexível.

Oracle é um sistema gerenciador de banco de dados (SGBD) que oferece recursos avançados de armazenamento, processamento e análise de dados. Oracle pode ser usado como uma fonte ou um destino de dados no processo ETL.

Neste artigo, vamos mostrar como fazer ETL usando Python com Oracle, seguindo os seguintes passos:

  • Conectar-se ao banco de dados Oracle usando o módulo cx_Oracle
  • Extrair os dados do Oracle usando consultas SQL
  • Transformar os dados usando o módulo pandas
  • Carregar os dados para o Oracle usando o método executemany

Conectar-se ao banco de dados Oracle

Para conectar-se ao banco de dados Oracle usando Python, precisamos instalar o módulo cx_Oracle, que é uma interface Python para o Oracle Database. Para instalar o módulo, podemos usar o comando pip:

pip install cx_Oracle

Também precisamos ter instalado o Oracle Client, que é um conjunto de bibliotecas nativas que permitem a comunicação entre o Python e o Oracle. Podemos baixar o Oracle Client do site oficial da Oracle.

Depois de instalar o módulo e o Oracle Client, podemos importar o módulo cx_Oracle no nosso código Python:

import cx_Oracle

Para conectar-se ao banco de dados Oracle, precisamos criar uma string de conexão com os seguintes parâmetros:

  • User: O nome do usuário do banco de dados
  • Password: A senha do usuário do banco de dados
  • DSN: O data source name, que contém as informações do servidor e do serviço do banco de dados

Podemos criar a string de conexão usando a função makedsn do módulo cx_Oracle:

dsn = cx_Oracle.makedsn(host="localhost", port=1521, service_name="orcl")

Em seguida, podemos usar a função connect do módulo cx_Oracle para criar um objeto de conexão:

conn = cx_Oracle.connect(user="scott", password="tiger", dsn=dsn)

Com o objeto de conexão, podemos criar um objeto cursor, que nos permite executar comandos SQL no banco de dados:

cur = conn.cursor()

Extrair os dados do Oracle

Para extrair os dados do Oracle, podemos usar o método execute do objeto cursor para executar consultas SQL. Por exemplo, se quisermos extrair todos os registros da tabela EMPLOYEES, podemos fazer:

cur.execute("SELECT * FROM EMPLOYEES")

O método execute retorna um objeto que podemos iterar para obter os resultados da consulta. Cada resultado é uma tupla que contém os valores das colunas da tabela. Por exemplo, se quisermos imprimir os nomes e os salários dos empregados, podemos fazer:

for row in cur:
    print(row[1], row[7]) # Nome está na segunda coluna e salário na oitava

Podemos também usar o método fetchall do objeto cursor para obter todos os resultados da consulta em uma lista:

results = cur.fetchall()

Transformar os dados usando pandas

Para transformar os dados extraídos do Oracle, podemos usar o módulo pandas, que é uma biblioteca Python para manipulação e análise de dados. Para instalar o módulo pandas, podemos usar o comando pip:

pip install pandas

Em seguida, podemos importar o módulo pandas no nosso código Python:

import pandas as pd

Para converter os resultados da consulta em um objeto DataFrame do pandas, que é uma estrutura tabular bidimensional com rótulos de linhas e colunas, podemos usar a função DataFrame do módulo pandas:

df = pd.DataFrame(results)

Podemos também especificar os nomes das colunas do DataFrame usando o parâmetro columns:

df = pd.DataFrame(results, columns=["EMPLOYEE_ID", "FIRST_NAME", "LAST_NAME", "EMAIL", "PHONE_NUMBER", "HIRE_DATE", "JOB_ID", "SALARY", "COMMISSION_PCT", "MANAGER_ID", "DEPARTMENT_ID"])

Com o objeto DataFrame, podemos aplicar diversas transformações nos dados, como filtrar, agrupar, ordenar, agregar, juntar, etc. Por exemplo, se quisermos calcular o salário médio por departamento, podemos fazer:

df.groupby("DEPARTMENT_ID")["SALARY"].mean()

Se quisermos aumentar o salário dos empregados em 10%, podemos fazer:

df["SALARY"] = df["SALARY"] * 1.1

Se quisermos juntar os dados dos empregados com os dados dos departamentos, que estão em outra tabela, podemos fazer:

# Extrair os dados da tabela DEPARTMENTS
cur.execute("SELECT * FROM DEPARTMENTS")
departments = cur.fetchall()
# Converter os dados em um DataFrame
df2 = pd.DataFrame(departments, columns=["DEPARTMENT_ID", "DEPARTMENT_NAME", "MANAGER_ID", "LOCATION_ID"])
# Juntar os dois DataFrames pelo DEPARTMENT_ID
df3 = pd.merge(df, df2, on="DEPARTMENT_ID")

Carregar os dados para o Oracle

Para carregar os dados transformados para o Oracle, podemos usar o método executemany do objeto cursor para executar um comando SQL de inserção para cada linha do DataFrame. Por exemplo, se quisermos inserir os dados dos empregados com o salário aumentado em uma nova tabela chamada EMPLOYEES_NEW, podemos fazer:

# Criar a nova tabela no banco de dados
cur.execute("CREATE TABLE EMPLOYEES_NEW AS SELECT * FROM EMPLOYEES WHERE 1=0")
# Converter o DataFrame em uma lista de tuplas
data = df.to_records(index=False).tolist()
# Definir o comando SQL de inserção com os parâmetros
sql = "INSERT INTO EMPLOYEES_NEW VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11)"
# Executar o comando SQL para cada linha da lista
cur.executemany(sql, data)
# Confirmar as alterações no banco de dados
conn.commit()

Conclusão

Neste artigo, mostramos como fazer ETL usando Python com Oracle, seguindo as etapas de conexão, extração, transformação e carga de dados. Python é uma linguagem poderosa e flexível para trabalhar com dados, e Oracle é um sistema robusto e confiável para armazenar e processar dados. Combinando os dois, podemos criar soluções eficientes e eficazes para integrar e analisar dados de diferentes fontes e destinos.

Espero que tenha gostado do artigo e que tenha aprendido algo novo.

Abs

Referências

Quão útil foi este post ?

Clique em uma estrela para classificar o post

nota média 5 / 5. Contagem de votos: 11

Sem votos ! Seja o primeiro a classificar !

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress