cbt CLI からの出力をフォーマットする
このドキュメントでは、cbt CLI で表示されるときに Bigtable 行に格納された、特定のデータ型をフォーマットする方法について説明します。
フォーマットの例
バージョン 0.12.0 以降では、cbt CLI を使用して、テーブル行に格納されたデータの特定の複合型をフォーマットできます。cbt read コマンドまたは cbt lookup コマンドを使用すると、cbt CLI は行に格納されている値を「プリティ プリント」できます。
次の例は、フォーマットしていない 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"
フォーマットされた行を出力する
列または列ファミリーをフォーマットするには、その列の形式を指定する YAML ファイルを指定する必要があります。cbt lookup または cbt read を呼び出すときに、YAML ファイルのパスを format-file 引数で渡します。次のスニペットは、format-file 引数を指定して cbt lookup を呼び出しています。
cbt lookup my-table r1 format-file=/path/to/formatting.yml
YAML で列データ形式を定義する
フォーマット YAML ファイルでは、列名または列ファミリー名をそこに格納されているデータ型に関連付ける必要があります。次のスニペットは、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: このフィールドには、テーブル内のすべての列または列ファミリー内のすべての列にデフォルトの書式を定義します。default_type: このフィールドには、プロトコル バッファ、ビッグ エンディアン、リトル エンディアンでエンコードされた列のデフォルトのデータ型を定義します。families: このフィールドには、列ファミリー内のすべての列のエンコードと型を定義します。列ファミリーには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 |
| ビッグ エンディアン | BigEndian、B |
| リトル エンディアン | LittleEndian、L |
| プロトコル バッファ | ProtocolBuffer、P、PROTO |
| JSON | JSON、J |
表 1.cbt 出力のフォーマットでサポートされているデータ型。
- 16 進数エンコードは型に依存しません。データは、格納されたデータの未加工の 16 進数表現として表示されます。
- ビッグ エンディアンとリトル エンディアンのエンコードで使用可能な型は、
int8、int16、int32、int64、uint8、uint16、uint32、uint64、float32、float64です。格納されたデータの長さはバイト単位で、サイズが設定された型の倍数でなければなりません。格納されている長さが型のサイズと一致する場合はデータがスカラーとして、それ以外の場合は配列として表示されます。型名では大文字と小文字が区別されません。 - protocol-buffer エンコードに指定された型は、提供されたプロトコル バッファ定義ファイルで定義されたメッセージ型と一致している必要があります。大文字と小文字は区別されません。型が指定されていない場合、表示される列データの列名がデフォルトの値になります。
- YAML のフォーマット値では大文字と小文字は区別されません。