Se ha lanzado DuckDB 1.2.0, un DBMS centrado en consultas analíticas y conceptualmente similar a SQLite. DuckDB combina el tamaño compacto de SQLite, la biblioteca conectable, el almacenamiento de base de datos de un solo archivo y la interfaz CLI con capacidades y optimizaciones para ejecutar consultas analíticas que abarcan una gran parte 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 extendido del lenguaje SQL que incluye capacidades adicionales para manejar consultas muy complejas y de larga duración. Es posible utilizar tipos complejos (matrices, estructuras, uniones), así como ejecutar subconsultas correlacionadas arbitrarias y anidadas. Se admite la ejecución simultánea de múltiples consultas y la ejecución de consultas directamente desde archivos CSV y Parquet. Está disponible soporte para la importación desde PostgreSQL DBMS.
El proyecto utiliza un shell de SQLite, un parser de PostgreSQL, un componente Date Math de MonetDB, su propia implementación de funciones de ventana (basada en el algoritmo Segment Tree Aggregation), un procesador de expresiones regulares basado en la librería RE2, su propio optimizador de consultas, un mecanismo MVCC para gestionar la ejecución simultánea de tareas (Multi-Version Concurrency Control), y 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.
Versículos nuevos:
- Se implementó soporte para nuevos métodos de compresión que no están habilitados de forma predeterminada para mantener la compatibilidad de los archivos DB con versiones anteriores de DuckDB. Para utilizar el formato de archivo DB mejorado, ahora es posible vincular la DB al número de versión: al abrir un archivo usando el parámetro "STORAGE_VERSION", ahora puede especificar la versión mínima compatible de la DB ("ATTACH 'file.db' (STORAGE_VERSION 'v1.2.0');"). Para convertir el nuevo formato al antiguo, puede utilizar el comando SQL COPY, por ejemplo: ATTACH 'file1.db'; ADJUNTAR 'archivo_convertido.db' (VERSIÓN_DE_ALMACENAMIENTO 'v1.0.0'); COPIAR DE LA BASE DE DATOS archivo1 A archivo_convertido;
- Se agregó soporte para el comando SQL "ALTER TABLE … ADD PRIMARY KEY" para agregar una clave principal a una tabla existente.
- Se eliminó una restricción que impedía volver a agregar identificadores que tenían un índice de seguimiento de unicidad si esos identificadores se eliminaban en la transacción actual. Por ejemplo, el siguiente código SQL ya no produce un error: CREATE TABLE students (id INTEGER PRIMARY KEY, name VARCHAR); INSERTAR EN estudiantes VALORES (1, 'John Doe'); COMENZAR; ELIMINAR DE estudiantes DONDE id = 1; INSERTAR EN estudiantes VALORES (1, 'Jane Doe');
- Se agregó soporte para cargar archivos CSV en codificaciones Latin-1 y UTF-16 (anteriormente solo se admitía la codificación UTF-8). DE read_csv('ciudades-latin-1.csv', codificación = 'latin-1');
- Se agregó soporte para usar separadores multibyte (hasta 4 bytes) en archivos CSV, lo que le permite especificar emoji como separador de columnas. a🦆b hola🦆mundo FROM read_csv('ejemplo.dsv', sep = '🦆');
- De manera predeterminada, el modo estricto está habilitado para analizar archivos CSV ("strict_mode = true"), lo que verifica que el formato cumpla con la especificación RFC 4180. En el modo estricto, solo se permite un carácter para separar líneas, lo que generará un error al intentar analizar archivos que usan no solo el carácter de avance de línea, sino también el carácter de retorno de carro ("\r\n") para separar líneas.
- El analizador CSV utiliza un nuevo algoritmo de detección de nueva línea que admite la paralelización de operaciones. El uso del nuevo algoritmo aceleró el análisis de CSV en aproximadamente un 15%.
- Se eliminó la limitación en el tamaño de línea en archivos CSV (anteriormente la línea no debía exceder los 8 MB).
- Al exportar datos en formato Parquet, se implementa el soporte para hashes (diccionarios) e índices basados en el filtro Bloom. Se ha implementado el método de compresión DELTA_BINARY_PACKED, que permite reducir significativamente el tamaño de los archivos Parquet.
- Se ha agregado un modo seguro a la interfaz de la línea de comandos, que se activa mediante la opción "-safe" o el comando ".safe_mode". En este modo, solo se permite el acceso al archivo de base de datos especificado inicialmente y cualquier intento de abrir otros archivos generará un error.
- La interfaz de línea de comandos ha mejorado el autocompletado de entrada. El código de autocompletado se ha convertido para utilizar PEG (Gramática de expresión de análisis).
- Al ejecutar comandos en la interfaz de línea de comandos, se ha implementado una visualización de números grandes, por ejemplo, al mostrar el número 100000000, se agregará adicionalmente “(100 millones)”.
- SQL ahora admite una sintaxis en la que se pueden especificar nombres abreviados de tablas y expresiones antes de los valores a los que apuntan (en lugar de utilizar la sintaxis "expresión AS nombre"): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
- El comando "SELECT" ahora admite la operación "RENAME" para cambiar el nombre de los campos de salida cuando se especifica la expresión "*": SELECT * RENAME (col1 AS new_col1) FROM enteros;
- El comando "SELECT" permite el uso de las operaciones "LIKE" y "SIMILAR TO" cuando se imprime mediante "*": SELECT * LIKE 'val%' FROM key_val;
- Calidad mejorada de la generación de números pseudoaleatorios.
- Se ha modernizado el optimizador de consultas. El rendimiento en la prueba TPC-H SF100 ha aumentado un 13%.
- Se propone una nueva API tipo C para desarrollar complementos, que se puede utilizar, por ejemplo, para crear nuevas funciones de agregación o de tabla.
- Se agregó soporte para sistemas con la biblioteca C estándar Musl.
Fuente: opennet.ru