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'으로 설정됩니다.cbtCLI는 이 열에 저장된 모든 값을Catproto 메시지 유형으로 해석하고 형식을 지정합니다. 유형은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_encoding및default_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입니다. 저장된 데이터 길이는 크기가 유형 크기의 배수(바이트)여야 합니다. 저장된 길이가 유형 크기와 일치하는 경우 데이터는 스칼라로 표시되고 그렇지 않은 경우에는 배열로 표시됩니다. 유형 이름은 대소문자를 구분하지 않습니다. - 프로토콜 버퍼 인코딩에 지정된 유형은 제공된 프로토콜 버퍼 정의 파일에 정의된 메시지 유형과 일치해야 합니다. 유형은 대소문자를 구분하지 않습니다. 유형을 지정하지 않으면 기본값은 표시되는 열 데이터의 열 이름으로 설정됩니다.
- YAML의 형식 지정 값은 대소문자를 구분하지 않습니다.