Voltar ao blog
    Lançamento
    Philip Moore
    27 de agosto de 2026
    9 min de leitura

    Conheça a família de drivers ADBC da GizmoData: mova dados entre Oracle, Db2 e GizmoSQL

    Criamos drivers ADBC em Go puro, instaláveis por pip, para Oracle (sem Instant Client), IBM Db2 (sem CLI/JCC) e Quack do DuckDB, ao lado do nosso principal driver GizmoSQL. Como todos são nativos Arrow, mover uma tabela de Oracle ou Db2 para GizmoSQL exige poucas linhas de Python ou uma instrução SQL no DuckDB, nas duas direções.

    ADBC
    Oracle
    Db2
    GizmoSQL
    DuckDB
    Apache Arrow
    Go
    Integração de dados
    A família de drivers ADBC da GizmoData: drivers em Go puro e nativos Arrow movendo dados entre Oracle, Db2, Quack e GizmoSQL

    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:

    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.

    Pronto para experimentar o GizmoSQL?

    Experimente análises de dados ultrarrápidas com nosso mecanismo SQL de código aberto

    Agende uma demonstração!Agendamento via Calendly