Foi lançado o DuckDB 1.4.0, um SGBD orientado à execução de consultas analíticas e conceitualmente semelhante ao SQLite. O DuckDB combina propriedades do SQLite, como compactação, conexão na forma de biblioteca embutida, armazenamento de banco de dados em um único arquivo e interface CLI, com capacidades e otimizações para execução de consultas analíticas que abrangem uma parte significativa dos dados armazenados, como agregação de todo o conteúdo das tabelas ou combinação de várias tabelas grandes. O código do projeto é escrito em C++ e é distribuído sob a licença MIT.
O DuckDB fornece um dialeto avançado da linguagem SQL, que inclui recursos adicionais para o processamento de consultas muito complexas e longas. É possível utilizar tipos complexos (arrays, estruturas, uniões), bem como executar subconsultas correlacionadas arbitrárias e aninhadas. Suporte para a execução simultânea de várias consultas, execução de consultas diretamente de arquivos nos formatos CSV e Parquet é suportado. A importação de SGBDs PostgreSQL também é possível.
O projeto utiliza um shell de SQLite, parser do PostgreSQL, componente de Data Math do MonetDB, sua própria implementação de funções de janelas (baseada no algoritmo Segment Tree Aggregation), um processador de expressões regulares baseado na biblioteca RE2, um otimizador de consultas próprio, um mecanismo MVCC de controle de concorrência (Controle de Concorrência Multi-versão), além de um mecanismo de execução de consultas vetorizado baseado no algoritmo Hyper-Pipelining Query Execution, permitindo que grandes conjuntos de valores sejam processados em uma única operação.
Na nova versão:
- Adicionada a capacidade de armazenar arquivos de banco de dados de forma criptografada. O algoritmo AES-256 no modo GCM é usado para a criptografia. O arquivo principal de dados, bem como os logs WAL e arquivos temporários, são criptografados. As chaves para criptografar o banco de dados são definidas pelo comando ATTACH através do parâmetro ENCRYPTION_KEY. ATTACH ‘encrypted.db’ AS enc_db (ENCRYPTION_KEY ‘quack_quack’);
- Adicionada a capacidade do comando “MERGE INTO”, que pode atuar como uma alternativa à expressão “INSERT … ON CONFLICT”, que não exige uma chave primária e funciona com condições de mesclagem arbitrárias. O comando “MERGE INTO” permite criar expressões SQL condicionais que combinam operações de INSERT, UPDATE e DELETE em uma única expressão. Por exemplo, ao usar MERGE, é possível realizar a mescla de duas tabelas, inserindo registros ausentes e atualizando os existentes. WITH deletes(item_id, delete_threshold) AS (VALUES (10, 3000)) MERGE INTO Stock USING deletes USING (item_id) WHEN MATCHED AND balance < delete_threshold THEN DELETE RETURNING merge_action, *;
- Além disso, foi adicionada a capacidade de operações de escrita em tabelas no formato Apache Iceberg (anteriormente apenas leitura era suportada), permitindo transferir dados do Iceberg para o DuckDB e vice-versa.
- O cliente de linha de comando agora inclui um indicador de progresso da operação, prevendo o tempo restante até a conclusão.
- Adicionada a função de janela “FILL”, que pode ser usada para interpolar valores ausentes em janelas ordenadas. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
- Implementado o complemento Teradata Connector para se conectar a bancos de dados Teradata. O complemento permite manipular tabelas, executar consultas e executar comandos SQL diretamente no Teradata, usando DuckDB.
- Foi adicionado suporte para o salvamento de estado (checkpoint) de tabelas armazenadas em memória, permitindo a implementação de suporte à compressão. Além disso, durante o salvamento de estado, ocorre a limpeza de linhas removidas e a liberação de espaço após operações de exclusão. ATTACH ':memory:' AS memory_compressed (COMPRESS);
- Várias otimizações de desempenho foram propostas: a implementação da ordenação foi transferida para o uso do algoritmo de mesclagem em múltiplas vias (k-way merge sort), que reduz o movimento de dados. Expressões de tabela comuns (Common Table Expression, CTE) agora são materializadas por padrão.
Fonte: opennet.ru
