עבודה עם פרוצדורות מאוחסנות ב-SQL
אתם יכולים להשתמש בפרוצדורות מאוחסנות של 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.
-
מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
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 לפני שם הפרמטר. מידע נוסף על מצב טיעון
אישור תרחישים
אתם יכולים לאשר פרוצדורות מאוחסנות כשגרות. שגרות מורשות מאפשרות לכם לשתף תוצאות של שאילתות עם משתמשים או קבוצות ספציפיים, בלי לתת גישה ישירה לטבלאות הבסיסיות. לדוגמה, שגרה יכולה לחשב צבירות או לחפש ערך בטבלה ולהשתמש בערך הזה בחישוב.
שגרות מורשות יכולות ליצור, למחוק ולשנות טבלאות, וגם להפעיל פרוצדורות מאוחסנות אחרות בטבלה הבסיסית.
מידע נוסף זמין במאמר Authorized routines.
קריאה לתהליך מאוחסן
כדי לקרוא לפרוצדורה מאוחסנת אחרי שהיא נוצרה, משתמשים בהצהרה CALL.
לדוגמה, ההצהרה הבאה מפעילה את הפרוצדורה המאוחסנת create_customer:
CALL mydataset.create_customer();
קריאה לפרוצדורת מערכת
כדי לקרוא לפרוצדורת מערכת מובנית, משתמשים בהצהרה CALL.
לדוגמה, ההצהרה הבאה קוראת לפרוצדורת המערכת BQ.REFRESH_MATERIALIZED_VIEW:
CALL BQ.REFRESH_MATERIALIZED_VIEW;