設定 cbt CLI 的輸出格式

本文說明如何使用 cbt CLI 顯示 Bigtable 列中儲存的特定資料類型時,設定資料格式。

格式設定範例

從 0.12.0 版開始, cbt CLI 可以格式化儲存在資料表列中的特定複雜類型資料。 使用 cbt readcbt 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 lookupcbt 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」。 cbt CLI 會將儲存在這個資料欄中的所有值解讀並格式化為 Cat proto 訊息類型。類型必須對應至為 protocol_buffer_definition 欄位提供的其中一個 .proto 檔案中定義的訊息類型。
    • json」欄的「encoding」欄位設為「json」。cbt 會將儲存在這個資料欄中的所有值解讀為 JSON 結構,並以這種格式呈現。

可提供的其他欄位:

  • default_encoding:這個欄位會為資料表中的所有資料欄或資料欄系列中的所有資料欄定義預設格式。
  • default_type:這個欄位會為通訊協定緩衝區、大端序和低位元組優先編碼的資料欄定義預設資料類型。
  • families:這個欄位會定義資料欄系列中所有資料欄的編碼和類型。您可以為資料欄系列提供 default_encodingdefault_type。您也可以在資料欄層級覆寫這些編碼,方法是提供 columns 欄位,列出具有適當編碼和資料類型的資料欄名稱,如下列程式碼片段所示:

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

支援的資料類型

cbt CLI 支援多種複雜資料類型的格式設定。下表列出支援的資料類型和字串,您可以在 YAML 檔案中為各清單類型提供這些資料。字串值不區分大小寫。

資料類型 YAML 的格式化值
十六進位數 HexH
大端序 BigEndianB
小端序 LittleEndianL
通訊協定緩衝區 ProtocolBufferPPROTO
JSON JSONJ

表 1. cbt 輸出格式支援的資料類型。

  • 十六進位編碼與型別無關。資料會以儲存資料的原始十六進位表示法顯示。
  • 大端序和反向大端序編碼可用的類型為 int8int16int32int64uint8uint16uint32uint64float32float64。儲存的資料長度必須是類型大小的倍數 (以位元組為單位)。如果儲存長度與型別大小相符,資料會顯示為純量,否則會顯示為陣列。類型名稱不區分大小寫。
  • 通訊協定緩衝區編碼指定的類型,必須與提供的通訊協定緩衝區定義檔案中定義的訊息類型相符。類型不區分大小寫。 如未指定類型,系統會預設為顯示資料的資料欄名稱。
  • YAML 的格式值不區分大小寫。