עיצוב הפלט מ-CLI של cbt

ממשק שורת הפקודה (CLI) של cbt מאפשר לעצב נתונים מקודדים של שורות ב-Bigtable כשמציגים את הנתונים במסוף. עיצוב הנתונים עוזר לכם לבדוק ולפתור בעיות בסוגי נתונים מורכבים ישירות משורת הפקודה.

דוגמאות לעיצוב

החל מגרסה 0.12.0, ממשק שורת הפקודה (CLI) של cbt יכול לעצב סוגים מורכבים מסוימים של נתונים שמאוחסנים בשורות בטבלה. כשמשתמשים בפקודה cbt read או בפקודה cbt lookup, אפשר להשתמש ב-CLI של cbt כדי להציג את הערכים שמאוחסנים בשורות בפורמט קריא.

בדוגמה הבאה מוצג פלט נתונים מ-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}"

בדוגמה הבאה מוצג פלט נתונים מ-CLI של cbt עם עיצוב.

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. בקטע הקוד הבא מוצגת דוגמה להפעלה של 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 מוגדרת כ-ProtocolBuffer בשדה encoding, והשדה type מוגדר כ-Cat. ממשק שורת הפקודה (CLI) ‏ cbt מפרש ומעצב את כל הערכים שמאוחסנים בעמודה הזו כסוג הודעת פרוטו Cat. הסוג צריך להיות תואם לסוג הודעה שמוגדר באחד מקובצי ה-proto שסופקו לשדה protocol_buffer_definition.
    • השדה encoding בעמודה json מוגדר כ-'json'. הפונקציה cbt מפרשת ומעצבת את כל הערכים שמאוחסנים בעמודה הזו כמבנה JSON.

שדות אחרים שאפשר לספק:

  • ‫default_encoding: השדה הזה מגדיר פורמט ברירת מחדל לכל העמודות בטבלה או לכל העמודות במשפחת עמודות.
  • ‫default_type: השדה הזה מגדיר סוג נתונים שמוגדר כברירת מחדל לעמודות מקודדות של מאגר אחסון לפרוטוקולים,‏ big-endian ו-little-endian.
  • ‫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
Big-endian BigEndian, B
Little-endian LittleEndian, L
מאגר אחסון לפרוטוקולים ProtocolBuffer, P, PROTO
JSON JSON, J

טבלה 1. סוגי הנתונים שנתמכים לעיצוב בפלט של cbt.

  • הקידוד ההקסדצימלי לא תלוי בסוג. הנתונים מוצגים כייצוג הקסדצימלי של הנתונים המאוחסנים.
  • הסוגים הזמינים לקידודים big-endian ו-little-endian הם int8,‏ int16,‏ int32,‏ int64,‏ uint8,‏ uint16,‏ uint32,‏ uint64,‏ float32 ו-float64. אורך הנתונים המאוחסנים חייב להיות כפולה של גודל הסוג, בבייטים. הנתונים מוצגים כערכים סקלריים אם האורך המאוחסן תואם לגודל הסוג, או כמערכים אחרת. בשמות של סוגים אין הבחנה בין אותיות רישיות לרגילות.
  • הסוגים שצוינו עבור קידוד protocol-buffer צריכים להיות זהים לסוגי ההודעות שמוגדרים בקובצי ההגדרה של protocol-buffer שסופקו. הסוגים לא תלויי אותיות רישיות. אם לא מציינים סוג, ברירת המחדל היא שם העמודה של נתוני העמודה שמוצגים.
  • הערכים של הפורמט ב-YAML אינם תלויי אותיות רישיות.