מבוא לתרחישים

במאמר הזה מוסבר איך לבחור שגרה, שהיא סוג משאב שמשמש ליצירת פונקציות או פרוצדורות מאוחסנות ב-BigQuery.

שגרות נתמכות

‫BigQuery תומך בשגרות הבאות:

איך בוחרים תרחיש

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

גורמים שכדאי לקחת בחשבון

כדי לבחור שגרה, כדאי להביא בחשבון את הגורמים הבאים, שמתוארים בקטעים של כל סוג שגרה:

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

השוואה בין שגרות לפי משימה

בטבלה הבאה מפורטים סוגי המשימות שאפשר לבצע בכל סוג של שגרה:

משימה

סוג משאב שגרתי

יצירת פונקציות שמבצעות משימות למטרות כלליות ב-BigQuery.

פונקציה מוגדרת על ידי המשתמש (UDF) ב-SQL או ב-JavaScript

UDAF ב-SQL או ב-JavaScript

ליצור פונקציות שמבצעות משימות למטרות כלליות ב-BigQuery ושמתקשרות עם מערכות חיצוניות Google Cloud באמצעות חיבור למשאבים ב-Cloud.

פונקציית UDF של Python

ליצור פונקציות שמצברות נתונים.

UDAFs

יוצרים טבלה באמצעות פרמטרים.

פונקציות טבלה

ליצור פונקציות שמשתמשות בשפות, בספריות או בשירותים שלא נתמכים ב-BigQuery. הפונקציות האלה משולבות ישירות עם פונקציות Cloud Run ועם Cloud Run.

פונקציות מרחוק

להריץ כמה הצהרות בשאילתה אחת בתור שאילתה עם כמה הצהרות באמצעות שפה פרוצדורלית. אפשר להשתמש בשאילתה עם כמה הצהרות כדי:

  • הפעלת כמה הצהרות ברצף, עם מצב משותף.
  • להפוך משימות ניהול לאוטומטיות, כמו יצירה או מחיקה של טבלאות.
  • הטמעה של לוגיקה מורכבת באמצעות מבני תכנות כמו IF ו-WHILE.

יצירה של תהליכים מאוחסנים של Apache Spark ב-BigQuery והפעלתם.

תהליכים מאוחסנים

פונקציות בהגדרת המשתמש (UDF)

פונקציה בהגדרת המשתמש (UDF) מאפשרת ליצור פונקציה באמצעות ביטוי SQL, קוד JavaScript או קוד Python. פונקציות UDF מקבלות עמודות קלט, מבצעות פעולות בקלט ומחזירות את התוצאה של פעולות אלה בתור ערך.

אפשר להגדיר שפונקציות UDF יהיו מתמידות או זמניות. אפשר להשתמש שוב בפונקציות UDF מתמידות בכמה שאילתות, ופונקציית UDF זמנית קיימת רק בהיקף של שאילתה אחת.

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

מידע נוסף על פונקציות UDF זמין במקורות המידע הבאים:

פונקציות UDF שמבוססות על שפה

  • פונקציות UDF מבוססות-SQL תומכות בפרמטרים של פונקציות UDF מבוססות-תבנית, שיכולים להתאים ליותר מסוג אחד של ארגומנטים כשמפעילים את הפונקציה. פונקציות UDF של SQL יכולות גם להחזיר את הערך של שאילתת משנה סקלרית.
  • פונקציות בהגדרת המשתמש שמבוססות על JavaScript מאפשרות לקרוא לקוד שנכתב ב-JavaScript מתוך שאילתת SQL.
    • פונקציות UDF ב-JavaScript צורכות בדרך כלל יותר משאבי יחידות קיבולת (Slot) בהשוואה לשאילתות SQL סטנדרטי, ולכן הן פוגעות בביצועי העבודה.
    • אם אפשר לבטא את הפונקציה ב-SQL, לרוב עדיף להריץ את הקוד כמשימת שאילתת SQL סטנדרטי.
  • פונקציות UDF מבוססות Python נוצרות ומופעלות במשאבים מנוהלים של BigQuery. הפונקציות האלה מאפשרות לכם להטמיע פונקציה ב-Python ולהשתמש בה בשאילתת SQL.

פונקציות UDF שנוצרו על ידי הקהילה

בנוסף ל-UDF שאתם יוצרים, יש UDF שנוצרו על ידי הקהילה וזמינים במערך הנתונים הציבורי bigquery-public-data.persistent_udfs ובמאגר הקוד הפתוח bigquery-utils ב-GitHub.

פונקציות צבירה בהגדרת המשתמש (UDAFs)

פונקציית UDAF מאפשרת ליצור פונקציית צבירה באמצעות ביטוי שמכיל קוד SQL או JavaScript. פונקציית UDAF מקבלת עמודות קלט, מבצעת חישוב על קבוצת שורות בכל פעם, ואז מחזירה את תוצאת החישוב כערך יחיד.

פונקציות UDAFs לא יכולות לשנות נתונים, לתקשר עם מערכות חיצוניות או לשלוח יומנים ל-Google Cloud Observability או לאפליקציות דומות.

מידע נוסף זמין במקורות המידע הבאים:

פונקציות UDAFs של SQL

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

פונקציות מוגדרות על ידי משתמש (UDAFs) ב-JavaScript

פונקציות UDAF של JavaScript יכולות לכלול ספריות JavaScript. גוף הפונקציה של JavaScript יכול לכלול קוד JavaScript מותאם אישית, כמו משתנים גלובליים של JavaScript ופונקציות מותאמות אישית.

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

יש כמה מגבלות על פונקציות UDAF ב-JavaScript. מותרות רק קידודים מסוג מסוים, ויש דרישות לסריאליזציה ולדה-סריאליזציה.

השוואה בין פונקציות UDF ופונקציות UDAF

ההחלטה אם לבחור UDF או UDAF תלויה במשימה הספציפית שאתם מנסים לבצע.

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

לדוגמה, אם רוצים לחשב את הממוצע של עמודת מספרים, צריך להשתמש ב-UDAF. אם רוצים להמיר עמודה של מחרוזות לאותיות רישיות, צריך להשתמש ב-UDF.

יש כמה נקודות דמיון בין UDF לבין UDAF:

  • פונקציות UDF ו-UDAF לא יכולות לשנות נתונים, לתקשר עם מערכות חיצוניות או לשלוח יומנים אל Google Cloud Observability או אל אפליקציות דומות. החריג הוא פונקציות מוגדרות על ידי המשתמש (UDF) ב-Python, שיכולות לגשת לשירותים חיצוניים באמצעות קישור למשאבים ב-Cloud. עם זאת, פונקציות UDF ב-Python לא תומכות ב-VPC Service Controls או במפתחות הצפנה בניהול הלקוח (CMEK).
  • ל-UDAF יש את אותן מגבלות כמו ל-UDF, ועוד כמה מגבלות.
  • ל-UDF ול-UDAF יש את אותן מכסות ומגבלות.

יש הבדלים בין UDF ל-UDAF:

מאפיין

UDFs

UDAFs

הגדרה

פונקציות מוגדרות על ידי המשתמש (UDF) מקבלות עמודות קלט, מבצעות פעולות בקלט ומחזירות את התוצאה של הפעולות האלה בתור ערך.

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

שפות נתמכות

‫SQL,‏ Javascript ו-Python

‫SQL ו-JavaScript

התמדה

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

ארגומנטים וסוגי נתונים

פונקציות UDF מקבלות ערכי פרמטרים שתואמים ל-GoogleSQL עבור סוגי נתונים ב-BigQuery. חלק מסוגי ה-SQL ממופים ישירות לסוגי JavaScript, אבל אחרים לא. סוגים נתמכים של JavaScript

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

רק לפונקציות מוגדרות על ידי המשתמש ב-JavaScript יש מפרט דטרמיניסטי שמספק ל-BigQuery רמז לגבי האפשרות לשמור את תוצאת השאילתה במטמון.

פונקציות UDAF ב-SQL וב-JavaScript מקבלות ערכי פרמטרים שתואמים לסוגי הנתונים של GoogleSQL ל-BigQuery.

פרמטרים של פונקציות יכולים להיות פרמטרים של פונקציות מצטברות או פרמטרים של פונקציות לא מצטברות.

Usage

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

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

פונקציות טבלה

פונקציית טבלה, שנקראת גם פונקציה להחזרת טבלה (TVF), היא פונקציה UDF שמחזירה טבלה. אפשר להשתמש בפונקציית טבלה בכל מקום שבו אפשר להשתמש בטבלה. פונקציות של טבלאות מתנהגות באופן דומה לתצוגות, אבל פונקציה של טבלה יכולה לקבל פרמטרים.

אפשר לבצע את הפעולות הבאות באמצעות פונקציות של טבלאות:

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

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

פונקציות מרחוק

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

פונקציה מרוחקת של BigQuery משלבת את פונקציית Google SQL עם פונקציות Cloud Run ועם Cloud Run באמצעות כל שפה נתמכת, ואז מפעילה את הפונקציות האלה משאילתות Google SQL.

דוגמאות למשימות שאפשר לבצע באמצעות פונקציות מרוחקות:

כדי ליצור פונקציה מרחוק:

  1. יוצרים את נקודת הקצה של ה-HTTP בפונקציות Cloud Run או ב-Cloud Run.
  2. יוצרים פונקציה מרוחקת ב-BigQuery באמצעות סוג החיבור CLOUD_RESOURCE.
  3. משתמשים בפונקציה המרוחקת בשאילתה בדיוק כמו בכל UDF אחר של BigQuery.

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

תהליכים מאוחסנים

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

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

תהליך מאוחסן יכול לבצע את הפעולות הבאות:

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

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

יש גם תמיכה בתהליכים מאוחסנים ב-Spark ב-BigQuery. יש מכסות ומגבלות לגבי הפעולות האלה.

מידע נוסף על פרוצדורות מאוחסנות זמין במאמר פרוצדורות מאוחסנות ב-SQL.