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: 마지막 행으로 이동.
  • N g: N번째 행으로 이동.
  • l/→와 h/←: 다음/이전 열로 이동.
  • $와 0: 마지막/첫 열로 이동.
  • N과 키: 이동을 N회 반복.
  • ?: 도움말 표시/숨김.
  • q/Esc: 종료.