Cloud Bigtable용 대화형 CLI btcli 작성

이것은 Google Cloud Platform Part 2 Advent Calendar 2018 21 일째 기사입니다.

만든 것



인터랙티브 UI를 갖춘 cbt 기반의 Bigtable용 CLI btcli을 만들었습니다.

동기 부여



Go에서 Clean Architecture 도입과 Dual Write에 의한 DB 마이그레이션을 한 이야기 에 있는 대로, 현재는 Bigtable를 메인으로 사용하고 있는 제품으로 개발을 실시하고 있습니다. Bigtable은 쵸파야에서 엄청 스케일하기 때문에 매우 편리하고 저도 좋아하는 제품입니다.
수중에서 Bigtable의 데이터를 읽고 쓰려면 공식으로 cbt 라는 것이 준비되어 있어, 최소한 필요한 것이 갖추어져 있습니다.
이전 기사에서도 언급했지만 Bigtable의 increment 함수를 사용하려면 8byte 빅 엔디안으로 인코딩 된 값을 사용해야합니다. 그런데 cbt에서는 문자열로만 값을 표시할 수 있습니다. 내부적으로는 데이터는 byte로 보존되어 있어 형에 의한 구별이 없기 때문에 당연하다고 하면 당연합니다만, 인간이 취급할 때에는 조금 곤란합니다.

당초에는 빅 엔디안의 디코드 기능을 cbt에 원숭이 패치를 맞추어 사용하고 있었습니다만, 좀 더 리치한 클라이언트를 원해져 만든 것이 btcli 입니다. 그건 그렇고, 이름은 mycli에서 영감을 받았습니다.

할 수 있는 일



대화형 보완



거의 모두 go-prompt 덕분에 구현되어 있습니다.



풍부한 필터 옵션



현재 read 부속 명령에서 다음 옵션을 사용할 수 있습니다.
read <table> [args ...]
        start          Start reading at this row
        end            Stop reading before this row
        prefix         Read rows with this prefix
        value          Read rows with has value
        family         Read only columns family with <columns_family>
        version        Read only latest <n> columns
        from           Read cells whose version is newer than or equal to this unixtime
        to             Read cells whose version is older than this unixtime
        decode         Decode big-endian value
        decode-columns Decode big-endian value with columns. <column_name:<string|int|float>[,<column_name:...>]

이것만 있으면 대부분의 경우에 부족한 느낌이 있습니다. 모든 필터는 망라되어 있지는 않지만, 수요 베이스로 추가하고 있으므로, 여기에 없는 필터나 기능이 있으면 캐주얼에 추가하고 있습니다. 만약 원하는 것이 있으면 issues, PR 기다리고 있습니다.
또한 처음에 쓰고 있던 decode 옵션도 여기에 준비되어 있습니다. decode 가 전체 설정, decode-columns 가 개별 설정으로 이쪽이 우선도 높은 느낌입니다. 환경 변수 BTCLI_DECODE_TYPE를 설정하여 기본 decode 옵션을 지정할 수도 있습니다.

할 수 없는 일



write계의 커멘드는 자신 자신 별로 사용한 적이 없기 때문에 구현하고 있지 않습니다.

설치 방법


go get 에 들어갑니다. 음색을 타고 모듈화했으므로 환경 변수 GO111MODULE가 필수입니다.
go get -u github.com/takashabe/btcli/cmd/btcli

요약



인터랙티브 UI를 갖춘 cbt 기반의 Bigtable용 CLI btcli을 만들었습니다.

실제로 일에서도 사용하고 있고, 팀에서도 호평이므로 만들어 좋았던 느낌이 있습니다. 아직도 하고 싶은 일이 있기 때문에 시간을 찾아서는 개발을 계속해 가고 싶습니다.
유스 케이스가 맞는 분은 꼭 사용해보세요!

좋은 웹페이지 즐겨찾기