Embulk를 파일 압축 해제, 문자 코드 변환에만 사용해보기

5223 단어 Embulk
Embulk는 유시가 개발한 플러그인을 활용하여 쉽게 기능 확장을 할 수 있습니다.
나는 S3에 놓여있는 CSV 파일을 BigQuery에 넣을 때 잘 활용하지만 script로 쓰면 조금 번거로운 여러 파일의 압축을 풀고 sjis에서 utf8로의 변환이 소량의 설정을 기술하는 것만으로 할 수 있습니다.

어느 때, 미묘하게 스키마가 다른 파일군을 처리할 필요가 있고,
일단, ファイルの解凍、sjisからutf8への変換 하고 싶지만,
스키마가 다르기 때문에 여러 개의 yaml을 작성하는 or 동적인 처리를 강요당하는 장면이 있었습니다.

Embulk에서 동적 처리를 한 적이 없었기 때문에 다른 방법을 생각했습니다.
embulk-parser-none이라는 플러그인을 사용하면 parse하지 않는다 = 스키마가 다른 파일에서도 하나의 yaml로 처리 할 수 ​​있다고 생각하고 실천하면 여러 파일을 압축 해제, sjis에서 utf8로 변환 할 수 있습니다 네.

그 때, Embulk를 파일의 압축해제, 문자 코드 변환에만 사용한 설정을 남겨둡니다.

embulk-parser-none이란?



저자 소개 기사을 참조하십시오.

Embulk를 파일 압축 해제, 문자 코드 변환에만 사용해보기



하나의 압축 된 sjis csv를 압축 해제하고 문자 코드를 utf8로 변환하는 데모입니다.
(Embulk는 install 완료)
htps : // 기주 b. 코 m / 응 아시 키 / 에 m 부 lk_ 아 s_ 데코 r 에 필요한 파일을 넣었으므로 시도해 볼 수 있습니다.

필요한 플러그인 install



소개한 embulk-parser-none과 압축 해제를 위한 플러그인 embulk-decoder-commons-compress를 install하십시오.
$ embulk gem install embulk-parser-none
$ embulk gem install embulk-decoder-commons-compress

준비된 압축 파일이 sjis의 csv인지 확인



터미널의 인코딩이 utf-8이면 다음과 같이 문자가 깨져야합니다.
$ unzip unzip_charset_test_sjis.csv.zip 
Archive:  unzip_charset_test_sjis.csv.zip

$ nkf --guess unzip_charset_test_sjis.csv
Shift_JIS (CRLF)

$ cat unzip_charset_test_sjis.csv
���O,�^�C�v
�q�g�J�Q,�ق̂�
�[�j�K��,�݂�
�t�V�M�_�l,����%  

yaml의 내용에 관하여



똥 p_ 짱 t_ st_s js. CSV. 지 p 을 압축 해제하고 문자 코드를 변환하고 result.csv를 출력하는 설정입니다.
parser의 type은 none이지만 charsetnewline를 설정해야합니다.
out의 formatter입니다만, 저자 소개 기사 와 같이, 원의 내용 그대로 토해내는 설정을 합니다. 단, charsetnewline 를 설정합시다.
exec min_output_tasks는 여러 파일이 출력되는 것을 방지하기 위해 설정되었습니다.

embulk_test.yaml
in:
  type: file
  path_prefix: unzip_charset_test_sjis.csv.zip
  decoders:
    - {type: commons-compress}
  parser:
    type: none
    column_name: payload
    charset: MS932
    newline: CRLF
exec:
  min_output_tasks: 1    # disable page scatterings
out:
  type: file
  path_prefix: result
  sequence_format: ""
  file_ext: .csv
  formatter:
    type: csv # embulk-parser-none の説明通り
    charset: UTF-8
    newline: LF
    delimiter: 0 # embulk-parser-none の説明通り
    quote_policy: NONE # embulk-parser-none の説明通り
    header_line: false # embulk-parser-none の説明通り

실행하다



출력한 result.csv가 utf-8이 되어 있는 것을 확인할 수 있었는지 생각합니다.
$ embulk run embulk_test.yaml

# result.csvが作成される 

$ nkf --guess result.csv 
UTF-8 (LF)

$ cat result.csv
名前,タイプ
ヒトカゲ,ほのお
ゼニガメ,みず
フシギダネ,くさ

embulk-parser-none으로 Embulk의 활용 방법이 넓어집니다

좋은 웹페이지 즐겨찾기