TL;DR
Polars 2.0.0은 Python Polars 2.0과 기본 활성화된 OOC(Out-of-Core), 다양한 SQL·데이터 처리 기능 및 성능 개선을 포함한 주요 릴리스임.- OOC 메모리 임계값은 사용 가능한 RAM의 80%, 기본 디스크 예산은 64GB로 설정되며
POLARS_OOMKILL_THRESHOLD_MB환경 변수가 추가됨. - SQL 윈도 함수와
QUALIFY처리 순서, SQL 숫자 리터럴의Decimal처리, ParquetENUM의pl.String읽기 등 호환성이 바뀌는 변경 사항이 포함됨. - 스트리밍 정렬·그룹화, 조인·필터 푸시다운, Parquet·IPC 스캔 및
Decimal연산 등에서 성능 개선이 이뤄짐. - 맵(Map)과 근사 분위수, SQL 그룹 집계 확장, Iceberg·원격 엔진 연동 등 기능이 확장되고 다양한 버그 수정과 문서 개선이 포함됨.
주요 변경 사항
- SQL 윈도 함수가 그룹화된 행이 아니라 집계된 행에서 실행되며,
QUALIFY가 프로젝션 전에 평가됨. - SQL 숫자 리터럴의 타입이
Decimal로 지정되고 SQL%·DIV연산이 절삭 처리됨. - 결정론적 표현식 플러그인이 공통 부분식 제거(CSE)와 공통 하위 표현식 푸시다운(CSPE)을 선택적으로 사용 가능함.
- Parquet
ENUM타입을pl.String으로 읽음. - 맵(Map) 연산이 확장되고
cut·qcut이 사용 중단 예정임.
성능 개선
- 스트리밍 및 메모리 사용을 개선하기 위해 OOC 경로, 그룹화, 조인, 정렬, 윈도 함수, 프리페치 및 런타임 필터를 폭넓게 최적화함.
- 원격 IPC·Parquet 스캔에서 순서가 관찰되지 않을 때 파일과 데이터를 비순서 방식으로 처리하며, IPC 메타데이터 접미부 읽기와 레코드 배치 가져오기를 개선함.
- Lance와 Iceberg 스캔에 필터 푸시다운을 적용하고, Iceberg 매니페스트 파일을 스캔 간 캐시하며, Hive 조건자와 Parquet 통계를 활용한 최적화를 개선함.
- 스트리밍 OOC 정렬, 고정 크기 롤링 윈도, 병렬 행 인코딩 및 그룹화 처리 등 데이터 처리 경로를 개선함.
Decimal덧셈·뺄셈·곱셈에서 값이 맞는 경우 64비트 정수를 사용하고, 합계·평균 연산과 스케일 조정 비용을 줄임.- SQL 계획, 표현식 바이트코드 파서, 정규식,
is_in,LIKE,as_list, 행 인코딩, 캐시 제거 및 조인 순서 추정 등 다수의 경로를 최적화함. - 클라우드 소형 업로드에 단일 PUT을 사용하고 HTTP 읽기 속도 제한 기본값과 원격 스캔 처리도 조정함.
기능 개선
- Python용 Polars 2.0을 릴리스하고 OOC를 기본 활성화함. 사용 가능한 RAM의 80%를 임계값으로 사용하며 기본 OOC 디스크 예산은 64GB임.
POLARS_OOMKILL_THRESHOLD_MB환경 변수, 다중 표현식을 지원하는pipe_with_dtype, 새 표현식 및 함수pipe_with_dtype를 추가함.- SQL
FIRST_VALUE·LAST_VALUE의 윈도 프레임을 지원하고NTH_VALUE,LAG·LEAD기본값을 추가함. - SQL에서
GROUPING SETS,ROLLUP,CUBE,GROUPING()을 지원하며APPROX_QUANTILE을 SQL 프런트엔드와 스트리밍 엔진에서 사용할 수 있음. - 근사 분위수 스케치 상태를 프로세스 간 병합 가능하게 하고 메모리 내 근사 분위수 기능을 추가함.
- JSON·NDJSON 읽기 및 쓰기에서 맵 타입을 지원하고
struct.eval과scan_external_reader를 추가함. - 불안정 기능인
scan_lance를 추가하고collect및collect_batches에서RemoteEngine을 지원함. - 조인 키의 셀렉터, Iceberg 네이티브 싱크의 정렬 순서, Iceberg 싱크의 재실행 간 멱등 커밋을 지원함.
erf(c)함수와 여러 맵 연산을 추가하고is_in및 맵 조회의 타입 변환을 데이터 타입만으로 결정하도록 개선함.- Cloud object store 입출력 오류의 유형과 메시지를 개선하고, 물리 노드와 중간 표현(IR) 노드의 연결 정보를 제공함.
DataFrame메모리 사용량 추정, BytecodeParser의 사용자 정의 함수 변수 해석, Python 3.15 호환성 및scan_iceberg·Delta 관련 방문자 속성을 개선함.
버그 수정
- SQL 집계 함수 이름 탐색, 중첩 집계 오류, 윈도 함수의 동률·NULL 순위 및 프레임 처리, 이름 있는 윈도,
QUALIFY와 파생 테이블 처리 문제를 수정함. - 동적 그룹화와 윈도 경계, 그룹화 조건자 푸시다운, 정렬 버킷 메모리 예약, 입력 순서 유지, 다중 입력 그룹화의 높이 계산 문제를 수정함.
Decimal결과 스케일·정밀도, 혼합 스케일 연산, 정수 연산,Decimal과 정수의 스키마 및 Parquet 통계 처리를 수정함.is_in의 NULL·혼합 데이터 타입·범주형 처리, 목록의contains, 정렬된 중첩 타입, 문자열 소문자·제목 대문자 및 유니코드zfill동작을 수정함.- Parquet·IPC·CSV·Avro·Excel·데이터베이스 읽기와 Iceberg·Delta·S3 처리에서 발생하는 여러 오류와 성능 회귀를 수정함.
- 빈 윈도 및 분위수 입력에서의 패닉, 들쭉날쭉한 행 처리, TPCH SQL의 메모리 부족, 퍼징 오류와 스트리밍 슬라이스 길이 문제를 수정함.
- SQL 윈도 함수의
PERCENT_RANK,CUME_DIST,NTILE을 추가하고 NULL 및 동률 처리와 추가 윈도 프레임 지원을 보완함.
문서
- API 참조에 엔진과 누락된 항목을 추가하고, RC2 변경 사항을 마이그레이션 가이드에 반영함.
- 일광 절약 시간제(DST) 전환과 관련한 모호한 매개변수 설명,
read_csv·scan_csv의 gzip·zstd 압축 문서를 보완함. LazyFrameResolver, 새enable_monitoring기능 및join_where엔진 태그 문서를 개선함.
기타 개선
- 범주형
is_in조회에서 범주 매핑을 유지하고, 각 크레이트의 임시 열 이름 카운터를 분리함. - 롤링·동적 그룹화의 윈도 배치, 시간 그룹화 인덱스 공간 공유 및 동적 윈도 시작점 계산을 정리함.
- 빌드 의존성
object_store를 0.14.2로,rustls를 0.23.45로 갱신하고maturin및 ARM64 Windows 릴리스 파이프라인 빌드 의존성을 업데이트함. - 릴리스 날짜는 10월 6일이며, 다수의 기여자가 릴리스에 참여함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요