סוגי נתונים ב-SQL מדור קודם

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

סוגי נתונים ב-SQL מדור קודם

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

סוג נתונים ערכים אפשריים
מחרוזת נתונים של תווים באורך משתנה (UTF-8).
BYTES נתונים בינאריים באורך משתנה.
  • נתוני BYTES מיובאים צריכים להיות מקודדים ב-Base64, למעט נתוני BYTES בפורמט Avro, ש-BigQuery יכול לקרוא ולהמיר.
  • נתוני BYTES שנקראים מטבלה ב-BigQuery מקודדים ב-base64, אלא אם מייצאים לפורמט Avro, ובמקרה כזה חל סוג הנתונים Avro bytes.
מספר שלם

מספר שלם חתום ב-64 ביט.

אם אתם משתמשים ב-BigQuery API כדי לטעון מספר שלם מחוץ לטווח [‎-253+1, 253-1] (ברוב המקרים, המשמעות היא מספר גדול מ-9,007,199,254,740,991) אל עמודה של מספר שלם (INT64), אתם צריכים להעביר אותו כמחרוזת כדי למנוע פגיעה בנתונים. הבעיה הזו נגרמת בגלל מגבלה על גודל של מספר שלם ב-JSON/ECMAScript. מידע נוסף זמין בקטע Numbers ב-RFC 7159.

FLOAT פורמט נקודה צפה (floating-point) עם דיוק כפול.
NUMERIC התמיכה ב-NUMERIC ב-SQL מדור קודם מוגבלת. מידע נוסף זמין במאמר בנושא מספרים מדויקים ב-SQL מדור קודם.
BIGNUMERIC יש תמיכה מוגבלת ב-BIGNUMERIC ב-SQL מדור קודם. מידע נוסף זמין במאמר בנושא מספרים מדויקים ב-SQL מדור קודם.
בוליאני
  • פורמט CSV: 1 או 0, ‏ true או false, ‏ t או f, ‏ yes או no, ‏ או y או n (לא תלוי באותיות רישיות).
  • פורמט JSON: true או false (לא תלוי באותיות רישיות).
רשומה אוסף של שדה אחד או יותר.
TIMESTAMP

אפשר לתאר את סוגי הנתונים TIMESTAMP כחותמות זמן של UNIX או כתאריכים ושעות ביומן. מערכת BigQuery מאחסנת נתוני TIMESTAMP באופן פנימי כחותמת זמן של UNIX עם דיוק של מיקרו-שנייה.

חותמות זמן של UNIX

מספר עשרוני חיובי או שלילי. מספר חיובי מציין את מספר השניות מאז התקופה (1970-01-01 00:00:00 UTC), ומספר שלילי מציין את מספר השניות לפני התקופה. עד 6 ספרות אחרי הנקודה העשרונית (דיוק של מיקרו-שנייה).

מחרוזות של תאריך ושעה

מחרוזת של תאריך ושעה בפורמט YYYY-MM-DD HH:MM:SS. יש תמיכה במגדירי הפורמט UTC ו-Z.

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

כשמשתמשים בפורמט JSON, צריך להוסיף מרכאות למחרוזות של תאריכים ושעות.

דוגמאות

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

אירוע הפורמט של חותמת הזמן ב-UNIX פורמט מחרוזת של תאריך ושעה
רעידת אדמה בעוצמה נמוכה (M4.2) ליד אוקלהומה סיטי
1408452095.220
1408452095.220000
2014-08-19 07:41:35.220 -05:00
2014-08-19 12:41:35.220 UTC
2014-08-19 12:41:35.220
2014-08-19 12:41:35.220000
2014-08-19T12:41:35.220Z
ניל ארמסטרונג דורך על הירח
-14182916
1969-07-20 20:18:04
1969-07-20 20:18:04 UTC
1969-07-20T20:18:04
המועד האחרון לתיקון הבאג Y10k
253402300800
2.53402300800e11
10000-01-01 00:00
תאריך ב-SQL מדור קודם יש תמיכה מוגבלת ב-DATE. מידע נוסף זמין במאמר בנושא זמן אזרחי ב-SQL מדור קודם.
שעות ב-SQL מדור קודם יש תמיכה מוגבלת ב-TIME. מידע נוסף זמין במאמר בנושא זמן אזרחי ב-SQL מדור קודם.
DATETIME ב-SQL מדור קודם יש תמיכה מוגבלת ב-DATETIME. מידע נוסף זמין במאמר בנושא זמן אזרחי ב-SQL מדור קודם.

מספר מדויק ב-SQL מדור קודם

אפשר לקרוא ערכים מסוג NUMERIC או BIGNUMERIC בסעיפים שלא משנים את הערכים, כמו SELECT list (with aliases), GROUP BY keys ושדות של העברה ישירה בפונקציות חלון וכו'. עם זאת, כל חישוב של ערכים מסוג NUMERIC או BIGNUMERIC, כולל השוואות, יניב תוצאות לא מוגדרות.

פונקציות ההמרה וההעברה הבאות נתמכות ב-SQL מדור קודם:

  • CAST(<numeric> AS STRING)
  • CAST(<bignumeric> AS STRING)
  • CAST(<string> AS NUMERIC)
  • CAST(<string> AS BIGNUMERIC)

זמן אזרחי ב-SQL מדור קודם

אתם יכולים לקרוא סוגי נתונים של זמן אזרחי – DATE,‏ TIME ו-DATETIME – ולעבד אותם באמצעות אופרטורים שלא משנים את הנתונים, כמו SELECT list (with aliases),‏ GROUP BY keys ושדות של העברה ישירה בפונקציות אנליטיות (window function) וכו'. עם זאת, כל חישוב אחר של ערכי זמן אזרחי, כולל השוואות, יניב תוצאות לא מוגדרות.

פונקציות ההמרה וההמרות הבאות נתמכות ב-SQL מדור קודם:

  • CAST(<date> AS STRING)
  • CAST(<time> AS STRING)
  • CAST(<datetime> AS STRING)
  • CAST(<string> AS DATE)
  • CAST(<string> AS TIME)
  • CAST(<string> AS DATETIME)

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

כדי לחשב ערכים באמצעות סוגי נתונים של זמן אזרחי, כדאי להשתמש ב-GoogleSQL, שתומך בכל פעולות ה-SQL בסוגי הנתונים DATE,‏ DATETIME ו-TIME.

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

  • כדי להגדיר את סוג הנתונים של שדה באמצעות ה-API, אפשר לעיין במאמר schema.fields.type.
  • למידע על סוגי נתונים ב-GoogleSQL, אפשר לעיין במאמר בנושא סוגי נתונים.