ניהול סכימות של מפתחות שורות
מפתחות שורות מובְנים מאפשרים לכם לגשת לנתוני Bigtable באמצעות מפתחות מרובי חלקים, בדומה למפתחות מורכבים במסדי נתונים רלציוניים. הגדרת מפתחות שורות מובנים לטבלה מאפשרת לכם לגשת לחלקים ספציפיים של מפתחות השורות באמצעות GoogleSQL לשאילתות Bigtable.
כשיוצרים סכימה של מפתח שורה, אפשר להגדיר את סוג הנתונים של כל פלח במפתח השורה ואת אופן הקידוד שלו. ב-Bigtable, מפתחות השורות מאוחסנים כבייטים ממוינים לקסיקוגרפית, והסכימה של מפתחות השורות מציינת ל-GoogleSQL for Bigtable איך לפענח ולפרש את הבייטים האלה.
השיטות המומלצות לעיצוב מפתחות שורה רלוונטיות גם אם אתם משתמשים במפתחות שורה מובנים וגם אם לא. מידע נוסף זמין במאמר בנושא מפתחות שורות.
בדוגמה הבאה מוצג מפתח שורה עם תווי הפרדה בין הערכים של סוג המכשיר, המדינה, מזהה היצרן והמספר הסידורי:
`phone#india#pke5preri2eru#8923695`
בסכימת מפתח השורה, יכול להיות שתזהו את # כתו המפריד ותגדירו את פלחי מפתח השורה כך:
| פלח של מפתח שורה | סוג | קידוד |
|---|---|---|
| סוג המכשיר (טלפון) | מחרוזת | UTF-8 |
| מדינה (הודו) | מחרוזת | UTF-8 |
| מזהה יצרן (pke5preri2eru) | מחרוזת | UTF-8 |
| מספר סידורי (8923695) | BYTES | ערכים גולמיים |
ההרשאות הנדרשות
ההרשאות שאתם צריכים תלויות בפעולה שאתם רוצים לבצע.
כדי לקבל את ההרשאות האלה, צריך לבקש מהאדמין להקצות לכם תפקיד בטבלה שכולל את ההרשאות:
- הצגת סכימת מפתח שורה:
bigtable.tables.get - יוצרים סכימה של מפתח שורה:
bigtable.tables.update - מחיקת סכימת מפתח שורה:
bigtable.tables.update
מידע נוסף על מתן גישה מופיע במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים.
יצירה של סכימת מפתח שורה
כשיוצרים תצוגה מהותית רציפה, Bigtable יוצר באופן אוטומטי סכימת מפתחות שורות לתצוגה. מידע נוסף מופיע במאמר בנושא תצוגות חומריות רציפות.
כדי להגדיר סכימה של מפתח שורה לטבלה שהיא לא תצוגה חומרית רציפה, מעדכנים את הטבלה על ידי הוספת שדה RowKeySchema שמאוחסן כחלק מהטבלה.
המסוף
כדי להגדיר סכימה של מפתח שורה באמצעות מסוף Google Cloud , פועלים לפי השלבים הבאים:
במסוף Google Cloud , פותחים את הדף Bigtable instances.
בוחרים מופע מהרשימה.
בתפריט הניווט, לוחצים על Bigtable Studio.
בחלונית Explorer מוצגת רשימה של טבלאות, תצוגות ושאילתות במופע.
ברשימה Tables, בשורה של הטבלה שרוצים ליצור עבורה סכימת מפתח שורה, לוחצים על התפריט View actions ואז על Create row key schema.
נפתחת הכרטיסייה Row key schema.
ברשימה Encoding (קידוד), בוחרים סוג קידוד לסכימת מפתח השורה.
אם בחרתם באפשרות DelimitedBytes, בשדה Delimiter מזינים תו מפריד שמפריד בין הפלחים במפתחות השורות הקיימים. ערך ברירת המחדל הוא סולמית (
#).בשדה Segment, מזינים שם לפלח, כמו
device_type.ברשימה Type (סוג), בוחרים את סוג הנתונים של פלח מפתח השורה.
בהתאם לסוג הנתונים שנבחר, ברשימה קידוד בייטים, משאירים את סוג הקידוד שמוגדר כברירת מחדל עבור פלח מפתח השורה או משנים אותו.
אופציונלי: אם לפלח של מפתח השורה יש יותר מחלק אחד, לוחצים על הוספת פלח של מפתח שורה כדי להוסיף עוד שדות.
לוחצים על Save.
gcloud
כדי להגדיר סכימה של מפתח שורה באמצעות ה-CLI של gcloud, משתמשים בפקודה gcloud beta bigtable tables
update עם קובץ YAML או JSON שמגדיר את הסכימה.
gcloud beta bigtable tables update TABLE_ID \
--instance=INSTANCE_ID \
--row-key-schema-definition-file=ROW_KEY_SCHEMA_DEFINITION_FILE \
--row-key-schema-pre-encoded-bytes
מחליפים את מה שכתוב בשדות הבאים:
- TABLE_ID: המזהה הייחודי של הטבלה שרוצים לעדכן
- INSTANCE_ID: המזהה של המופע שבו נמצא הטבלה
- ROW_KEY_SCHEMA_DEFINITION_FILE: הנתיב לקובץ YAML או JSON שמגדיר את הסכימה של מפתח השורה. דוגמאות לאופן שבו הקבצים האלה צריכים להיראות מופיעות במאמר דוגמאות לקובצי סכימה.
כברירת מחדל, קידוד Base64 מוחל על כל השדות הבינאריים בקובץ YAML או JSON, כמו encoding.delimitedBytes.delimiter עבור התו שמפריד בין מפתחות השורות. הדגל --row-key-schema-pre-encoded-bytes מציין ל-Bigtable ששדות בינאריים מקודדים בקובץ ואין לקודד אותם שוב.
המשך
משתמשים בפונקציה UpdateTableWithRowKeySchema כדי ליצור סכימת מפתח שורה לטבלה.
func (ac *AdminClient) UpdateTableWithRowKeySchema(ctx context.Context, tableID
string, rowKeySchema StructType) error
בדוגמה הבאה נוצר סכימה בשם rks והיא מתווספת לטבלה.
rks := StructType{
Fields: []StructField{
{FieldName: "key1", FieldType: Int64Type{Encoding: Int64OrderedCodeBytesEncoding{}}},
{FieldName: "key2", FieldType: StringType{Encoding: StringUtf8BytesEncoding{}}},
},
Encoding: StructDelimitedBytesEncoding{Delimiter: []byte{'#'}}}
err := c.UpdateTableWithRowKeySchema(context.Background(), "my-table", rks)
מחיקה של סכימת מפתח שורה
המסוף
כדי למחוק סכימת מפתח שורה של טבלה באמצעות מסוף Google Cloud :
במסוף Google Cloud , פותחים את הדף Bigtable instances.
בוחרים מופע מהרשימה.
בתפריט הניווט, לוחצים על Bigtable Studio.
בחלונית Explorer מוצגת רשימה של טבלאות, תצוגות ושאילתות במופע.
ברשימת הטבלאות, לוחצים על הטבלה עם סכימת מפתח השורה שרוצים למחוק.
לוחצים על התפריט View actions (הצגת פעולות) בשורה של סכימת מפתח השורה שרוצים למחוק.
לוחצים על Delete.
gcloud
כדי למחוק את סכימת מפתח השורה של טבלה, משתמשים בפקודה gcloud beta bigtable tables
update עם הדגל --clear-row-key-schema.
gcloud beta bigtable tables update TABLE_NAME \
--instance=INSTANCE_ID \
--clear-row-key-schema
מחליפים את מה שכתוב בשדות הבאים:
- TABLE_NAME: השם הייחודי של הטבלה שממנה רוצים למחוק את סכימת מפתח השורה
- INSTANCE_ID: המזהה של המופע שבו נמצא הטבלה
המשך
השתמש בפונקציה UpdateTableRemoveRowKeySchema כדי לנקות את סכימת מפתח השורה
עבור טבלה:
func (ac *AdminClient) UpdateTableRemoveRowKeySchema(ctx context.Context,
tableID string) error
שינוי סכימת מפתח שורה
אי אפשר לשנות ישירות את סכימת מפתח השורה. כדי לשנות סכימת מפתח שורה, צריך למחוק את הסכימה וליצור סכימה חדשה שכוללת את השינויים.
הצגת סכימת מפתח שורה
המסוף
כדי לראות את סכמת מפתח השורה של טבלה באמצעות המסוף Google Cloud , מבצעים את השלבים הבאים:
במסוף Google Cloud , פותחים את הדף Bigtable instances.
לוחצים על המופע שרוצים להציג את סכימת מפתח השורה של הטבלה שלו.
בתפריט הניווט, לוחצים על Bigtable Studio.
בחלונית Explorer מוצגת רשימה של טבלאות, תצוגות ושאילתות במופע.
ברשימת הטבלאות, לוחצים על הטבלה עם סכימת מפתח השורה שרוצים להציג.
לוחצים על סכימת מפתח השורה.
נפתחת הכרטיסייה 'פרטים'.
gcloud
כדי לראות את הסכימה של מפתח שורה, משתמשים בפקודה gcloud beta bigtable tables
describe:
gcloud bigtable tables describe TABLE_NAME \
--instance=INSTANCE_ID
מחליפים את מה שכתוב בשדות הבאים:
- TABLE_NAME: השם הייחודי של הטבלה שרוצים להציג את סכימת מפתח השורה שלה
- INSTANCE_ID: המזהה של המופע שבו נמצא הטבלה
התגובה במסוף אמורה להיראות כך: אם לטבלה אין סכימת מפתח שורה, התגובה לא כוללת את הקטע rowKeySchema.
columnFamilies:
cf: {}
createTime: '2025-05-28T17:25:39.433058Z'
granularity: MILLIS
name: projects/<project>/instances/<instance>/tables/<table>
rowKeySchema:
encoding:
delimitedBytes:
delimiter: Iw==
fields:
- fieldName: <field_name_1>
type:
stringType:
encoding:
utf8Bytes: {}
- fieldName: <field_name_2>
type:
intType:
encoding:
bigEndianBytes: {}
- fieldName: <field_name_3>
type:
timestampType:
encoding:
unixMicrosInt64: {
encoding: {
orderedCodeBytes: {}
}
}
updateTime: '2025-05-28T17:25:39.433058Z'
המשך
השדה RowKeySchema זמין כחלק מהאובייקט TableInfo, ואפשר לאחזר אותו באמצעות השיטה .TableInfo().
type TableInfo struct {
...
RowKeySchema *StructType
}
func (ac *AdminClient) TableInfo(ctx context.Context, table string) (*TableInfo, error)
שאילתות של מפתחות שורות מובנים
כדי לשלוח שאילתות לעמודות במפתחות שורות מובְנים, צריך להשתמש ב-SQL. השיטה ReadRows של Bigtable Data API מתעלמת מסכימת מפתח שורה כשהיא קוראת מטבלה.
דוגמאות לשאילתות שבוחרות מפתחות שורות מובנים מופיעות במאמר שאילתות של מפתחות שורות מובנים.
רשימה של ספריות לקוח של Bigtable שתומכות בשאילתות SQL, כולל דוגמאות קוד, מופיעה במאמר שימוש ב-SQL עם ספריית לקוח של Bigtable.
קבצים של סכימות לדוגמה
כשיוצרים סכימה של מפתח שורה באמצעות ה-CLI של gcloud, אפשר להגדיר את מפתחות השורה המובנים באמצעות קובץ YAML או קובץ JSON.
YAML
fields:
- fieldName: "user_id"
type:
stringType:
encoding:
utf8Bytes: {}
- fieldName: "purchase_date"
type:
stringType:
encoding:
utf8Bytes: {}
- fieldName: "order_number"
type:
stringType:
encoding:
utf8Bytes: {}
encoding:
delimitedBytes:
delimiter: "Iw=="
JSON
{
"fields": [
{
"fieldName": "user_id",
"type": {
"stringType": {
"encoding": {
"utf8Bytes": {}
}
}
}
},
{
"fieldName": "purchase_date",
"type": {
"stringType": {
"encoding": {
"utf8Bytes": {}
}
}
}
},
{
"fieldName": "order_number",
"type": {
"stringType": {
"encoding": {
"utf8Bytes": {}
}
}
}
}
],
"encoding": {
"delimitedBytes": {
"delimiter": "Iw=="
}
}
}