
Polars 2.0 вийшов: рушій потокової обробки за замовчуванням, out-of-core підтримка та повноцінний SQL
Вийшов Polars 2.0. Реліз за замовчуванням активує рушій потокової обробки та переповнення на диск (out-of-core spilling), додає тип Map, визнає SQL повноцінним громадянином і підвищує строгість для швидшого зворотного зв'язку.
Потокова обробка та out-of-core за замовчуванням
Виклик collect на LazyFrame тепер за замовчуванням використовує рушій потокової обробки, що, за словами команди, дає значне покращення пам'яті та продуктивності для більшості запитів. Оскільки рушій потокової обробки за замовчуванням не гарантує порядку рядків для таких операцій, як join, group_by та unpivot, зміна вимагала оновлення основної версії. Користувачам, яким потрібна передбачувана послідовність рядків, можна увімкнути maintain_order=True.
out-of-core підтримка, тобто переповнення на диск, увімкнена за замовчуванням і починається приблизно з 80 відсотків RAM. Операції, зокрема sort, window функції та багато виразів, тепер можуть переходити на диск для завершення запиту з бюджетом дискового простору за замовчуванням 64GB. out-of-core join та group-by операції заплановані на майбутні релізи.
SQL як повноцінний громадянин
Polars 2.0 — це момент, коли SQL розглядається як повноцінний громадянин. Покращення оптимізатора та рушія включають перевпорядкування join, значно кращу елімінацію спільних підпланів (common subplan) та динамічні предикати з bloom-фільтрами.
На бенчмарках, заснованих на TPC-H та TPC-DS, які проводилися проти DuckDB 1.5.6, DuckDB 2.0 alpha та DataFusion 54.0.0 на машинах c7a.4xlarge та c7a.metal, Polars за замовчуванням був найшвидшим у всіх бенчмарках, за винятком одного. Команда зазначає постійні витрати до 192 потоків при масштабуванні, що впливає на запити з малими даними. Polars з обмеженням у 32 ядра був конкурентним або перемагав у всіх бенчмарках, і причина діагностована для виправлення в наступному релізі. DataFusion перевищив ліміт часу на деяких запитах TPC-DS, а на малій машині на TPC-H q18 вичерпалася пам'ять.
Новий тип Map
Polars тепер напряму підтримує Arrow MapType як тип Map, що порівнюється зі словником Python, який пов'язує ключі зі значеннями. До 2.0 Arrow MapType читався як List(Struct(...)). Тип супроводжується спеціалізованими виразами для пошуку ключів, contains_key, len, keys та values.
Більш строгий Polars
Реліз ще більше посилює строгість та поведінку швидкого збою. Агенти можуть перевіряти структуру запиту заздалегідь за допомогою collect_schema(), яка визначає типи та виявляє невідповідності рівня схеми без матеріалізації даних, що прискорює ітерації AI. Помилки, що залежать від даних, тепер за замовчуванням мають більш строгу поведінку, щоб невідповідності перехоплювалися, а не тихо давали інший результат.
Команда планує подальшу роботу над out-of-core, масштабуванням на великій кількості CPU, Polars Cloud та GeoPolars, і опублікувала посібник з міграції для переходу на 2.0.
Джерела: pola.rs
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.