Foi publicado o lançamento do SGBD DuckDB 1.2.0, focado na execução de consultas analíticas e que, de forma conceitual, lembra o SQLite. O DuckDB combina propriedades do SQLite, como compactação, conexão como biblioteca embutida, armazenamento de banco de dados em um único arquivo e interface de linha de comando, com recursos e otimizações para executar consultas analíticas que abrangem uma parte significativa dos dados armazenados, como agregações de todo o conteúdo de tabelas ou fusões 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:
- Foi implementado suporte a novos métodos de compressão, que não estão ativados por padrão para manter a compatibilidade dos arquivos de banco de dados com versões anteriores do DuckDB. Para utilizar o formato de arquivo de banco de dados aprimorado, foi proposta a possibilidade de vincular o banco de dados a um número de versão — ao abrir o arquivo usando o parâmetro “STORAGE_VERSION”, agora é possível definir a versão mínima suportada do banco de dados (“ATTACH ‘file.db’ (STORAGE_VERSION ‘v1.2.0’);”). Para converter o novo formato para o antigo, pode-se usar o comando SQL COPY, por exemplo: ATTACH ‘file1.db’; ATTACH ‘converted_file.db’ (STORAGE_VERSION ‘v1.0.0’); COPY FROM DATABASE file1 TO converted_file;
- Foi adicionado suporte ao comando SQL “ALTER TABLE … ADD PRIMARY KEY” para adicionar uma chave primária a uma tabela existente.
- Foi removida a limitação que impedia a reinserção de identificadores para os quais existe um índice de rastreamento de unicidade, caso esses identificadores tenham sido excluídos na transação atual. Por exemplo, o código SQL abaixo agora não resulta em erro: CREATE TABLE students (id INTEGER PRIMARY KEY, name VARCHAR); INSERT INTO students VALUES (1, ‘John Doe’); BEGIN; DELETE FROM students WHERE id = 1; INSERT INTO students VALUES (1, ‘Jane Doe’);
- Adicionada a suporte para upload de arquivos CSV nas codificações Latin-1 e UTF-16 (anteriormente apenas UTF-8 era suportado). FROM read_csv(‘cities-latin-1.csv’, encoding = ‘latin-1’);
- Adicionada a suporte para o uso de separadores multilinha em arquivos CSV (até 4 bytes), permitindo a especificação de emoji como separador de colunas. a🦆b hello🦆world FROM read_csv(‘example.dsv’, sep = ‘🦆’);
- O modo estrito de análise de arquivos CSV está ativado por padrão (‘strict_mode = true’), validando a conformidade com as especificações do RFC 4180. No modo estrito, é permitido o uso de apenas um símbolo para separação de linhas, gerando um erro ao tentar analisar arquivos que utilizam não apenas o caractere de nova linha, mas também o retorno de carro (‘\r\n’).
- O analisador CSV agora utiliza um novo algoritmo para determinar novas linhas, suportando a paralelização das operações. O uso do novo algoritmo acelerou a análise de CSV em cerca de 15%.
- Removido o limite de tamanho da linha em arquivos CSV (anteriormente, a linha não poderia exceder 8 MB).
- Ao exportar dados no formato Parquet, foi implementado suporte a hashes (dicionários) e índices com base no filtro Bloom. Implementado o método de compressão DELTA_BINARY_PACKED, que permite reduzir significativamente o tamanho dos arquivos Parquet.
- Um modo seguro foi adicionado à interface da linha de comando, ativado pela opção ‘-safe’ ou pelo comando ‘.safe_mode’. Neste modo, o acesso é permitido apenas ao arquivo de banco de dados originalmente especificado, e tentar abrir outros arquivos resultará em um erro.
- A interface da linha de comando melhorou o autocompletar. O código para autocompletar foi adaptado para usar PEG (Gramática de Expressão de Análise).
- Ao executar comandos na interface da linha de comando, grandes números são exibidos de forma clara, por exemplo, ao exibir o número 100000000, será acrescido ‘(100 milhões)’.
- Adicionada na SQL suporte à sintaxe onde nomes abreviados de tabelas e expressões podem ser especificados antes dos valores que referenciam (em vez de usar a sintaxe ‘expressão AS nome’): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
- No comando «SELECT», foi implementado o suporte à operação «RENAME» para renomear campos exibidos ao especificar a expressão «*»: SELECT * RENAME (col1 AS new_col1) FROM integers;
- No comando «SELECT», é permitido o uso das operações «LIKE» e «SIMILAR TO» ao exibir através do «*»: SELECT * LIKE ‘val%’ FROM key_val;
- A qualidade da geração de números pseudo-aleatórios foi aprimorada.
- O otimizador de consultas foi modernizado. O desempenho durante o teste TPC-H SF100 aumentou em 13%.
- Um novo API semelhante ao C foi proposto para o desenvolvimento de plugins, que pode ser usado, por exemplo, para criar novas funções agregadas ou tabelas.
- Foi adicionada a compatibilidade com sistemas que possuem a biblioteca padrão C Musl.
Fonte: opennet.ru
