Lançamento do DBMS SQLite 3.42 e DuckDB 0.8.0. CG/SQL com implementação de stored procedures para SQLite

O lançamento do SQLite 3.42, um DBMS leve projetado como uma biblioteca de plug-ins, foi publicado. O código SQLite é distribuído em domínio público, ou seja, pode ser usado sem restrições e gratuitamente para qualquer finalidade. O suporte financeiro para desenvolvedores SQLite é fornecido por um consórcio especialmente criado, que inclui empresas como Adobe, Oracle, Mozilla, Bentley e Bloomberg.

Grandes mudanças:

  • Para índices de texto completo FTS5, foi implementado o comando secure-delete, que limpa completamente todos os dados residuais após a exclusão.
  • Funções para processamento de dados JSON agora suportam extensões JSON5.
  • Planejador de consultas aprimorado. Por padrão, a otimização da contagem de visualizações está habilitada. O processamento de colunas não utilizadas em subconsultas é eliminado. Implementação aprimorada de otimização push-down.
  • Adicionada opção “--unsafe-testing” à interface da linha de comando, que permite o uso de alguns comandos perigosos, como “.testctrl”, destinados ao uso em testes. No modo de segurança (“-safe”) é permitido o uso dos comandos “.log on” e “.log off”. Adicionado suporte para o delimitador “-”, para argumentos após os quais o processamento de opções é desabilitado. Adicionados parâmetros ":inf" e ":nan" associados aos valores infinito e NaN.
  • Os nomes de funções SQL definidos pelo aplicativo podem se sobrepor às palavras-chave CROSS, FULL, INNER, LEFT, NATURAL, OUTER e RIGHT.
  • Os recursos do PRAGMA Integrity_check foram expandidos. Adicionada verificação para especificar valores NaN em colunas com a condição NOT NULL. Melhor conteúdo informativo das mensagens de erro.
  • O complemento de sessão permite interceptar alterações de tabelas sem ROWID.
  • O modificador “subsec” foi adicionado às funções para trabalhar com horas e datas para usar frações de segundos.
  • A profundidade de recursão padrão para matrizes e objetos JSON foi reduzida de 2000 para 1000.

Além disso, foi criada a versão do SGBD DuckDB 0.8.0, que desenvolve uma versão do SQLite, ampliada com capacidades e otimizações para execução de consultas analíticas cobrindo parte significativa dos dados armazenados, por exemplo, realizando agregação de todo o conteúdo de tabelas ou mesclar várias tabelas grandes. Fornece um dialeto avançado de SQL que inclui recursos adicionais para processar consultas muito complexas e demoradas e também oferece suporte a tipos complexos (matrizes, estruturas, uniões), executando várias consultas simultaneamente e executando consultas diretamente de arquivos CSV, JSON e Parquet . É possível importar do SGBD PostgreSQL.

Além do código shell do SQLite, o projeto usa um analisador do PostgreSQL em uma biblioteca separada, o componente Date Math do MonetDB, sua própria implementação de funções de janela (baseada no algoritmo Segment Tree Aggregation), um processador de expressão regular baseado em a biblioteca RE2, seu próprio otimizador de consultas e um mecanismo de controle MVCC de execução simultânea de tarefas (Multi-Version Concurrency Control), bem como um mecanismo de execução de consultas vetorizado baseado no algoritmo Hyper-Pipelining Query Execution, que permite grandes conjuntos de valores ​​para ser processado de uma só vez em uma operação. O código do projeto é distribuído sob a licença do MIT.

Na nova versão do DuckDB:

  • Adicionadas novas expressões "PIVOT" e "UNPIVOT" para transformar linhas em colunas e vice-versa.
  • Paralelização aprimorada ao importar e exportar dados. Por padrão, a leitura multithread de arquivos CSV e a gravação multithread são implementadas ao usar os formatos Parquet, CSV e JSON.
  • Adicionado operador "**" para iterar recursivamente através de diretórios ao determinar caminhos de arquivo (por exemplo, FROM "'data/glob/crawl/stackoverflow/**/*.csv';").
  • Adicionado suporte para operações de mesclagem (JOIN) para dados na forma de uma série temporal (fatias de valores de parâmetros em intervalos de tempo especificados), em que o critério para mesclar registros não é exato, mas uma coincidência aproximada de valores. em um campo com horário (por exemplo, você pode mesclar registros cujo horário difere em no máximo 1 minuto).
  • Implementado carregamento lento de metadados do banco de dados, o que possibilitou acelerar o lançamento do SGBD em dezenas de vezes.
  • Adicionado suporte para conectar funções personalizadas em Python.
  • Adicionado suporte para a API ADBC ​​(Arrow Database Connectivity) para transferência de dados usando Apache Arrow.
  • Uma ligação foi implementada para integração com código Swift.
  • Alterado o comportamento do operador de divisão ("/") para realizar cálculos de ponto flutuante em vez de operações inteiras por padrão. Um novo operador “//” é proposto para divisão inteira. O comportamento antigo pode ser retornado definindo “SET integer_division=true;”.
  • O método de levar em conta zero registros durante a classificação foi alterado de “NULLS FIRST” para “NULLS LAST”, ou seja, Os valores NULL agora serão impressos no final e não no início da lista. O comportamento antigo pode ser retornado definindo “SET default_null_order='nulls_first';”.

Adicionalmente, podemos destacar o projeto CG/SQL desenvolvido pelo Facebook, que fornece um gerador de código para utilização de procedimentos armazenados com SQLite. CG/SQL permite escrever procedimentos armazenados em um dialeto especial de T-SQL (Transact-SQL), que permite chamar funções da biblioteca C padrão e acessar dados em SQLite. Os procedimentos armazenados gerados são compilados em código C que usa a API SQLite C para executar ações especificadas e processar consultas complexas. Os procedimentos armazenados compilados podem ser conectados a programas C, Java e Objective-C. O código do projeto é escrito em C e distribuído sob a licença do MIT.

Fonte: opennet.ru

Adicionar um comentário