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

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

שגרות נתמכות

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

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

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

גורמים שצריך להביא בחשבון

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

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

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

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

משימה

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

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

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

פונקציית SQL או JavaScript UDAF

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

פונקציית UDF ב-Python

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

פונקציות UDAF

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

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

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

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

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

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

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

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

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

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

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

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

למידע נוסף על פונקציות מוגדרות על ידי המשתמש, עיינו במקורות המידע הבאים:

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

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

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

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

פונקציות צבירה בהתאמה אישית (UDAF)

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

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

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

פונקציות UDAFs ב-SQL

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

פונקציות UDAF ב-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 או במפתחות הצפנה בניהול הלקוח (CMEK).
  • ל-UDAFs יש את אותן מגבלות כמו ל-UDFs, ועוד כמה מגבלות.
  • ל-UDF ול-UDAF יש את אותן מכסות ומגבלות.

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

מאפיין

UDFs

UDAFs

הגדרה

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

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

השפות שנתמכות

‫SQL,‏ Javascript ו-Python

‫SQL ו-JavaScript

התמדה

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

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

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

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

רק לפונקציות UDF ב-JavaScript יש מפרט דטרמיניזם, שנותן רמז ל-BigQuery אם אפשר לשמור את תוצאת השאילתה במטמון.

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

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

Usage

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

שימוש בתרחישים עם סוכני AI

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