שאילתות מובנות של מפתח שורה
אם לטבלה יש סכימת מפתחות שורות שמגדירה מפתחות שורות מובנים, אפשר להשתמש ב-SQL כדי לשלוח שאילתות לפלחים או לעמודות של מפתח השורה.
תצוגות מהותיות רציפות, כולל אינדקסים משניים אסינכרוניים, יוצרות כברירת מחדל מפתחות שורות מובנים. אפשר גם להגדיר מפתח שורה מובנה לכל טבלת Bigtable שרוצים להריץ עליה שאילתות באמצעות SQL, על ידי יצירת סכימת מפתח שורה לטבלה. מידע נוסף מופיע במאמר בנושא ניהול סכימות של מפתחות שורות.
מקשים
בטבלת Bigtable ללא סכימת מפתח שורה מובנית, כל שורה עוברת אינדוקס לפי מפתח שורה יחיד. כשמבצעים שאילתה בטבלה באמצעות SQL, מפתח השורה הוא עמודה בשם _key שמשמשת את SQL כמפתח הראשי. זו לא פסאודו-עמודה, ולכן הערכים בעמודה _key מוחזרים כשמריצים שאילתת SELECT * בטבלה.
לעומת זאת, בטבלה עם סכימת מפתח שורה, מפתח השורה (המפתח הראשי) הוא השילוב של כל העמודות שנקראות שדות בסכימת מפתח השורה. כשמוסיפים סכימה של מפתח שורה לטבלה, העמודה _key הופכת לעמודה וירטואלית, כלומר היא לא תופיע בשאילתת SELECT *, אבל אפשר לבחור אותה באופן מפורש באמצעות הצהרת SELECT _key.
שאילתות לדוגמה
בדוגמאות שבקטע הזה מניחים שלטבלה בשם sales יש את הסכימה הבאה:
field {
field_name: "user_id"
type: { bytes_type { encoding { raw {} } } }
}
field {
field_name: "purchase_date"
type: { string_type { encoding { utf8_bytes {} } } }
}
field {
field_name: "order_number"
type: { string_type { encoding { utf8_bytes {} } } }
}
encoding {
delimited_bytes { delimiter "#" }
}
טבלת sales מכילה את הנתונים הבאים. קבוצת העמודות product כוללת שתי עמודות.
| מפתח שורה | מוצר | |
|---|---|---|
| product_type | product_name | |
| "user1#2025-05-20#abcd1233" | "phone" (טלפון) | "iPhone16_pro_max" |
| "user1#2025-05-20#abcd1235" | "shoes" | "nike_hyperdunk" |
| "user2#2025-05-24#defg456" | "headphones" | "sony_wh_1000mx5" |
תוצאות של שאילתות על מפתחות שורות מובְנים
מכיוון שלטבלה sales יש מפתחות שורות מובנים, אם מריצים שאילתה על הטבלה באמצעות הצהרת SELECT *, השאילתה מחזירה כל פלח של מפתח השורה כעמודה נפרדת. כמו בכל שאילתת SQL לטבלת Bigtable, עמודות במשפחת עמודות מבוטאות כמפות.
SELECT * from sales
התוצאות ייראו כך:
| user_id | purchase_date | order_number | מוצר |
|---|---|---|---|
| user1 | 2025-05-20 | "abcd1233" | { product_type: "phone", product_name: "iPhone16_pro_max" } |
| user1 | 2025-05-20 | "abcd1235" | { product_type: "shoes", product_name: "nike_hyperdunk" } |
| user2 | 2025-05-24 | "defg456" | { product_type: "headphones", product_name: "sony_wh_1000mx5" } |
אפשר גם לציין את עמודות מפתח השורה בשאילתה, כמו בדוגמה הבאה:
SELECT
product[product_type] AS product_type,
product[product_name] AS product_name
FROM sales
WHERE user_id = b"user1"
התוצאות אמורות להיראות כך:
| product_type | product_name |
|---|---|
| "phone" (טלפון) | "iphone16_pro_max" |
| "shoes" | "nike_hyperdunk" |
מסננים
אפשר לסנן את העמודות של סכימת מפתח השורה באמצעות פונקציות SQL. בדוגמה הבאה אנחנו מניחים שהפקודה CURRENT_DATE() מחזירה את הערך 2025-05-24:
SELECT
user_id,
product["product_name"] AS product_name
FROM
sales
WHERE
PARSE_DATE("YYYY-MM-DD", purchase_date) = CURRENT_DATE()
AND user_id = b"user2"
התוצאות הן:
| user_id | product_name |
|---|---|
| user2 | "sony_wh_1000mx5" |
שאילתות מצטברות
הדוגמה הבאה מראה איך להשתמש בשאילתת צבירה בשדות מובְנים של מפתח שורה:
SELECT
user_id,
product[product_type] AS product_type,
count(*) AS count
FROM sales
GROUP BY 1, 2
תוצאות השאילתה הן:
| user_id | product_type | ספירה |
|---|---|---|
| user1 | טלפון | 1 |
| user1 | נעליים | 1 |
| user2 | אוזניות | 1 |
מפתח השורה המקורי
כדי לאחזר את מפתח השורה המקורי בטבלה עם מפתחות שורה מובְנים, מציינים את העמודה _key בשאילתה.
SELECT
_key, user_id
FROM sales
השאילתה מחזירה את התוצאות הבאות:
| _key | user_id |
|---|---|
| "user1#2025-05-20#abcd1233" | user1 |
| "user1#2025-05-20#abcd1235" | user1 |
| "user2#2025-05-24#defg456" | user2 |