# Polars 2.0: 왜 조인이 더 이상 행 순서를 유지하지 않는가

Published: 2026-10-08

Polars 2.0은 기본적으로 스트리밍 엔진에서 collect를 실행합니다. join, group\_by 및 unpivot의 경우 maintain\_order를 설정하거나 명시적으로 정렬하지 않으면 더 이상 입력 행 순서를 보장하지 않습니다. Polars 2.0.0에서 2,000,000행 내부 조인을 실행한 결과, 기본적으로 행이 입력 순서대로 반환되지 않았지만 maintain\_order를 설정하자 순서가 유지되었습니다. 또한 이 릴리스에서는 out-of-core spilling이 기본적으로 켜지고 벤치마크 주장은 공급업체 자체의 것이 됩니다.

Canonical: https://thedailydiff.dev/ko/video/polars-2-row-order/

## 이 동영상에서 다루는 내용

- 지연 쿼리에서 collect()를 호출하면 이제 기본적으로 스트리밍 엔진이 사용되며, 이는 join, group\_by 및 unpivot에 대한 행 순서를 보장하지 않습니다.
- 마이그레이션 가이드에 따르면 순서는 더 이상 2.0 이전의 순서가 아니며 보장되지 않습니다. 순서에 의존하는 경우 명시적인 정렬을 권장합니다.
- 저희 실행에서 기본 내부 조인은 입력 순서 False를 반환했습니다. 조인에서 maintain\_order="left\_right"는 True를 반환했습니다. 한 대의 머신, 한 번의 실행, 한 가지 조인 형태입니다.
- out-of-core spilling은 기본적으로 켜져 있습니다. RAM의 약 80%에서 시작하며 기본 디스크 예산은 64GB입니다. out-of-core join 및 group\_by는 로드맵에 있습니다.
- collect\_schema()는 데이터가 읽히기 전에 누락된 열을 감지하지만, 한 값에서만 실패하는 캐스트는 collect()에서만 실패합니다.
- TPC-H 및 TPC-DS 비교는 파생된 데이터에 대한 공급업체 자체의 실행이며, 각주에는 결과가 공식 벤치마크와 비교할 수 없다고 명시되어 있습니다.

## 챕터

- 0:00 기본 순서가 변경된 이유는 무엇인가요?
- 0:56 마이그레이션 가이드는 무엇을 약속하나요?
- 1:17 벤치마크는 공정한 경쟁인가요?
- 1:41 실행했을 때 무엇을 볼 수 있나요?
- 1:56 더 엄격하다는 것은 더 빠르다는 의미인가요?
- 2:07 이전 순서를 어떻게 되찾을 수 있나요?
- 2:20 결론은 무엇인가요?

## 번역된 스크립트

원래 영어 내레이션에서 번역되었습니다. 사용 가능한 오디오 및 캡션은 YouTube에서 제어합니다.

### 기본 순서가 변경된 이유는 무엇인가요?

0:00 조인이 행을 작성한 순서대로 돌려준다고 생각하시죠. Polars 2.0은 기본적으로 의도적으로 그것을 약속하는 것을 중단했습니다. 이 비디오에서: 기본값이 왜 변경되었나요? 무엇을 얻었나요? 그리고 어떤 스크립트가 먼저 깨질까요? 여기는 The Daily Diff, 내부 이야기입니다. Polars는 오픈 소스 DataFrame 라이브러리입니다. Python에서 호출하는 테이블 엔진이며,

0:20 핵심은 Rust로 작성되었습니다. MIT 라이선스 하에 무료이며, pip install polars로 설치합니다. 먼저 한 가지 세부 사항. 이전 순서를 되돌리는 스위치는 조인 자체의 인수입니다. 마지막에 다시 설명하겠습니다. 2.0부터 collect는 기본적으로 스트리밍 엔진을 실행합니다. 스트리밍은 쿼리를 병렬로 실행되는 청크로 분할하고, 청크는 완료되면 끝납니다.

0:42 join, group by 및 unpivot의 경우 이 릴리스는 순서를 약속하지 않습니다. 누가 먼저 타격을 입을까요? 출력을 저장된 파일과 행별로 비교하는 모든 사람. 그 테스트는 당신의 랩톱에서는 통과하고 다른 머신에서는 실패할 수 있습니다. 다음은 마이그레이션 가이드입니다.

### 마이그레이션 가이드는 무엇을 약속하나요?

0:57 위에서 보여준 정확한 행 순서는 보장되지 않는다고 명시되어 있습니다. 따라서 순서에 의존하는 경우 명시적으로 정렬하십시오. Out-of-core도 기본적으로 켜져 있습니다. RAM의 약 80%에서 디스크로 spilling을 시작하며, 64GB의 예산이 있습니다. 정렬, 윈도우 함수 및 많은 표현식은 이제 spilling을 할 수 있습니다. 조인 및 group-by는 곧 출시될 예정입니다.

### 벤치마크는 공정한 경쟁인가요?

1:17 Polars는 TPC-H 및 TPC-DS 벤치마크에서 DataFusion 및 DuckDB를 능가한다고 말합니다. 이 숫자는 파생된 데이터에 대한 자체 실행에서 가져온 것이며, 각주에는 공식 결과와 비교할 수 없다고 명시되어 있습니다. 자체 숫자에 따르면 Polars는 TPC-H에서 16코어에서 192코어로 약 3.8배 빨라집니다. 또한 대형 머신의 추가 스레드는 작은 쿼리를 느리게 한다고 말합니다. 우리는 Polars 2.0.0에서 동일한 조인을 두 번 실행했습니다.

### 실행했을 때 무엇을 볼 수 있나요?

1:41 기본 실행은 행을 섞습니다. 플래그를 사용하면 입력 순서가 유지됩니다. 테스트에 사용되는 조인을 찾으세요. 정렬이 없는 모든 조인은 당신이 한 번도 내리지 않은 행 순서 결정입니다. Polars 2.0은 타입에 대해 더 엄격합니다. 스키마 검사는 데이터가 읽히기 전에 누락된 열을 감지합니다.

### 더 엄격하다는 것은 더 빠르다는 의미인가요?

1:58 한 행에서 실패하는 캐스트는 감지할 수 없습니다. 왜냐하면 그 오류는 데이터가 있을 때까지 기다리기 때문입니다. 이제 제가 열었던 루프입니다. 스위치는 조인에 있습니다.

### 이전 순서를 어떻게 되찾을 수 있나요?

2:08 조인에 maintain order를 설정하거나 그 뒤에 정렬을 추가하세요. 가이드에서는 정렬을 제안합니다. 조인 플래그는 저희 실행에서 왼쪽, 오른쪽 순서로 유지되었습니다. 내부 이야기 결론: NEEDS REVIEW. 업그레이드하기 전에 모든 조인을 검토할 것입니다.

### 결론은 무엇인가요?

2:22 이것에 대해 질문이 있으신가요? 댓글에 남겨주세요. 오늘의 차이점은 이것입니다. 저는 Axrisi의 Niko입니다. 책임감 있게 병합하세요. 책임감 있게 병합하세요.

## 출처

- [Release of Polars 2.0](https://pola.rs/posts/release-polars-2/) — Polars (pola.rs)
- [Polars 2.0 upgrade guide](https://docs.pola.rs/releases/upgrade/2/) — Polars documentation
- [Polars homepage](https://pola.rs/) — Polars (pola.rs)
- [polars-2.0-benchmark repository](https://github.com/pola-rs/polars-2.0-benchmark) — Polars on GitHub
- [Release of Polars 2.0 (Hacker News discussion)](https://news.ycombinator.com/item?id=49977177) — Hacker News
