대용량 CSV 파일 분할

1515 단어 railscsvruby
그래서 주말에 매우 큰 CSV 파일을 손에 넣을 수 있었습니다. 크다는 것은 거의 9GB가 큽니다! 네, 많은 데이터입니다.

말할 필요도 없이 내가 말한 파일을 여는 데 문제가 있었습니다. Excel, VS Code, 심지어 나의 오래된 충실한 Sublime Text에서도 작동하고 싶지 않았습니다!!

그래서 다른 경로로 이동하여 파일을 관리하기 쉬운 청크로 분할하기로 결정했습니다. 이를 위해 터미널을 사용하고 다음 작업을 수행합니다.
  • 줄 번호 또는 파일 크기(Kb 또는 Mb)로 분할합니다.
  • 그런 다음 분할을 위해 생성한 모든 파일에 .csv 확장자를 추가합니다.

  • 따라서 시작하려면 최선의 선택을 해야 합니다. 파일을 100MB 청크로 분할하는 것으로 시작했습니다. 두 번째 줄에서는 루프와 mv 명령을 사용하여 파일 확장자를 간단히 변경합니다.

    이 명령을 실행하여 첫 번째 명령을 열고 파일에 몇 개의 행이 있는지 확인할 수 있습니다.

    참고: 올바른 폴더로 이동했는지 확인하여 파일이 저장된 폴더를 찾습니다. 그런 다음 다음 스니펫을 실행합니다.

    split -b 100m file_to_split.csv
    for i in *; do mv "$i" "$i.csv"; done
    


    이제 파일이 100MB 덩어리로 분할되지만 아직 끝나지 않았습니다. 나중에 CSV를 데이터베이스로 가져올 계획이라면 좋지 않은 행이 있을 가능성이 높습니다. 그래서 우리는 생성된 첫 번째 파일을 열고 몇 줄인지 확인합니다.

    제 경우에는 415156이 있었습니다. 하지만 마지막 행이 깨졌습니다. 따라서 이것을 정렬하려면 생성된 모든 파일을 삭제합니다. - 이 방법이 가장 쉬운 방법을 찾았지만 그 이유가 있습니다.

    이제 파일당 예상할 수 있는 행 수를 알고 있으므로 이번에는 파일 크기를 줄 수로 교체하여 이전 스니펫을 다시 실행할 수 있습니다.

    split -l 415000 file_to_split.csv
    for i in *; do mv "$i" "$i.csv"; done
    


    요약하자면, split 명령에 -b 플래그를 사용했는데 이는 파일을 더 작은 청크로 분할할 수 있음을 의미합니다. 파일을 1MB의 파일로 분할하려는 경우 1m를 사용하는 것이 쉽습니다. 그러나 -l 플래그는 내 경우에는 파일을 분할하기 전에 원하는 데이터 행 수를 415000으로 분할 명령에 알려줍니다.

    원래 게시됨r3id.dev

    좋은 웹페이지 즐겨찾기