- O DuckDB pode funcionar como um banco de dados mesmo sem armazenar os dados de fato internamente
- Os dados ficam armazenados em um repositório separado, e o banco de dados opera referenciando esses dados
- O arquivo de banco de dados não inclui os dados reais, apenas instruções sobre como processá-los
Exemplo: serviço de robotáxi
- Descrição da situação: em um serviço de robotáxi, é necessário compartilhar com analistas os dados gerados diariamente.
- Problema: os dados são grandes demais para enviar por e-mail, e compartilhá-los por link também é complicado.
- Solução: usar o DuckDB para criar um arquivo de banco de dados e compartilhá-lo.
# 데이터베이스 생성
import duckdb
db = duckdb.connect("weird_rides.db")
db.sql("""
CREATE VIEW weird_rides
AS SELECT pickup_at, dropoff_at, trip_distance, total_amount
FROM 's3://robotaxi-inc/daily-ride-data/*.parquet'
WHERE fare_amount > 100 AND trip_distance < 10.0
""")
db.close()
- Resultado: o arquivo
weird_rides.db não contém os dados reais, mas sim instruções sobre como processá-los.
- Forma de compartilhamento: fazer upload desse arquivo para um armazenamento de blobs e compartilhar o link.
Acesso aos dados
- Conexão com o banco de dados: o destinatário inicia uma sessão local do DuckDB e se conecta ao arquivo de banco de dados compartilhado.
# 데이터베이스 연결
import duckdb
conn = duckdb.connect()
conn.sql("""
ATTACH 's3://robotaxi-inc/virtual-datasets/weird_rides.db'
AS rides_db (READ_ONLY)
""")
conn.sql("SELECT * FROM rides_db.weird_rides LIMIT 5")
- Download dos dados: ao executar a consulta, apenas os dados necessários são baixados do S3.
- Processamento eficiente dos dados: apenas as colunas necessárias são lidas, e filtros são aplicados para excluir dados desnecessários.
Vantagens do DuckDB
- Resistência a mudanças: mesmo com alterações no formato dos dados, na estratégia de particionamento ou no esquema, a forma de acesso aos dados pelo destinatário não muda.
- Navegador de dados em nuvem: com o DuckDB, é possível acessar facilmente conjuntos de dados relacionais por meio de hyperlinks.
2 comentários
Ah, em dados grandes, se você tiver só o catálogo e o caminho exato dos dados pequenos, talvez dê até para economizar um pouco de recursos do servidor, hehe.
Comentários no Hacker News
Uso eficiente do DuckDB e do duckdb-wasm para processar planilhas de respostas de um SaaS de criação de formulários: os dados de resposta são armazenados no S3 e consultados no cliente por meio do duckdb-wasm em um banco de dados local, otimizando o uso de rede e memória.
Introdução ao MotherDuck: um data warehouse gerenciado e serverless baseado em DuckDB, que oferece clones sem cópia, compartilhamento seguro e modo híbrido com dados na nuvem.
Integração do DuckDB ao editor SQL qStudio: suporta joins com vários bancos de dados e é recomendado como uma boa IDE para começar a usar DuckDB.
Sugestão de fornecer dados por links do S3: questiona o valor de bancos de dados e views intermediárias, argumentando que pode ser mais eficiente para analistas de dados lidarem diretamente com os dados brutos.
Introdução ao Data Tap: uma solução que incorpora DuckDB em funções Lambda para armazenar dados no S3 em formato Parquet, destacando eficiência de custos e escalabilidade.
Confusão sobre a forma de acesso aos dados: explica que engenheiros de dados tendem a evitar pré-agregações, enquanto analistas de dados costumam preferir acesso aos dados brutos.
Reação à afirmação de que a maioria dos bancos de dados não contém dados: considera essa afirmação exagerada.
Sugestão de como enviar consultas SQL por e-mail a colegas: levanta dúvidas sobre as vantagens de arquivos binários de banco de dados.
Dúvida sobre a utilidade de novas ferramentas SQL: considera mais apropriado armazenar os dados em um data warehouse persistente e criar as views necessárias.
Semelhança com Presto/Trino: opinião de que a abordagem do DuckDB parece similar à do Presto/Trino.