Toda equipe de dados acaba enfrentando o mesmo problema: os dados necessários estão em um banco para o qual você preferia não montar uma pilha pesada de clientes. Estão no Oracle, atrás do Instant Client. Ou em um sistema IBM Db2 ou Db2 for i, atrás do CLI e de um jar JDBC/JCC. E você só quer colocá-los em um mecanismo colunar rápido e aberto, como o GizmoSQL, sem gastar um dia configurando drivers nativos.
Por isso criamos uma família de drivers ADBC que simplifica essa tarefa. Eles são escritos em Go, instalados com um único pip install e, como todos usam Apache Arrow nativamente, mover dados entre eles exige poucas linhas de código — em qualquer direção.
Primeiro, o que é ADBC?
ADBC — Arrow Database Connectivity — é uma API independente de fornecedor para mover dados entre bancos e aplicações em lotes colunares Apache Arrow. Assim como JDBC ou ODBC, uma API atende a vários bancos. A diferença é que ADBC usa Arrow nativamente; leituras e gravações em massa transmitem dados colunares sem serialização linha a linha nem conversões repetidas de tipos.
A consequência é o ponto central: a saída de qualquer driver ADBC é a entrada de outro driver ADBC. Um leitor de um banco pode ser passado diretamente à chamada de ingestão em massa de outro, e as linhas fluem da origem ao destino em lotes Arrow, sem serem materializadas em um dataframe ou arquivo no caminho. É isso que transforma "Oracle para GizmoSQL" em um programa de cinco linhas, em vez de um projeto de ETL.
A família de drivers
- GizmoSQL — nosso principal driver para Apache Arrow Flight SQL. Um núcleo nativo em Go com OAuth/SSO, detecção automática de DDL/DML e perfis de conexão, disponível para Python, Go, R, Rust, C#, C/C++ e JavaScript.
pip install adbc-driver-gizmosql - Oracle — comunica-se diretamente pelo protocolo nativo Oracle TNS/TTC. Sem Oracle Instant Client, variáveis de ambiente ou pacotes tar nativos.
pip install adbc-driver-oracle - IBM Db2 — implementa o próprio protocolo DRDA. Sem IBM CLI, sem JCC.
pip install adbc-driver-db2 - DuckDB Quack — driver totalmente em Go para o protocolo cliente-servidor nativo do DuckDB, conectando dados Quack ao restante da família.
pip install adbc-driver-quack
Os drivers Oracle e Db2 chamam a atenção: são reimplementações independentes, feitas do zero em Go, dos protocolos de comunicação dos bancos. Portanto, não há nada a instalar além do wheel Python. (Eles não contêm código-fonte Oracle ou IBM e não têm vínculo nem endosso dessas empresas. DRDA é um padrão aberto publicado pelo The Open Group, e o protocolo Oracle foi implementado com referências públicas de licença aberta.)
Oracle → GizmoSQL, em Python
É só isto: abra uma conexão Oracle e uma GizmoSQL e passe o leitor Arrow do cursor Oracle para o adbc_ingest do GizmoSQL. As linhas fluem do Oracle para o GizmoSQL sem serem materializadas no cliente — sem pandas, sem ODBC, sem Oracle Client:
1import adbc_driver_oracle.dbapi as oracle
2import adbc_driver_gizmosql.dbapi as gizmosql
3
4with oracle.connect(uri=oracle_uri) as src, \
5 gizmosql.connect(gizmosql_uri, username="token", password=token) as dst:
6 with src.cursor() as s, dst.cursor() as d:
7 s.execute("SELECT * FROM sales.orders")
8 rows = d.adbc_ingest(table_name="orders",
9 data=s.fetch_record_batch(), # streamed, not buffered
10 mode="replace")
11 dst.commit()
12 print(f"Loaded {rows:,} rows")Troque adbc_driver_oracle por adbc_driver_db2 e as mesmas cinco linhas funcionam para Db2. Inverta as conexões e você estará enviando dados do GizmoSQL de volta para Oracle ou Db2. Esse é o objetivo de drivers nativos Arrow: a direção depende apenas de qual conexão recebe a chamada adbc_ingest.
E o GizmoSQL é apenas o exemplo. Como o leitor segue o padrão Apache Arrow, o mesmo código transmite dados de Oracle ou Db2 para qualquer destino compatível com ADBC: outro data warehouse, DuckDB, Postgres, SQLite ou outro banco. Esses drivers conectam seus dados ao GizmoSQL e a todo o ecossistema ADBC.
…ou inteiramente em SQL, pelo DuckDB e pelo GizmoSQL
Como cada driver é uma biblioteca ADBC c-shared padrão, a extensão comunitária adbc_scanner do DuckDB pode conectar o banco de origem e consultá-lo ao vivo, com envio de projeções e filtros à origem. Como o GizmoSQL incorpora o DuckDB, o mesmo funciona em um servidor GizmoSQL. Armazene as credenciais uma vez em um segredo e depois leia e grave em SQL comum:
INSTALL adbc_scanner FROM community;
LOAD adbc_scanner;
CREATE SECRET ora_secret (
TYPE adbc,
SCOPE 'oracle://db.example.com:1521/PROD',
driver 'oracle',
uri 'oracle://db.example.com:1521/PROD',
username 'app',
password 's3cret'
);
-- PULL: attach Oracle as a catalog and query it live
ATTACH 'oracle://db.example.com:1521/PROD' AS ora (TYPE adbc);
SELECT * FROM ora.SALES.ORDERS WHERE AMT > 100;
-- PUSH: write straight back with plain SQL — no special function needed
USE ora.SALES;
CREATE TABLE ORDERS_COPY AS SELECT * FROM local_orders;Leia com um SELECT comum, grave com um CREATE TABLE comum — nas duas direções, com um único segredo autossuficiente. Essa é a extensão adbc_scanner da Query.farm. Prefere manter credenciais fora do SQL? adbc_scanner também resolve perfis de conexão ADBC (assim como a extensão adbc da Columnar). Em qualquer caso, cada um desses caminhos tem um teste de integração no repositório do próprio driver, executado no CI contra um banco ativo. Portanto, essas promessas são verificadas a cada commit.
Por que Go puro, por que Arrow
Escrever os drivers em Go e expô-los pela biblioteca c-shared do ADBC traz duas vantagens ao mesmo tempo. Primeiro, nenhuma dependência de cliente nativo: o protocolo está no driver, então basta distribuir um wheel. Segundo, um núcleo para todas as linguagens: o mesmo driver pode ser chamado por Python, Go, R, Rust, C#, C/C++ e JavaScript, e se integra diretamente ao DuckDB. Como todo o caminho usa Arrow, os tipos são preservados: NUMBER do Oracle mantém a exatidão, timestamps mantêm seus fusos e decimais não passam por arredondamento em ponto flutuante.
Comece agora
Instale o GizmoSQL Core gratuitamente, use pip install para instalar o driver necessário e transfira sua primeira tabela. Cada driver tem sua própria página com trechos prontos para copiar e exemplos nas duas direções:
- Conheça toda a família de drivers ADBC
- Driver ADBC para Oracle — Go puro, sem Instant Client
- Driver ADBC para Db2 — Go puro, sem CLI/JCC
- Driver ADBC do GizmoSQL — Arrow Flight SQL, OAuth/SSO
- Driver ADBC para DuckDB Quack
Seus dados não precisam ficar presos à pilha de clientes de um fornecedor. Com ADBC, eles são Arrow — e Arrow vai a qualquer lugar.