TL;DR
pqless는 Parquet 파일의 화면에 보이는 행과 열만 디코딩해 수만 개 열이 든 멀티기가바이트 파일의 첫 화면을 1초 미만에 표시하는 도구임.- 가로로 열 커서를 이동하면 화면에 들어오는 열이 로드되며, 고정 헤더와 열 이름·타입을 표시하는 상태 표시줄을 제공함.
less와 유사한 키 조작을 지원하고, 파이프로 출력하면 일반 텍스트 표를 생성해grep과head를 사용할 수 있음.- Apple M2 Pro에서 3회 실행한 중앙값 기준, 10,000개 열 파일의 첫 화면 표시 시간은 0.04초, 최대 메모리 사용량은 23MB임.
- Homebrew, 설치 스크립트, Rust 소스 설치를 지원하며, 실행 후
?를 누르면 키 안내를 확인할 수 있음.
화면에 보이는 데이터만 읽음
- Parquet는 열을 각각 별도로 저장하므로
pqless는 현재 화면에 보이는 행과 열만 디코딩함. - 수만 개 열이 포함된 멀티기가바이트 파일에서도 첫 화면이 1초 미만에 표시됨.
넓은 데이터에 맞춘 설계
- 열 커서를 가로로 이동하면 스크롤에 따라 새 열이 화면에 들어오는 시점에 로드됨.
- 헤더는 고정되며, 상태 표시줄에는 각 열의 전체 이름과 타입이 표시됨.
less처럼 사용
- Space,
b,g,G,j/k와 숫자 접두 키가 예상대로 작동함. - 파이프 출력은 일반 텍스트 표이므로
| grep과| head도 작동함.
성능 비교
- 비교 기준은 첫 행 화면이 표시될 때까지 걸린 시간과 최대 메모리 사용량이며, Apple M2 Pro에서 3회 실행한 중앙값임.
- 일상형 데이터는 250,000행 × 38열, 긴 데이터는 2,000만 행 × 4열, 넓은 데이터는 20,000행 × 10,000열임.
- 대화형 뷰어 성능:
pqless: 일상형 0.03초·12MB, 긴 데이터 0.03초·15MB, 넓은 데이터 0.04초·23MB.parqeye: 일상형 0.07초·28MB, 긴 데이터 0.05초·34MB, 넓은 데이터 7.62초·1.3GB.tabiew: 일상형 0.14초·185MB, 긴 데이터 0.68초·1.7GB, 넓은 데이터 2.11초·2.0GB.VisiData: 일상형 0.51초·304MB, 긴 데이터 0.60초·4.4GB, 넓은 데이터 0.96초·2.3GB.- 행을 출력한 뒤 종료하는 도구의 성능:
pqrs head: 일상형 0.01초·17MB, 긴 데이터 0.01초·15MB, 넓은 데이터 0.37초·1.5GB.DuckDB: 일상형 0.03초·34MB, 긴 데이터 0.02초·28MB, 넓은 데이터 2.02초·2.5GB.parquet-cli: 일상형 0.34초·306MB, 긴 데이터 0.70초·2.0GB, 넓은 데이터 2.24초·3.1GB.parquet-tools: 일상형 0.42초·321MB, 긴 데이터 0.78초·2.0GB, 넓은 데이터 2.86초·2.8GB.- 일상형과 긴 파일에서는 빠른 도구들이 모두 사실상 즉시 작동하며, 넓은 파일에서는 보이는 열만 읽는 방식의 이점이 나타남.
VisiData와tabiew는 정렬·필터링·쿼리를 지원하기 위해 파일 전체를 먼저 로드하지만,pqless는 이를 수행하지 않음.- 파일, 측정 방법, 재현 방법이 안내됨.
설치
- Homebrew(macOS, Linux)에서
brew install danodonovan/tap/pqless명령으로 설치함. - 설치 스크립트(macOS, Linux; x86_64, arm64)는
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/danodonovan/pqless/releases/latest/download/pqless-installer.sh | sh명령으로 실행함. - Rust 1.88 이상에서는
cargo install --git https://github.com/danodonovan/pqless명령으로 소스에서 설치함. - 설치 후
pqless data.parquet으로 실행하고?를 눌러 키 안내를 확인함.
키
j/↓: 한 행 아래로 이동.k/↑: 한 행 위로 이동.- Space/
f/PgDn: 한 페이지 아래로 이동. b/PgUp: 한 페이지 위로 이동.d/u: 반 페이지 아래/위로 이동.g/Home: 첫 행으로 이동.G/End: 마지막 행으로 이동.Ng: N번째 행으로 이동.l/→와h/←: 다음/이전 열로 이동.$와0: 마지막/첫 열로 이동.N과 키: 이동을 N회 반복.?: 도움말 표시/숨김.q/Esc: 종료.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요