Se ha publicado la versión 1.4.0 de la base de datos DuckDB, orientada a la ejecución de consultas analíticas y que conceptualmente es similar a SQLite. DuckDB combina características de SQLite, como la compactibilidad, la conectividad como una biblioteca incrustada, el almacenamiento de bases de datos en un solo archivo y la interfaz CLI, con capacidades y optimizaciones para realizar consultas analíticas que abarcan una parte significativa de los datos almacenados, como la agregación de todo el contenido de las tablas o la fusión de varias tablas grandes. El código del proyecto está escrito en C++ y se distribuye bajo la licencia MIT.
DuckDB proporciona un dialecto avanzado del lenguaje SQL, que incluye capacidades adicionales para manejar consultas muy complejas y de larga duración. Es posible utilizar tipos complejos (arreglos, estructuras, uniones) y ejecutar subconsultas correlacionadas arbitrarias y anidadas. Se admite la ejecución simultánea de múltiples consultas, así como la ejecución de consultas directamente desde archivos en formatos CSV y Parquet. También se encuentra disponible la importación desde bases de datos PostgreSQL.
El proyecto utiliza un shell basado en SQLite, un analizador de PostgreSQL, un componente de Date Math de MonetDB, su propia implementación de funciones de ventana (basada en el algoritmo Segment Tree Aggregation), un manejador de expresiones regulares basado en la biblioteca RE2, un optimizador de consultas propio, un mecanismo MVCC de control de concurrencia de versiones múltiples (Multi-Version Concurrency Control), así como un motor de ejecución de consultas vectorizado basado en el algoritmo Hyper-Pipelining Query Execution, que permite procesar grandes conjuntos de valores en una sola operación.
En la nueva versión:
- Se añadió soporte para el almacenamiento de archivos de bases de datos de forma encriptada. Se utiliza el algoritmo AES-256 en modo GCM para el cifrado. No solo se cifra el archivo principal de datos, sino también los registros WAL y los archivos temporales. Las claves para el cifrado de la base de datos se establecen con el comando ATTACH a través del parámetro ENCRYPTION_KEY. ATTACH ‘encrypted.db’ AS enc_db (ENCRYPTION_KEY ‘quack_quack’);
- Se añadió soporte para el comando 'MERGE INTO', que se puede utilizar como alternativa a la expresión 'INSERT ... ON CONFLICT', no requiere una clave primaria y puede trabajar con condiciones de fusión arbitrarias. El comando 'MERGE INTO' permite crear expresiones SQL condicionales que combinan en una sola expresión operaciones de INSERT, UPDATE y DELETE. Por ejemplo, mediante MERGE se puede organizar la fusión de dos tablas, insertando registros faltantes y actualizando los 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, *;
- Además, se añadió soporte para operaciones de escritura en tablas en formato Apache Iceberg (anteriormente solo se admitía la lectura), lo que permite mover datos de Iceberg a DuckDB y viceversa.
- Se ha añadido un indicador de progreso en el cliente de línea de comandos que muestra el tiempo estimado restante para completar la operación.
- Se ha agregado la función de ventana 'FILL', que se puede usar para interpolar valores faltantes en ventanas ordenadas. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
- Se ha implementado el complemento Teradata Connector para conectarse a bases de datos Teradata. Este complemento permite manipular tablas, ejecutar consultas y correr comandos SQL directamente en Teradata utilizando DuckDB.
- Se ha añadido soporte para la fijación del estado (checkpoint) de tablas almacenadas en memoria, lo que ha permitido implementar soporte para compresión. Además, al realizar un checkpoint se limpian las filas eliminadas y se libera espacio después de las operaciones de eliminación. ATTACH ‘:memory:’ AS memory_compressed (COMPRESS);
- Se han propuesto varias optimizaciones de rendimiento: La implementación de la ordenación se ha trasladado al uso del algoritmo de fusión k-vías (k-way merge sort), que reduce el movimiento de datos. Las expresiones de tabla comunes (Common Table Expression, CTE) ahora se materializan de manera predeterminada.
Fuente: opennet.ru
