יצירה וניהול של תצוגות עם פרמטרים
אפשר ליצור תצוגה עם פרמטרים מתצוגה לוגית ב-Bigtable ואז לבצע פעולות בתצוגות עם פרמטרים.
לפני שקוראים את הדף הזה, מומלץ לעיין בסקירה הכללית על תצוגות עם פרמטרים.
לפני שמתחילים
אם אתם מתכוונים להשתמש ב-Google Cloud CLI, אתם צריכים לבצע את השלבים הבאים:
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות ליצירה ולניהול של תצוגות עם פרמטרים, צריך לבקש מהאדמין להקצות לכם את התפקיד Bigtable Admin (roles/bigtable.admin) במופע.
לחלופין, אפשר לבקש את ההרשאות הבאות ברמת המופע:
- יצירה:
bigtable.logicalViews.create - עדכון:
bigtable.logicalViews.update - מחיקה:
bigtable.logicalViews.delete - רשימה:
bigtable.logicalViews.list
כדי ליצור תצוגה עם פרמטרים, אתם צריכים גם הרשאה לפחות ברמה bigtable.tables.readRows בטבלת המקור.
יצירת תצוגה עם פרמטרים
תצוגה עם פרמטרים היא טבלה וירטואלית שמוגדרת על ידי הצהרת SQL SELECT שיכולה לכלול את הפונקציה VIEW_PARAMETERS().
כדי ליצור תצוגה עם פרמטרים, משתמשים בפקודה gcloud bigtable logical-views create.
gcloud bigtable logical-views create VIEW \
--instance=INSTANCE \
--query="SELECT * FROM TABLE_ID WHERE STARTS_WITH(_key, CAST(VIEW_PARAMETERS('VIEW_PARAMETERS') AS BYTES))"
מחליפים את מה שכתוב בשדות הבאים:
-
VIEW: מזהה באורך של עד 128 תווים לתצוגה החדשה עם פרמטרים. המזהה חייב להיות ייחודי בין מזהי הטבלאות ומזהי התצוגות המפורטות במופע. -
INSTANCE: המזהה של המופע שבו רוצים ליצור את התצוגה עם הפרמטרים. -
TABLE_ID: המזהה של טבלת המקור. -
VIEW_PARAMETERS: שם הפרמטר של התצוגה במירכאות בודדות, שמועבר כארגומנט לפונקציהVIEW_PARAMETERS().
אופציונלי:
- כדי להגן על התצוגה עם הפרמטרים מפני מחיקה, מוסיפים לפקודה את הדגל
--deletion-protection. אם לא תחיל את ההגדרה הזו, אפשר יהיה למחוק את התצוגה. אפשר גם לאפשר מחיקה של תצוגה באופן מפורש על ידי הוספת--no-deletion-protection. מידע נוסף מופיע בקטע עדכון תצוגה עם פרמטרים במאמר הזה.
יצירת תצוגה עם פרמטרים באמצעות מפתח שורה מובנה
אם בטבלה שלכם נעשה שימוש במפתח שורה מובנה, אתם יכולים לסנן לפי פלח ספציפי של מפתח השורה.
לדוגמה, אם מפתח שורה בטבלת היסטוריית רכישות מאחסן את המשתמש, חותמת הזמן של תאריך הרכישה ומזהה ההזמנה, מופרדים באמצעות הסמל #, אפשר לציין את סכימת השורה באופן הבא:
field {
field_name: "user_id"
type: { bytesType { encoding { raw {} } } }
}
field {
field_name: "reversed_timestamp"
type: { timestampType { encoding { unixMicrosInt64 { encoding: { orderedCodeBytes: {} } } } } }
}
field {
field_name: "order_id"
type: { stringType { encoding { utf8Bytes {} } } }
}
encoding {
delimitedBytes { delimiter "#" }
}
אחר כך תוכלו ליצור תצוגה מפורטת שמסננת לפי השדה של מזהה המשתמש:
gcloud bigtable logical-views create VIEW \
--instance=INSTANCE \
--query="SELECT * FROM TABLE_ID WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)"
מחליפים את מה שכתוב בשדות הבאים:
-
VIEW: מזהה באורך של עד 128 תווים לתצוגה החדשה עם פרמטרים. המזהה חייב להיות ייחודי בין מזהי הטבלאות ומזהי התצוגות המפורטות במופע. -
INSTANCE: המזהה של המופע שבו רוצים ליצור את התצוגה עם הפרמטרים. -
TABLE_ID: המזהה של טבלת המקור.
עדכון תצוגה עם פרמטרים
מעדכנים תצוגה עם פרמטרים באותו אופן שבו מעדכנים תצוגה לוגית.
מחיקה של תצוגה עם פרמטרים
מחיקה של תצוגה עם פרמטרים מתבצעת באותו אופן שבו מוחקים תצוגה לוגית.
מידע על תצוגות עם פרמטרים
אפשר לראות רשימה של תצוגות עם פרמטרים באותו אופן שבו רואים רשימה של תצוגות לוגיות של מופע.
תצוגות מפורטות של שאילתות
השאילתות של תצוגות עם פרמטרים דומות לשאילתות של טבלאות רגילות, אבל צריך לספק את view_parameters המיפוי בבקשה.
בדוגמה הבאה מוצגת שאילתה של תצוגה עם פרמטרים בשם purchase_history_pv, שמסננת נתונים על סמך מזהה משתמש.
// Assumes 'purchase_history_pv' was created with the definition:
// SELECT * FROM purchases WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)
String query = "SELECT customer_info[email], order_details[status], order_info[items] from purchase_history_pv";
PreparedStatement preparedStatement = dataClient.prepareStatement(query);
BoundStatement boundStatement = preparedStatement.bind().build();
// The user ID is now passed out-of-band in a view parameters map.
Map<String, Value> viewParameters = new HashMap<>();
viewParameters.put("user_id", Value.newBuilder().setType(stringType()).setStringValue(userId).build());
// Execute the query, passing the view parameters using a proto field in the request.
ResultSet rs = dataClient.executeQuery(
boundStatement,
viewParameters
);
כך המשתמש לא יכול לראות את user_id
הפרמטר או לשנות אותו בתוך השאילתה עצמה, ונוצר הפרדה לוגית ברורה.