Configurando e utilizando o oracle-client no airflow

Fernanda Monteiro
2 min readJul 14, 2020

--

O Airflow é uma ferramenta desenvolvida no Airbnb para resolver seus problemas de fluxos de trabalho. Tem a característica de ser aberto, e permite agendar e monitorar as tarefas de forma simples.

Ele pode ser instalado diretamente em um sistema operacional linux pelo gerenciador de pacotes ou usando o docker. O exemplo apresentado aqui será baseado em uma instalação feita com o docker e utilizando o ubuntu.

Preparando o oracle-client

Vamos iniciar baixando o oracle-client para linux aqui. Baixe o pacote básico em formato zip.

Após o download, mova o arquivo para a máquina/servidor que será utilizado para a instalação do airflow.

Extraia os arquivos com:

unzip instantclient-<versao>.zip

Preparando o arquivo do docker

Faça o clone do repositório do puckel/docker-airflow.

No Dockerfile adicione a biblioteca libaio, como mostra a última linha.

&& apt-get install -yqq --no-install-recommends \        
$buildDeps \
freetds-bin \
build-essential \
default-libmysqlclient-dev \
apt-utils \
curl \
rsync \
netcat \
locales \
libaio1 \

Na parte do arquivo em que é feita instalação das bibliotecas do python adicione a seguinte linha:

&& pip install cx_Oracle

Agora vamos adicionar os arquivos do oracle-client no docker, na parte em que há o COPY adicionamos a linha em negrito:

COPY script/entrypoint.sh /entrypoint.sh
COPY oracle-client /opt/oracle

Onde estamos copiando os arquivos presentes na pasta oracle-client para o pasta /opt/oracle. Dentro da pasta oracle-cliente tem outra pasta, a pasta que se obtém ao fazer o unzip de nome instantclient mais a versão:

/instantclient_19_5

No docker o caminho será:

/opt/oracle/instantclient_19_5

Para finalizar no Dockerfile, adicionar as seguintes linhas depois desse RUN específico:

RUN chown -R airflow: ${AIRFLOW_USER_HOME}ENV LD_LIBRARY_PATH /opt/otacle/instantclient_19_5:${LD_LIBRARY_PATH}
ENV PATH /opt/otacle/instantclient_19_5:${PATH}

Pronto, agora podemos fazer o build na imagem. Após gerar a imagem e iniciar o container, pegamos o id do container ou nome do container e executamos:

docker exec -it nome_container bash

Após estar no container executamos:

sudo sh -c "echo /opt/oracle/instantclient_19_3 > \
/etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig

Agora é só escrever o script python que se conecta a um banco oracle:

import pandas as pd
from sqlalchemy import create_engine
engine = create_engine = ("oracle+cx_oracle://usuario:senha@nome_dominio_ip:1521/nome_servico")sql = "SELECT * FROM SCHEMA.TBL_TABELA"
df_tabela = pd.read_sql(sql, engine)

Referências

--

--