Випуск СУБД SQLite 3.42 та DuckDB 0.8.0. CG/SQL з реалізацією збережених процедур для SQLite

Опубліковано реліз SQLite 3.42, легковагої СУБД, оформленої у вигляді бібліотеки, що підключається. Код SQLite поширюється як суспільне багатство (public domain), тобто. може використовуватися без обмежень та безоплатно в будь-яких цілях. Фінансову підтримку розробників SQLite здійснює спеціально створений консорціум, до якого входять такі компанії, як Adobe, Oracle, Mozilla, Bentley та Bloomberg.

Основні зміни:

  • Для повнотекстових індексів FTS5 реалізовано команду secure-delete, що здійснює повне чищення всіх залишкових даних після видалення.
  • У функціях обробки даних у форматі JSON реалізована підтримка розширень JSON5.
  • Поліпшено планувальник запитів. За замовчуванням увімкнено оптимізацію «count-of-view». Виключено оброблення стовпців, що не використовуються, у підзапитах. Поліпшено реалізацію оптимізації push-down.
  • До інтерфейсу командного рядка додано опцію «—unsafe-testing», яка дозволяє використовувати деякі небезпечні команди, такі як «.testctrl», призначені для застосування при тестуванні. У безпечному режимі («-safe») дозволено використання команд «.log on» та «.log off». Додано підтримку роздільника «—«, для аргументів після якого відключається обробка опцій. Додані параметри «:inf» та «:nan», пов'язані зі значеннями нескінченність та NaN.
  • У іменах, що визначаються на стороні програми SQL-функцій, дозволено перетин з ключовими словами CROSS, FULL, INNER, LEFT, NATURAL, OUTER і RIGHT.
  • Розширено можливості PRAGMA integrity_check. Додано перевірку вказівки значення NaN у стовпцях з умовою NOT NULL. Поліпшено інформативність повідомлень про помилки.
  • У додатку session дозволено перехоплення змін із таблиць без ROWID.
  • У функції для роботи з часом та датами доданий модифікатор «subsec» для використання часток секунд.
  • Глибина рекурсії для масивів та об'єктів JSON за умовчанням зменшена з 2000 до 1000.

Крім того, сформовано випуск СУБД DuckDB 0.8.0, що розвиває варіант SQLite, розширений можливостями і оптимізаціями для виконання аналітичних запитів, що охоплюють значну частину даних, що зберігаються, наприклад, що виконують агрегування всього вмісту таблиць або злиття декількох великих таблиць. Надається розширений діалект мови SQL, що включає додаткові можливості для обробки дуже складних запитів, що тривало виконуються, а також підтримує складні типи (масиви, структури, об'єднання), одночасне виконання декількох запитів і виконання запитів безпосередньо з файлів у форматі CSV, JSON і Parquet. Є можливість імпорту із СУБД PostgreSQL.

Крім коду оболонки із SQLite проектом використовується винесений в окрему бібліотеку парсер із PostgreSQL, компонент Date Math із MonetDB, своя реалізація віконних функцій (на базі алгоритму Segment Tree Aggregation), обробник регулярних виразів на основі бібліотеки RE2, власні оптимізатор запитів, MVCC-механізм управління одночасним виконанням завдань (Multi-Version Concurrency Control), а також векторизований движок виконання запитів на базі алгоритму Hyper-Pipelining Query Execution, що дозволяє в одній операції разом обробляти великі набори значень. Код проекту розповсюджується під ліцензією MIT.

У новій версії DuckDB:

  • Додано нові вирази «PIVOT» та «UNPIVOT» для трансформації рядків у стовпці та навпаки.
  • Покращено розпаралелювання при імпорті та експорті даних. За промовчанням реалізовано читання з файлів у форматі CSV у кілька потоків та багатопотоковий запис при використанні форматів Parquet, CSV та JSON.
  • Доданий оператор "**" для рекурсивного перебору каталогів при визначенні файлових шляхів (наприклад, FROM "data/glob/crawl/stackoverflow/**/*.csv';").
  • Додано підтримку операцій злиття (JOIN) для даних у формі часового ряду (зрізи значень параметрів через задані проміжки часу), в яких як критерій злиття записів використовується не точне, а приблизне збіг значень у полі з часом (наприклад, можна об'єднати записи, час яких відрізняється не більше ніж на 1 хвилину).
  • Реалізовано відкладене завантаження метаданих БД, що дозволило в десятки разів прискорити запуск СУБД.
  • Додана підтримка підключення функцій користувача на мові Python.
  • Додано підтримку API ADBC ​​(Arrow Database Connectivity) для передачі даних за допомогою Apache Arrow.
  • Реалізовано прив'язку для інтеграції з кодом мовою Swift.
  • Змінено поведінку оператора поділу («/»), який тепер за умовчанням виконує обчислення з плаваючою комою замість цілих операцій. Для цілого поділу запропоновано новий оператор «//». Стару поведінку можна повернути настройкою "SET integer_division=true;".
  • Метод обліку нульових записів при сортуванні змінено з NULLS FIRST на NULLS LAST, тобто. значення NULL тепер виводитимуться наприкінці, а чи не початку списку. Стару поведінку можна повернути настройкою "SET default_null_order='nulls_first';".

Додатково можна відзначити проект CG/SQL, що розвивається компанією Facebook, що надає генератор коду для використання процедур, що зберігаються з SQLite. CG/SQL дозволяє оформити процедури, що зберігаються на спеціальному діалекті T-SQL (Transact-SQL), що допускає виклик функцій стандартної Сі-бібліотеки та звернення до даних у SQLite. Створені процедури, що зберігаються, компілюються в код на мові Сі, що використовує SQLite C API для виконання заданих дій і обробки складних запитів. Скомпільовані процедури, що зберігаються, можуть підключатися до програм мовами Сі, Java і Objective-C. Код проекту написаний мовою Сі та поширюється під ліцензією MIT.

Джерело: opennet.ru

Додати коментар або відгук