אכיפת סוגי נתונים ב-Bigtable

הסכימה הגמישה של Bigtable מאפשרת לכם לאחסן נתונים מכל סוג – מחרוזות, תאריכים, מספרים, מסמכי JSON או אפילו תמונות או קובצי PDF – בטבלת Bigtable.

במסמך הזה מתואר מתי Bigtable אוכף את הסוג, ומחייב אתכם לקודד או לפענח אותו בקוד האפליקציה. רשימה של סוגי הנתונים ב-Bigtable מופיעה במאמרי העזרה של Data API בקטע Type.

סוגים שנאכפים

סוג הנתונים נאכף לגבי הנתונים הבאים:

  • קבוצות עמודות מצטברות (מונים)
  • חותמות זמן
  • תצוגות מהותיות

נתונים מצטברים

עבור סוג הנתונים aggregate, הקידוד תלוי בסוג הצבירה. כשיוצרים קבוצת עמודות מצטברת, צריך לציין סוג צבירה.

בטבלה הזו מוצגים סוג הקלט והקידוד של כל סוג צבירה.

סוג הצבירה סוג הקלט קידוד
סכום Int64 BigEndianBytes
מינימום Int64 BigEndianBytes
מקסימום Int64 BigEndianBytes
HLL בייטים Zetasketch HLL++‎

כשמריצים שאילתות על נתונים בתאים מצטברים באמצעות SQL, המערכת משלבת באופן אוטומטי את פרטי הסוג.

כשקוראים את הנתונים בתאים מצטברים באמצעות השיטה ReadRows של Data API, ‏ Bigtable מחזיר בייטים, ולכן האפליקציה צריכה לפענח את הערכים באמצעות הקידוד שבו Bigtable השתמש כדי למפות את הנתונים המוקלדים לבייטים.

אי אפשר להמיר קבוצת עמודות שמכילה נתונים לא נצברים לקבוצת עמודות נצברת. עמודות במשפחות של עמודות מצטברות לא יכולות להכיל תאים לא מצטברים, ומשפחות של עמודות רגילות לא יכולות להכיל תאים מצטברים.

מידע נוסף על יצירת טבלאות עם משפחות עמודות מצטברות זמין במאמר יצירת טבלה. דוגמאות לקוד שבהן מוצגות דרכים להגדלת ערך מצטבר בתא עם ערכים מקודדים זמינות במאמר בנושא הגדלת ערך.

חותמות זמן

לכל תא ב-Bigtable יש Int64 חותמת זמן שצריכה להיות ערך במיקרו-שנייה, עם דיוק של מילי-שנייה לכל היותר. מערכת Bigtable דוחה חותמת זמן עם דיוק של מיקרו-שנייה, כמו 3023483279876543. בדוגמה הזו, ערך חותמת הזמן הקביל הוא 3023483279876000. חותמת זמן היא מספר המיקרו-שניות מאז ראשית זמן יוניקס (Unix epoch), 1970-01-01 00:00:00 UTC.

תצוגות מהותיות רציפות

תצוגות חומריות רציפות הן משאבים לקריאה בלבד שאפשר לקרוא באמצעות SQL או באמצעות קריאה ל-ReadRows Data API. הנתונים בתצוגה חומרית הם מסוג מסוים, בהתאם לשאילתה שמגדירה אותה. סקירה כללית זמינה במאמר בנושא תצוגות חומריות מתמשכות.

כשמשתמשים ב-SQL כדי לשלוח שאילתה לתצוגה חומרית רציפה, SQL משלב באופן אוטומטי מידע על סוג.

כשקוראים מתוך תצוגה חומרית רציפה באמצעות בקשת Data API ReadRows, צריך לדעת את הסוג של כל עמודה ולפענח אותה בקוד האפליקציה.

ערכים מצטברים בתצוגה רציפה של נתונים חומריים מאוחסנים באמצעות קידוד שמתואר בטבלה הבאה, על סמך סוג הפלט של העמודה מהגדרת התצוגה.

סוג קידוד
BOOL ערך של בייט אחד, 1 = true, ‏ 0 = false
BYTES ללא קידוד
‫INT64 (או INT, ‏ SMALLINT, ‏ INTEGER, ‏ BIGINT, ‏ TINYINT, ‏ BYTEINT) ‫64 ביט big-endian
FLOAT64 ‫IEEE 754‏ 64 ביט, לא כולל NaN ו-‎+/-inf
מחרוזת UTF-8
TIME/TIMESTAMP מספר שלם ב-64 ביט שמייצג את מספר המיקרו-שניות מאז ראשית זמן יוניקס (Unix epoch) (עקבי עם GoogleSQL)
מידע נוסף זמין במאמר קידוד בהפניית API של Data API.

מפתחות שורה מובנים

מפתחות שורות מובְנים מאפשרים לכם לגשת לנתונים באמצעות מפתחות מרובי-עמודות, בדומה למפתחות מורכבים במסדי נתונים יחסיים.

הסוג והקידוד של מפתחות שורות מובנים מוגדרים על ידי סכימת מפתחות שורות שאפשר להוסיף לטבלת Bigtable. נתונים מובְנים של מפתח שורה מאוחסנים כבייטים, אבל GoogleSQL for Bigtable משתמש באופן אוטומטי בסוג ובקידוד שמוגדרים בסכימת מפתח השורה כשמריצים שאילתת SQL בטבלה.

אי אפשר להשתמש בסכימת מפתח שורה כדי לשלוח שאילתה לטבלה עם בקשת ReadRows. לתצוגה חומרית רציפה יש כברירת מחדל סכימה של מפתח שורה. מידע נוסף על מפתחות שורות מובְנים זמין במאמר ניהול סכימות של מפתחות שורות.

סוגים שלא נאכפים

אם לא מצוין סוג, Bigtable מתייחס לכל תא כבייטים עם קידוד לא ידוע.

כשמריצים שאילתות על משפחות עמודות שנוצרו ללא אכיפת סוגים, צריך לספק מידע על הסוג בזמן הקריאה כדי לוודא שהנתונים נקראים בצורה נכונה. זה רלוונטי לפונקציות של מסדי נתונים שההתנהגות שלהן תלויה בסוג הנתונים. ‫GoogleSQL ל-Bigtable מציע פונקציות CAST להמרת סוגים בזמן השאילתה. הפונקציות האלה ממירות מביתים לסוגים שהפונקציות השונות מצפות להם.

למרות ש-Bigtable לא אוכף סוגים, פעולות מסוימות מניחות סוג נתונים. הידיעה הזו עוזרת לכם לוודא שהנתונים נכתבים בצורה שאפשר לעבד במסד הנתונים. הנה כמה דוגמאות:

  • הפונקציה increment באמצעות ReadModifyWriteRow מניחה שהתא מכיל מספר שלם חתום בפורמט big-endian של 64 ביט.
  • הפונקציה TO_VECTOR64 ב-SQL מצפה שהתא יכיל מערך בייטים שהוא שרשור של בייטים big-endian של מספרים ממשיים 64-ביט.
  • הפונקציה TO_VECTOR32 ב-SQL מצפה שהתא יכיל מערך בייטים שהוא שרשור של בייטים בסדר big-endian של מספרים נקודתיים 32-ביט.

המאמרים הבאים