cbt CLI의 출력 형식 지정

이 문서에서는 cbt CLI로 표시될 때 Bigtable 행에 저장된 특정 유형의 데이터 형식을 지정하는 방법을 설명합니다.

형식 지정 예시

버전 0.12.0부터 cbt CLI는 테이블 행에 저장된 데이터의 특정 복합 유형의 형식을 지정할 수 있습니다. cbt read 또는 cbt lookup 명령어를 사용하면 cbt CLI가 행에 저장된 값을 'pretty print 적용'할 수 있습니다.

다음 예시에서는 형식 지정을 사용하지 않는 cbt CLI의 데이터 출력을 보여줍니다.

----------------------------------------
r1
  fam1:col1                                 @ 2022/03/09-11:19:45.966000
    "\n\x05Brave\x10\x02"
  fam1:col2                                 @ 2022/03/14-11:17:20.014000
    "{\"name\": \"Brave\", \"age\": 2}"

다음 예시에서는 형식 지정을 사용하는 cbt CLI의 데이터 출력을 보여줍니다.

r1
  fam1:col1                                 @ 2022/03/09-11:19:45.966000
    name: "Brave"
    age: 2
  fam1:col2                                 @ 2022/03/14-11:17:20.014000
    age:     2.00
    name:   "Brave"

열 또는 column family 형식을 지정하려면 해당 열의 형식을 지정하는 YAML 파일을 제공해야 합니다. cbt lookup 또는 cbt read를 호출하면 format-file 인수를 사용하여 YAML 파일로 경로를 전달합니다. 다음 스니펫은 제공된 format-file 인수를 사용하여 cbt lookup을 호출하는 예시를 보여줍니다.

cbt lookup my-table r1 format-file=/path/to/formatting.yml

YAML의 열 데이터 형식 정의

형식 지정 YAML 파일은 열 이름 또는 column family 이름을 그 안에 저장된 데이터 유형과 연결해야 합니다. 다음 스니펫은 YAML 형식 지정 파일의 예시를 보여줍니다.

protocol_buffer_definitions:
  - cat.proto
protocol_buffer_paths:
  - testdata/

columns:
  col1:
    encoding: ProtocolBuffer
    type: Cat

  col2:
    encoding: json

다음 스니펫은 'cat.proto'의 콘텐츠를 보여줍니다.

syntax = "proto3";
package cats;

option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb";

message Cat {
  string name = 1;
  int32 age = 2;
}

예를 살펴보면 다음과 같습니다.

  • protocol_buffer_definitions 필드는 protobuf 데이터를 디코딩하는 데 사용할 프로토콜 버퍼 메시지 유형을 포함할 수 있는 .proto 파일 목록을 제공합니다.
  • protocol_buffer_paths 필드는 프로토콜 버퍼 유형을 디코딩하는 .proto 파일을 포함할 수 있는 로컬 경로 목록을 제공합니다. google/protobuf 패키지의 메시지와 같이 표준 프로토콜 버퍼 가져오기의 위치를 지정할 필요가 없습니다.
  • columns 필드에는 각 열에 해당하는 데이터 유형과 함께 열 이름 목록이 포함됩니다.

    • protobuf 열의 encoding은 'ProtocolBuffer'로 설정되고 type은 'Cat'으로 설정됩니다. cbt CLI는 이 열에 저장된 모든 값을 Cat proto 메시지 유형으로 해석하고 형식을 지정합니다. 유형은 protocol_buffer_definition 필드에 제공된 .proto 파일 중 하나에 정의된 메시지 유형과 일치해야 합니다.
    • json 열의 encoding 필드가 'JSON'으로 설정되어 있습니다. cbt는 이 열에 저장된 모든 값을 JSON 구조로 해석하고 형식을 지정합니다.

제공할 수 있는 다른 필드는 다음과 같습니다.

  • default_encoding: 이 필드는 테이블의 모든 열 또는 column family의 모든 열에 대한 기본 형식을 정의합니다.
  • default_type: 이 필드는 프로토콜 버퍼, big-endian, little-endian 인코딩 열의 기본 데이터 유형을 정의합니다.
  • families: 이 필드는 column family 내의 모든 열에 대한 인코딩 및 유형을 정의합니다. column family에 default_encodingdefault_type을 제공할 수 있습니다. 또한 다음 스니펫에 표시된 것처럼 적절한 인코딩 및 데이터 유형을 사용해서 이름별로 열을 나열하는 columns 필드를 제공하여 열 수준에서 이러한 인코딩을 재정의할 수 있습니다.

    families:
      family1:
        default_encoding: BigEndian
        default_type: INT64
        columns:
          address:
            encoding: PROTO
            type: tutorial.Person
    

지원되는 데이터 유형

cbt CLI는 여러 복잡한 데이터 유형의 형식 지정을 지원합니다. 다음 표는 각 목록 유형에 대해 YAML 파일에 제공할 지원되는 데이터 유형 및 문자열을 보여줍니다. 문자열 값은 대소문자를 구분하지 않습니다.

데이터 유형 YAML의 값 형식 지정
16진수 Hex, H
Big-endian BigEndian, B
Little-endian LittleEndian, L
프로토콜 버퍼 ProtocolBuffer, P, PROTO
JSON JSON, J

표 1. cbt 출력의 형식 지정에 지원되는 데이터 유형입니다.

  • 16진수 인코딩은 유형에 구애받지 않습니다. 데이터는 저장된 데이터의 원시 16진수 표현으로 표시됩니다.
  • big-endian 및 little-endian 인코딩에 사용할 수 있는 유형은 int8, int16, int32, int64, uint8, uint16, uint32, uint64 ,float32, float64입니다. 저장된 데이터 길이는 크기가 유형 크기의 배수(바이트)여야 합니다. 저장된 길이가 유형 크기와 일치하면 데이터는 스칼라로 표시되고 그렇지 않으면 배열로 표시됩니다. 유형 이름은 대소문자를 구분하지 않습니다.
  • protocol-buffer 인코딩에 지정된 유형은 제공된 프로토콜-버퍼 정의 파일에 정의된 메시지 유형과 일치해야 합니다. 유형은 대소문자를 구분하지 않습니다. 유형을 지정하지 않으면 기본적으로 표시되는 열 데이터의 열 이름이 지정됩니다.
  • YAML의 형식 값은 대소문자를 구분하지 않습니다.