Voltar ao blog
    Lançamento
    Equipe GizmoData
    10 de janeiro de 2026
    6 min de leitura

    ADBC Flight SQL 1.10.0: ingestão em massa para GizmoSQL

    O novo driver Python ADBC Flight SQL 1.10.0 traz ingestão em massa para servidores Arrow Flight SQL como o GizmoSQL. Carregue milhões de linhas diretamente de Python ou DuckDB, com inferência automática de esquema.

    ADBC
    Arrow Flight SQL
    GizmoSQL
    Python
    DuckDB
    Ingestão em massa
    Ingestão em massa com ADBC Flight SQL

    Temos o prazer de anunciar o lançamento da versão 1.10.0 do driver Python ADBC Flight SQL, que traz um recurso transformador para servidores Arrow Flight SQL como o GizmoSQL: ingestão em massa.

    Essa versão permite ingerir dados de clientes diretamente no GizmoSQL com facilidade, criando tabelas, acrescentando dados a tabelas existentes ou substituindo-as, sempre preservando automaticamente os tipos dos dados Arrow de origem.

    O que é ingestão em massa?

    A ingestão em massa permite enviar grandes volumes de dados da aplicação cliente diretamente a um servidor Arrow Flight SQL. Com o novo método adbc_ingest, você pode:

    • Criar novas tabelas a partir de dados Arrow com inferência automática de esquema
    • Acrescentar dados a tabelas existentes
    • Substituir tabelas existentes por novos dados

    Os tipos da tabela de destino correspondem automaticamente ao RecordBatch ou à Table Arrow de origem, sem definição manual de esquema.

    Combinando com a extensão ADBC Scanner do DuckDB

    Esse recurso fica ainda mais poderoso em conjunto com a extensão ADBC Scanner do DuckDB. Você pode enviar dados do DuckDB, ou de outros servidores GizmoSQL, diretamente ao GizmoSQL com facilidade, movimentando dados por sua infraestrutura analítica.

    Instalação

    O driver ADBC Flight SQL está no PyPI. A forma mais fácil de instalá-lo é com a ferramenta dbc da Columnar:

    dbc install flightsql

    Ou instale diretamente com pip:

    pip install adbc-driver-flightsql

    Dependências Python

    Para executar o exemplo abaixo, você precisará destas dependências:

    adbc-driver-flightsql
    duckdb==1.4.3
    pyarrow==22.0.*
    codetiming==1.4.0
    python-dotenv==1.2.*

    Experimente

    Disponibilizamos um servidor público GizmoSQL para você experimentar a ingestão em massa agora. Use estas credenciais:

    GIZMOSQL_USERNAME=adbc-scanner
    GIZMOSQL_PASSWORD="QueryDotFarmRules!123"

    Adicione-as a um arquivo .env no diretório do projeto, e o exemplo abaixo as carregará automaticamente.

    Exemplo: carregando dados TPC-H no GizmoSQL

    Este exemplo completo mostra como gerar dados de benchmark TPC-H no DuckDB e ingeri-los em massa no GizmoSQL:

    1import os
    2import time
    3
    4import duckdb
    5from adbc_driver_manager import dbapi
    6from codetiming import Timer
    7from dotenv import load_dotenv
    8
    9# Timer logging setup
    10TIMER_TEXT = "{name}: Elapsed time: {:.4f} seconds"
    11
    12
    13def main():
    14    load_dotenv()
    15
    16    with Timer(name="Overall program", text=TIMER_TEXT, initial_text=True):
    17        # Generate 1GB of TPC-H data in DuckDB
    18        with Timer(name="  Generate TPCH data (1GB)", text=TIMER_TEXT, initial_text=True):
    19            duckdb_conn = duckdb.connect()
    20            duckdb_conn.install_extension("tpch")
    21            duckdb_conn.load_extension("tpch")
    22            duckdb_conn.execute(query="CALL dbgen(sf=1.0)")
    23
    24        # Get Arrow reader for the lineitem table
    25        with Timer(name="  Get RecordBatch reader", text=TIMER_TEXT, initial_text=True):
    26            lineitem_arrow_reader = duckdb_conn.table("lineitem").fetch_arrow_reader(batch_size=10_000)
    27
    28        # Bulk ingest into GizmoSQL
    29        with Timer(name="  Bulk ingest into GizmoSQL", text=TIMER_TEXT, initial_text=True):
    30            with dbapi.connect(
    31                driver="flightsql",
    32                uri="grpc+tls://try-gizmosql-adbc.gizmodata.com:31337",
    33                db_kwargs={
    34                    "username": os.environ["GIZMOSQL_USERNAME"],
    35                    "password": os.environ["GIZMOSQL_PASSWORD"]
    36                },
    37                autocommit=True
    38            ).cursor() as cursor:
    39                ingest_start = time.perf_counter()
    40                rows_loaded = cursor.adbc_ingest(
    41                    table_name="bulk_ingest_lineitem",
    42                    data=lineitem_arrow_reader,
    43                    mode="replace"
    44                )
    45                ingest_seconds = time.perf_counter() - ingest_start
    46
    47                rows_per_sec = rows_loaded / ingest_seconds if ingest_seconds > 0 else float("inf")
    48                print(f"Loaded rows: {rows_loaded:,}")
    49                print(f"Ingest time: {ingest_seconds:.4f} s")
    50                print(f"Rows/sec: {rows_per_sec:,.2f}")
    51
    52                # Verify the row count
    53                cursor.execute("SELECT COUNT(*) FROM bulk_ingest_lineitem")
    54                result = cursor.fetchone()[0]
    55                print(f"Row count verification: {result:,}")
    56
    57
    58if __name__ == "__main__":
    59    main()

    Resultados de desempenho

    Ao executar este exemplo contra o GizmoSQL, alcançamos uma alta taxa de transferência:

    Timer Overall program started
    Timer   Generate TPCH data (1GB) started
      Generate TPCH data (1GB): Elapsed time: 2.3585 seconds
    Timer   Get RecordBatch reader started
      Get RecordBatch reader: Elapsed time: 0.0040 seconds
    Timer   Bulk ingest into GizmoSQL started
    Loaded rows: 6,001,215
    Ingest time: 33.9456 s
    Rows/sec: 176,789.18
    Row count verification: 6,001,215
      Bulk ingest into GizmoSQL: Elapsed time: 35.9270 seconds
    Overall program: Elapsed time: 38.2903 seconds
    • 6 milhões de linhas ingeridas em menos de 34 segundos
    • Taxa de transferência de cerca de 177.000 linhas/segundo
    • Inferência automática de esquema a partir dos dados Arrow

    Agradecimentos

    A GizmoData tem orgulho de ter contribuído para esta versão do Apache Arrow. Nosso pull request que implementa ingestão em massa no driver Flight SQL foi integrado e agora faz parte do Apache Arrow ADBC Release 22.

    Agradecemos à equipe Columnar, que criou e ajuda a manter o ADBC, pela experiência e colaboração para levar a ingestão em massa ao driver Flight SQL.

    Comece agora

    Pronto para experimentar a ingestão em massa com GizmoSQL? Veja como começar:

    1. Instale o driver: dbc install flightsql
    2. Experimente o GizmoSQL ou consulte a documentação
    3. Explore o repositório do GizmoSQL no GitHub

    Tem dúvidas ou quer saber mais? Entre em contato ou fale conosco pelo GitHub.

    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