設定 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 時,請使用 format-file 引數傳遞 YAML 檔案的路徑。以下程式碼片段範例顯示如何呼叫 cbt lookup,並提供 format-file 引數。
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欄位提供 .proto 檔案清單,其中可包含用於解碼 protobuf 資料的通訊協定緩衝區訊息類型。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 的格式化值 |
|---|---|
| 十六進位數 | Hex、H |
| 大端序 | BigEndian、B |
| 小端序 | LittleEndian、L |
| 通訊協定緩衝區 | ProtocolBuffer、P、PROTO |
| JSON | JSON、J |
表 1. cbt 輸出格式支援的資料類型。
- 十六進位編碼與型別無關。資料會以儲存資料的原始十六進位表示法顯示。
- 大端序和反向大端序編碼可用的類型為
int8、int16、int32、int64、uint8、uint16、uint32、uint64、float32和float64。儲存的資料長度必須是類型大小的倍數 (以位元組為單位)。如果儲存長度與型別大小相符,資料會顯示為純量,否則會顯示為陣列。類型名稱不區分大小寫。 - 通訊協定緩衝區編碼指定的類型,必須與提供的通訊協定緩衝區定義檔案中定義的訊息類型相符。類型不區分大小寫。 如未指定類型,系統會預設為顯示資料的資料欄名稱。
- YAML 的格式值不區分大小寫。