Lanzamento do DBMS SQLite 3.42 e DuckDB 0.8.0. CG/SQL con implementación de procedementos almacenados para SQLite

Publicouse a versión de SQLite 3.42, un DBMS lixeiro deseñado como biblioteca de complementos. O código SQLite distribúese no dominio público, é dicir. pódese usar sen restricións e de forma gratuíta para calquera propósito. O apoio financeiro aos desenvolvedores de SQLite é proporcionado por un consorcio especialmente creado, que inclúe empresas como Adobe, Oracle, Mozilla, Bentley e Bloomberg.

Principais cambios:

  • Para os índices de texto completo FTS5, implementouse o comando de eliminación segura, que borra completamente todos os datos residuais despois da eliminación.
  • As funcións para procesar datos JSON agora admiten extensións JSON5.
  • Planificador de consultas mellorado. Por defecto, a optimización do reconto de vistas está activada. Elimínase o procesamento de columnas non utilizadas nas subconsultas. Implementación mellorada da optimización push-down.
  • Engadiuse a opción "--unsafe-testing" á interface da liña de comandos, que permite o uso dalgúns comandos perigosos, como ".testctrl", destinados a ser usados ​​nas probas. No modo seguro ("-safe"), permítese o uso dos comandos ".log on" e ".log off". Engadiuse soporte para o delimitador "—", para os argumentos despois dos cales o procesamento de opcións está desactivado. Engadíronse os parámetros ":inf" e ":nan" asociados aos valores infinito e NaN.
  • Permítese que os nomes das funcións SQL definidas pola aplicación se superpoñan coas palabras clave CROSS, FULL, INNER, LEFT, NATURAL, OUTER e RIGHT.
  • Ampliáronse as capacidades de PRAGMA integrity_check. Engadida comprobación para especificar valores de NaN en columnas coa condición NOT NULL. Mellorouse o contido de información das mensaxes de erro.
  • O complemento de sesión permite interceptar cambios das táboas sen ROWID.
  • O modificador "subseg" engadiuse ás funcións para traballar con horas e datas para usar fraccións de segundo.
  • A profundidade de recursión predeterminada para matrices e obxectos JSON reduciuse de 2000 a 1000.

Ademais, creouse o lanzamento do DBMS DuckDB 0.8.0, que desenvolve unha versión de SQLite, ampliada con capacidades e optimizacións para a execución de consultas analíticas que cobren unha parte importante dos datos almacenados, por exemplo, realizando a agregación de todo o contido. de táboas ou fusionar varias táboas grandes. Ofrece un dialecto avanzado de SQL que inclúe capacidades adicionais para procesar consultas moi complexas e que levan moito tempo, e tamén admite tipos complexos (matrices, estruturas, unións), executando varias consultas simultáneamente e executando consultas directamente desde ficheiros CSV, JSON e Parquet. . É posible importar desde o DBMS PostgreSQL.

Ademais do código de shell de SQLite, o proxecto usa un analizador de PostgreSQL nunha biblioteca separada, o compoñente Date Math de MonetDB, a súa propia implementación de funcións de fiestra (baseada no algoritmo de agregación de árbores de segmentos), un procesador de expresións regulares baseado en a biblioteca RE2, o seu propio optimizador de consultas e un mecanismo de control MVCC para a execución simultánea de tarefas (Control de simultaneidade de varias versións), así como un motor de execución de consultas vectorizada baseado no algoritmo de execución de consultas Hyper-Pipelining, que permite grandes conxuntos de valores. para ser procesado á vez nunha soa operación. O código do proxecto distribúese baixo a licenza MIT.

Na nova versión de DuckDB:

  • Engadíronse novas expresións "PIVOT" e "UNPIVOT" para transformar filas en columnas e viceversa.
  • Paralelización mellorada ao importar e exportar datos. De forma predeterminada, a lectura multiproceso de ficheiros CSV e a escritura multiproceso impléntanse cando se usan os formatos Parquet, CSV e JSON.
  • Engadiuse o operador "**" para iterar recursivamente polos directorios ao determinar as rutas dos ficheiros (por exemplo, FROM "'data/glob/crawl/stackoverflow/**/*.csv';").
  • Engadido soporte para operacións de fusión (JOIN) para datos en forma de serie temporal (porcións de valores de parámetros a intervalos de tempo especificados), nos que o criterio para combinar rexistros non é unha coincidencia exacta, senón aproximada de valores. nun campo co tempo (por exemplo, pode combinar rexistros, o tempo que non difire máis de 1 minuto).
  • Implementouse a carga perezosa de metadatos da base de datos, o que permitiu acelerar o lanzamento do DBMS decenas de veces.
  • Engadido soporte para conectar funcións personalizadas en Python.
  • Engadido soporte para a API ADBC ​​(Arrow Database Connectivity) para transferir datos usando Apache Arrow.
  • Implementouse unha vinculación para a integración co código Swift.
  • Cambiouse o comportamento do operador de división ("/") para realizar cálculos de coma flotante en lugar de operacións con números enteiros por defecto. Proponse un novo operador "//" para a división de enteiros. O comportamento antigo pódese devolver configurando "SET integer_division=true;".
  • O método de ter en conta cero rexistros ao ordenar cambiouse de "NULLS FIRST" a "NULLS LAST", é dicir. Os valores NULL agora imprimiranse ao final e non ao comezo da lista. O comportamento antigo pódese devolver configurando "SET default_null_order='nulls_first';".

Ademais, podemos destacar o proxecto CG/SQL desenvolvido por Facebook, que proporciona un xerador de código para usar procedementos almacenados con SQLite. CG/SQL permítelle escribir procedementos almacenados nun dialecto especial de T-SQL (Transact-SQL), que permite chamar a funcións da biblioteca C estándar e acceder a datos en SQLite. Os procedementos almacenados xerados compílanse en código C que usa a API C de SQLite para realizar accións especificadas e procesar consultas complexas. Os procedementos almacenados compilados pódense conectar a programas C, Java e Objective-C. O código do proxecto está escrito en C e distribúese baixo a licenza MIT.

Fonte: opennet.ru

Engadir un comentario