סוגי נתונים ב-SQL מדור קודם
במאמר הזה מפורטים סוגי הנתונים שנתמכים בתחביר של שאילתות SQL מדור קודם ב-BigQuery. התחביר המועדף לשאילתות ב-BigQuery הוא GoogleSQL. מידע על סוגי נתונים ב-GoogleSQL זמין במאמר בנושא סוגי נתונים ב-GoogleSQL.
סוגי נתונים ב-SQL מדור קודם
הנתונים יכולים לכלול את סוגי הנתונים הבאים:
| סוג נתונים | ערכים אפשריים | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| מחרוזת | נתונים של תווים באורך משתנה (UTF-8). | ||||||||||||
| 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 מדור קודם. | ||||||||||||
| בוליאני |
|
||||||||||||
| רשומה | אוסף של שדה אחד או יותר. | ||||||||||||
| TIMESTAMP |
אפשר לתאר את סוגי הנתונים TIMESTAMP כחותמות זמן של UNIX או כתאריכים ושעות ביומן. מערכת BigQuery מאחסנת נתוני TIMESTAMP באופן פנימי כחותמת זמן של UNIX עם דיוק של מיקרו-שנייה. חותמות זמן של UNIX מספר עשרוני חיובי או שלילי. מספר חיובי מציין את מספר השניות מאז התקופה (1970-01-01 00:00:00 UTC), ומספר שלילי מציין את מספר השניות לפני התקופה. עד 6 ספרות אחרי הנקודה העשרונית (דיוק של מיקרו-שנייה). מחרוזות של תאריך ושעה מחרוזת של תאריך ושעה בפורמט אפשר לספק היסט של אזור זמן במחרוזות של תאריך ושעה, אבל BigQuery לא שומר את ההיסט אחרי שהוא ממיר את הערך לפורמט הפנימי שלו. אם אתם צריכים לשמור את נתוני אזור הזמן המקוריים, אחסנו את ההפרש מאזור הזמן בעמודה נפרדת. כשמציינים היסט של אזור זמן עם ספרה אחת, צריך להוסיף אפס מוביל. כשמשתמשים בפורמט JSON, צריך להוסיף מרכאות למחרוזות של תאריכים ושעות. דוגמאות בדוגמאות הבאות מוצגות דרכים זהות לתיאור תאריכים ספציפיים, גם בפורמט חותמת זמן של UNIX וגם בפורמט מחרוזת של תאריך ושעה.
|
||||||||||||
| תאריך | ב-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, אפשר לעיין במאמר בנושא סוגי נתונים.