עבודה עם נהלים מאוחסנים של SQL
תהליך מאוחסן הוא אוסף של הצהרות שאפשר לקרוא להן משאילתות אחרות או מתהליכים מאוחסנים אחרים. פרוצדורה יכולה לקבל ארגומנטים של קלט ולהחזיר ערכים כפלט. נותנים שם לפרוצדורה ומאחסנים אותה במערך נתונים ב-BigQuery. משתמשים רבים יכולים לגשת לנתונים בכמה מערכי נתונים או לשנות אותם באמצעות פרוצדורה מאוחסנת. היא יכולה להכיל גם שאילתה עם כמה הצהרות.
חלק מהתהליכים המאוחסנים מוטמעים ב-BigQuery ואין צורך ליצור אותם. הן נקראות פרוצדורות מערכת, ואפשר לקרוא עליהן עוד בהפניה לפרוצדורות מערכת.
הפרוצדורות המאוחסנות תומכות בהצהרות של שפה פרוצדורלית, שמאפשרות לבצע פעולות כמו הגדרת משתנים והטמעה של זרימת בקרה. מידע נוסף על הצהרות בשפה פרוצדורלית זמין בהפניה לשפה פרוצדורלית.
יצירת תהליך מאוחסן
כדי ליצור פרוצדורה מאוחסנת, בוחרים אחת מהאפשרויות הבאות:
SQL
כדי ליצור פרוצדורה, משתמשים בהצהרה CREATE PROCEDURE.
בדוגמה הבאה, procedure_name מייצג את הפרוצדורה, והגוף של הפרוצדורה מופיע בין ההצהרות BEGIN ו-END:
CREATE PROCEDURE dataset_name.procedure_name()
BEGIN
-- statements here
END
בדוגמה הבאה מוצגת פרוצדורה שמכילה שאילתה עם כמה הצהרות.
השאילתה עם כמה הצהרות מגדירה משתנה, מריצה הצהרת INSERT ומציגה את התוצאה כמחרוזת טקסט מעוצבת.
CREATE OR REPLACE PROCEDURE mydataset.create_customer()
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id)
VALUES(id);
SELECT FORMAT("Created customer %s", id);
END
בדוגמה הקודמת, שם הפרוצדורה הוא mydataset.create_customer, והגוף של הפרוצדורה מופיע בין ההצהרות BEGIN ו-END.
כדי להפעיל את הפרוצדורה, משתמשים בהצהרה CALL:
CALL mydataset.create_customer();
Terraform
משתמשים במשאב google_bigquery_routine.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
בדוגמה הבאה נוצרת פרוצדורה מאוחסנת בשם my_stored_procedure:
כדי להחיל את ההגדרות של Terraform בפרויקט ב- Google Cloud , מבצעים את השלבים בקטעים הבאים.
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Google Cloud
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
-
יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת
.tf, למשלmain.tf. במדריך הזה, הקובץ נקראmain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.
מעתיקים את הקוד לדוגמה בקובץ
main.tfהחדש שיצרתם.לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
- בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
- שומרים את השינויים.
-
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: תוכלו לכלול את האפשרות
-upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:terraform init -upgrade
החלה של השינויים
-
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
-
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
- פותחים את Google Cloud הפרויקט כדי לראות את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
העברת ערך באמצעות פרמטר קלט
יכול להיות שלפרוצדורה יש פרמטרים של קלט. פרמטר קלט מאפשר קלט עבור פרוצדורה, אבל לא מאפשר פלט.
CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING)
BEGIN
DECLARE id STRING;
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END
העברת ערך החוצה באמצעות פרמטר פלט
לפרוצדורה יכולים להיות פרמטרים של פלט. פרמטר פלט מחזיר ערך מהפרוצדורה, אבל לא מאפשר קלט לפרוצדורה. כדי ליצור פרמטר פלט, משתמשים במילת המפתח OUT לפני שם הפרמטר.
לדוגמה, הגרסה הזו של הפרוצדורה מחזירה את מספר הלקוח החדש באמצעות הפרמטר id:
CREATE OR REPLACE PROCEDURE mydataset.create_customer(name STRING, OUT id STRING)
BEGIN
SET id = GENERATE_UUID();
INSERT INTO mydataset.customers (customer_id, name)
VALUES(id, name);
SELECT FORMAT("Created customer %s (%s)", id, name);
END
כדי להפעיל את הפרוצדורה הזו, צריך להשתמש במשתנה כדי לקבל את ערך הפלט:
--- Create a new customer record.
DECLARE id STRING;
CALL mydataset.create_customer("alice",id);
--- Display the record.
SELECT * FROM mydataset.customers
WHERE customer_id = id;
העברת ערך פנימה והחוצה באמצעות פרמטר קלט/פלט
לפרוצדורה יכולים להיות גם פרמטרים של קלט/פלט. פרמטר קלט/פלט מחזיר ערך מהפרוצדורה וגם מקבל קלט לפרוצדורה. כדי ליצור פרמטר קלט/פלט, משתמשים במילת המפתח INOUT לפני שם הפרמטר. מידע נוסף זמין במאמר בנושא מצב ארגומנט.
מתן הרשאה לתרחישים
אפשר להגדיר הרשאות לתהליכים מאוחסנים כתרחישים. בעזרת שגרות מורשות אפשר לשתף תוצאות של שאילתות עם משתמשים או קבוצות ספציפיים בלי לתת להם גישה לטבלאות הבסיסיות שמהן נוצרו התוצאות. לדוגמה, שגרה מורשית יכולה לחשב צבירה של נתונים או לחפש ערך בטבלה ולהשתמש בו בחישוב.
שגרות מורשות יכולות ליצור, להסיר ולשנות טבלאות, וגם להפעיל פרוצדורות מאוחסנות אחרות בטבלה הבסיסית.
מידע נוסף זמין במאמר בנושא שגרה מאושרת.
התקשרות לתהליך מאוחסן
כדי להפעיל פרוצדורה מאוחסנת אחרי שיוצרים אותה, משתמשים בהצהרה CALL.
לדוגמה, ההצהרה הבאה מפעילה את הפרוצדורה המאוחסנת create_customer:
CALL mydataset.create_customer();
הפעלת פרוצדורה של מערכת
כדי להתקשר לפרוצדורה מובנית של המערכת, משתמשים בהצהרה CALL.
לדוגמה, ההצהרה הבאה מפעילה את הפרוצדורה של המערכת BQ.REFRESH_MATERIALIZED_VIEW:
CALL BQ.REFRESH_MATERIALIZED_VIEW;