지연 평가
예시: 지연 평가와 즉시 평가
지연 평가의 이점
- 쿼리 최적화: 여러 작업이 단일한 최적화된 SQL 쿼리로 컴파일됩니다
- 필터 푸시다운: 필터가 데이터 소스 수준에서 적용됩니다
- 컬럼 프루닝: 필요한 컬럼만 읽습니다
- 결정 지연: 실행 엔진을 런타임에 선택할 수 있습니다
- 계획 검토: 실행 전에 쿼리를 확인하거나 디버깅할 수 있습니다
실행 트리거
자동 실행 트리거
| Trigger | Example | Description |
|---|---|---|
print() / repr() | print(ds) | 결과 출력 |
len() | len(ds) | 행 수 확인 |
.columns | ds.columns | 컬럼 이름 확인 |
.dtypes | ds.dtypes | 컬럼 타입 확인 |
.shape | ds.shape | 크기 확인 |
.index | ds.index | 행 인덱스 확인 |
.values | ds.values | NumPy 배열 가져오기 |
| Iteration | for row in ds | 행 순회 |
to_df() | ds.to_df() | pandas로 변환 |
to_pandas() | ds.to_pandas() | to_df의 별칭 |
to_dict() | ds.to_dict() | dict로 변환 |
to_numpy() | ds.to_numpy() | 배열로 변환 |
.equals() | ds.equals(other) | DataStore 비교 |
지연 상태를 유지하는 연산
| Operation | Returns | Description |
|---|---|---|
filter() | DataStore | WHERE 절 추가 |
select() | DataStore | 컬럼 선택 추가 |
sort() | DataStore | ORDER BY 추가 |
groupby() | LazyGroupBy | GROUP BY 준비 |
join() | DataStore | JOIN 추가 |
ds['col'] | ColumnExpr | 컬럼 참조 |
ds[['col1', 'col2']] | DataStore | 컬럼 선택 |
3단계 실행
단계 1: SQL 쿼리 생성 (지연)
단계 2: 실행 시점
단계 3: DataFrame 작업 (해당하는 경우)
실행 계획 보기
explain()을 사용하세요:
Query
Response
verbose=True를 사용하십시오:
캐싱
캐싱 동작 방식
캐시 무효화
수동 캐시 제어
SQL과 Pandas 작업 함께 사용하기
SQL 호환 연산
filter(),where()select()groupby(),agg()sort(),orderby()limit(),offset()join(),union()distinct()- 컬럼 연산(수학 연산, 비교, 문자열 메서드)
Pandas 전용 작업
- 사용자 지정 함수를 사용하는
apply() - 복잡한 집계를 사용하는
pivot_table() stack(),unstack()- 실행된 DataFrame에 대한 작업
하이브리드 파이프라인
실행 엔진 선택
자동 모드 (기본값)
chDB Engine 사용 강제
pandas Engine 강제 설정
성능에 미치는 영향
좋은 방법: 초기에 필터링
나쁨: 필터를 나중에 적용
권장: 초기에 컬럼 선택하기
좋은 예: SQL이 작업을 처리하게 하세요
모범 사례 요약
- 실행하기 전에 작업을 체이닝하세요 - 전체 쿼리를 구성한 뒤 한 번만 트리거하세요
- 초기에 필터링하세요 - 소스에서 데이터를 줄이세요
- 필요한 컬럼만 선택하세요 - 컬럼 프루닝은 성능을 향상시킵니다
- 실행 과정을 이해하려면
explain()을 사용하세요 - 실행 전에 디버깅하세요 - 집계는 SQL에 맡기세요 - ClickHouse는 이에 최적화되어 있습니다
- 실행 트리거를 유의하세요 - 의도치 않게 일찍 실행되지 않도록 하세요
- 캐싱을 현명하게 사용하세요 - 캐시가 언제 무효화되는지 이해하세요