יצירת נתונים מובנים באמצעות הפונקציה AI.GENERATE_TABLE
במאמר הזה מוסבר איך ליצור נתונים מובְנים באמצעות מודל Gemini, ואז לעצב את התשובה של המודל באמצעות סכימת SQL.
כדי לעשות את זה, מבצעים את המשימות הבאות:
- יצירת מודל מרוחק של BigQuery ML על כל אחד ממודלי Gemini שנמצאים בזמינות לכלל המשתמשים (GA) או בגרסת טרום-השקה.
- שימוש במודל עם הפונקציה
AI.GENERATE_TABLEכדי ליצור נתונים מובְנים על סמך נתונים מטבלאות רגילות.
התפקידים הנדרשים
כדי ליצור מודל מרוחק ולהשתמש בפונקציה AI.GENERATE_TABLE, אתם צריכים את התפקידים הבאים בניהול הזהויות והרשאות הגישה (IAM):
- יצירה ושימוש במערכי נתונים, בטבלאות ובמודלים של BigQuery: BigQuery Data Editor (
roles/bigquery.dataEditor) בפרויקט. יצירה, הקצאה ושימוש בחיבורים ל-BigQuery: BigQuery Connections Admin (
roles/bigquery.connectionsAdmin) בפרויקט.אם לא הגדרתם חיבור ברירת מחדל, תוכלו ליצור חיבור ולהגדיר אותו כחלק מהרצת ההצהרה
CREATE MODEL. כדי לעשות זאת, צריך להיות לכם תפקיד BigQuery Admin (roles/bigquery.admin) בפרויקט. מידע נוסף מופיע במאמר בנושא הגדרת חיבור ברירת המחדל.נותנים הרשאות לחשבון השירות של החיבור: אדמין IAM של הפרויקט (
roles/resourcemanager.projectIamAdmin) בפרויקט שמכיל את נקודת הקצה של Vertex AI. זהו הפרויקט הנוכחי של מודלים מרוחקים שיוצרים על ידי ציון שם המודל כנקודת קצה. זהו הפרויקט שמזוהה בכתובת ה-URL של מודלים מרוחקים שיוצרים על ידי ציון כתובת URL כנקודת קצה.יצירת משימות BigQuery: BigQuery Job User (
roles/bigquery.jobUser) בפרויקט.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות לביצוע המשימות שמתוארות במסמך הזה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
- יצירת מערך נתונים:
bigquery.datasets.create - יצירה, הקצאה ושימוש בחיבור:
bigquery.connections.* - מגדירים את ההרשאות לחשבון השירות:
resourcemanager.projects.getIamPolicyו-resourcemanager.projects.setIamPolicy - יצירת מודל והרצת הסקה:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateDatabigquery.models.updateMetadata
- שאילתת נתונים בטבלה:
bigquery.tables.getData
יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
יצירת מערך נתונים
יוצרים מערך נתונים ב-BigQuery שיכיל את המשאבים:
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, לוחצים על שם הפרויקט.
לוחצים על הצגת פעולות > יצירת מערך נתונים.
בדף Create dataset, מבצעים את הפעולות הבאות:
בשדה Dataset ID, מקלידים שם למערך הנתונים.
בשדה Location type, בוחרים באפשרות Region או Multi-region.
- אם בחרתם באפשרות אזור, בוחרים מיקום מהרשימה אזור.
- אם בחרתם באפשרות Multi-region, בוחרים באפשרות US או Europe מהרשימה Multi-region.
לוחצים על יצירת מערך נתונים.
BQ
יצירת חיבור
יוצרים חיבור למשאב בענן כדי שהמודל המרוחק יוכל להשתמש בו, ומקבלים את חשבון השירות של החיבור. יוצרים את החיבור באותו מיקום שבו נמצאת קבוצת הנתונים שיצרתם בשלב הקודם.
אם כבר הגדרתם חיבור ברירת מחדל או שיש לכם את תפקיד האדמין ב-BigQuery, אתם יכולים לדלג על השלב הזה.
בוחרים באחת מהאפשרויות הבאות:המסוף
עוברים לדף BigQuery.
בחלונית השמאלית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer מרחיבים את שם הפרויקט ואז לוחצים על Connections.
בדף Connections (חיבורים), לוחצים על Create connection (יצירת חיבור).
בקטע Connection type (סוג החיבור), בוחרים באפשרות Vertex AI remote models, remote functions, BigLake and Spanner (Cloud Resource) (מודלים מרוחקים של Vertex AI, פונקציות מרוחקות, BigLake ו-Spanner (משאב בענן)).
בשדה מזהה החיבור, מזינים שם לחיבור.
בקטע Location type, בוחרים מיקום לחיבור. החיבור צריך להיות ממוקם יחד עם המשאבים האחרים שלכם, כמו מערכי נתונים.
לוחצים על יצירת קישור.
לוחצים על מעבר לחיבור.
בחלונית Connection info (פרטי התחברות), מעתיקים את מזהה חשבון השירות כדי להשתמש בו בשלב מאוחר יותר.
BQ
בסביבת שורת פקודה, יוצרים חיבור:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
הפרמטר
--project_idמבטל את פרויקט ברירת המחדל.מחליפים את מה שכתוב בשדות הבאים:
-
REGION: אזור החיבור -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
CONNECTION_ID: מזהה לחיבור
כשיוצרים משאב חיבור, מערכת BigQuery יוצרת חשבון שירות ייחודי ומקשרת אותו לחיבור.
פתרון בעיות: אם מופיעה שגיאת החיבור הבאה, צריך לעדכן את Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
-
מאחזרים ומעתיקים את מזהה חשבון השירות כדי להשתמש בו בשלב מאוחר יותר:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
הפלט אמור להיראות כך:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Node.js
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
Terraform
משתמשים במשאב google_bigquery_connection.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
בדוגמה הבאה נוצר חיבור למשאב Cloud בשם my_cloud_resource_connection באזור US:
כדי להחיל את ההגדרות של 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.
מעניקים לחשבון השירות גישה
מקצים לחשבון השירות של החיבור את התפקיד Vertex AI User.
אם אתם מתכננים לציין את נקודת הקצה ככתובת URL כשאתם יוצרים את המודל המרוחק – למשל endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/gemini-2.5-flash' – העניקו את התפקיד הזה באותו פרויקט שציינתם בכתובת ה-URL.
אם אתם מתכננים לציין את נקודת הקצה באמצעות שם המודל כשאתם יוצרים את המודל המרוחק, למשל endpoint = 'gemini-2.5-flash', צריך להעניק את התפקיד הזה באותו פרויקט שבו אתם מתכננים ליצור את המודל המרוחק.
הקצאת התפקיד בפרויקט אחר מובילה לשגיאה bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.
כדי להקצות את התפקיד, בצע את השלבים הבאים:
המסוף
עוברים לדף IAM & Admin.
לוחצים על הוספה.
תיבת הדו-שיח Add principals נפתחת.
בשדה New principals, מזינים את מזהה חשבון השירות שהעתקתם קודם.
בשדה Select a role (בחירת תפקיד), בוחרים באפשרות Vertex AI ואז באפשרות Vertex AI User (משתמש Vertex AI).
לוחצים על Save.
gcloud
משתמשים בפקודה gcloud projects add-iam-policy-binding.
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_NUMBER: מספר הפרויקט -
MEMBER: המזהה של חשבון השירות שהעתקתם קודם
יצירת מודל מרוחק של BigQuery ML
במסוף Google Cloud , עוברים לדף BigQuery.
באמצעות עורך ה-SQL, יוצרים מודל מרוחק:
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`} OPTIONS (ENDPOINT = 'ENDPOINT');
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט -
DATASET_ID: המזהה של מערך הנתונים שאמור להכיל את המודל. מערך הנתונים הזה צריך להיות באותו מיקום כמו החיבור שבו אתם משתמשים. -
MODEL_NAME: שם המודל -
REGION: האזור שבו נעשה שימוש בחיבור -
CONNECTION_ID: המזהה של החיבור ל-BigQueryכשמציגים את פרטי החיבור במסוף Google Cloud , זה הערך בקטע האחרון של מזהה החיבור המלא שמוצג במזהה החיבור, לדוגמה
projects/myproject/locations/connection_location/connections/myconnection -
ENDPOINT: השם של מודל Gemini שבו רוצים להשתמש. כדי לשפר את הזמינות, אפשר לציין את נקודת הקצה הגלובלית של מודלים נתמכים של Gemini. מידע נוסף זמין במאמרENDPOINT.
-
יצירת נתונים מובְנים
יצירת נתונים מובְנים באמצעות הפונקציה AI.GENERATE_TABLE עם מודל מרוחק, ושימוש בנתוני הנחיה מעמודה בטבלה:
SELECT * FROM AI.GENERATE_TABLE( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, [TABLE `PROJECT_ID.DATASET_ID.TABLE_NAME` / (PROMPT_QUERY)], STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, STOP_SEQUENCES AS stop_sequences, SAFETY_SETTINGS AS safety_settings, OUTPUT_SCHEMA AS output_schema) );
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט.-
DATASET_ID: המזהה של מערך הנתונים שמכיל את המודל. -
MODEL_NAME: שם המודל. -
TABLE_NAME: שם הטבלה שמכילה את ההנחיה. בטבלה הזו צריכה להיות עמודה בשםprompt, או שאפשר להשתמש בכינוי כדי להשתמש בעמודה עם שם אחר. -
PROMPT_QUERY: שאילתת GoogleSQL שמפיקה את נתוני ההנחיות. אפשר לשלוף את ערך ההנחיה מעמודה, או לציין אותו כערך struct עם מספר שרירותי של שדות משנה מסוג מחרוזת ושם עמודה. לדוגמה,SELECT ('Analyze the sentiment in ', feedback_column, 'using the following categories: positive, negative, neutral') AS prompt. -
TOKENS: ערךINT64שמגדיר את המספר המקסימלי של טוקנים שאפשר ליצור בתגובה. הערך חייב להיות בטווח[1,8192]. מציינים ערך נמוך יותר לתשובות קצרות וערך גבוה יותר לתשובות ארוכות. ערך ברירת המחדל הוא128. -
TEMPERATURE: ערךFLOAT64בטווח[0.0,2.0]ששולט במידת האקראיות בבחירת האסימון. ערך ברירת המחדל הוא1.0.ערכים נמוכים של
temperatureמתאימים להנחיות שדורשות תשובה יותר דטרמיניסטית ופחות פתוחה או יצירתית, ואילו ערכים גבוהים שלtemperatureיכולים להוביל לתוצאות יותר מגוונות או יצירתיות. ערך של0עבורtemperatureהוא דטרמיניסטי, כלומר תמיד נבחרת התשובה עם ההסתברות הכי גבוהה. -
TOP_P: ערךFLOAT64בטווח[0.0,1.0]עוזר לקבוע את ההסתברות של האסימונים שנבחרו. מציינים ערך נמוך יותר כדי לקבל תשובות פחות אקראיות, וערך גבוה יותר כדי לקבל תשובות יותר אקראיות. ערך ברירת המחדל הוא0.95. -
STOP_SEQUENCES: ערךARRAY<STRING>שמסיר את המחרוזות שצוינו אם הן נכללות בתשובות מהמודל. ההתאמה בין המחרוזות היא מדויקת, כולל אותיות רישיות. ערך ברירת המחדל הוא מערך ריק. -
SAFETY_SETTINGS: ערךARRAY<STRUCT<STRING AS category, STRING AS threshold>>שמגדיר את ערכי הסף של בטיחות התוכן לסינון התשובות. הרכיב הראשון במבנה מציין קטגוריה של נזק, והרכיב השני במבנה מציין סף חסימה תואם. המודל מסנן תוכן שמפר את ההגדרות האלה. אפשר לציין כל קטגוריה רק פעם אחת. לדוגמה, אי אפשר לציין גם אתSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)וגם אתSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold). אם אין הגדרת בטיחות לקטגוריה מסוימת, נעשה שימוש בהגדרת הבטיחותBLOCK_MEDIUM_AND_ABOVE.הקטגוריות הנתמכות הן:
HARM_CATEGORY_HATE_SPEECHHARM_CATEGORY_DANGEROUS_CONTENTHARM_CATEGORY_HARASSMENTHARM_CATEGORY_SEXUALLY_EXPLICIT
הערכים האפשריים:
BLOCK_NONE(מוגבל)BLOCK_LOW_AND_ABOVEBLOCK_MEDIUM_AND_ABOVE(ברירת מחדל)BLOCK_ONLY_HIGHHARM_BLOCK_THRESHOLD_UNSPECIFIED
מידע נוסף זמין במאמרים בנושא קטגוריות של נזק ואיך מגדירים מסנני תוכן.
-
OUTPUT_SCHEMA: ערךSTRINGשמציין את הפורמט של התגובה של המודל. הערך שלoutput_schemaחייב להיות הגדרה של סכימת SQL, בדומה לזו שמשמשת בהצהרתCREATE TABLE. יש תמיכה בסוגי הנתונים הבאים:INT64FLOAT64BOOLSTRINGARRAYSTRUCT
כשמשתמשים בארגומנט
output_schemaכדי ליצור נתונים מובְנים על סמך הנחיות מטבלה, חשוב להבין את נתוני ההנחיות כדי לציין סכימה מתאימה.לדוגמה, נניח שאתם מנתחים תוכן של ביקורות על סרטים מטבלה עם השדות הבאים:
- movie_id
- ביקורת
- הנחיה
אחר כך אפשר ליצור טקסט להנחיה על ידי הרצת שאילתה שדומה לזו שבהמשך:
UPDATE
mydataset.movie_reviewSET prompt = CONCAT('Extract the key words and key sentiment from the text below: ', review) WHERE review IS NOT NULL;אפשר לציין ערך
output_schemaדומה ל-"keywords ARRAY<STRING>, sentiment STRING" AS output_schema.
דוגמאות
בדוגמה הבאה מוצגת בקשה שבה נתוני ההנחיה נלקחים מטבלה, ומוצגת סכימת SQL לעיצוב התשובה של המודל:
SELECT * FROM AI.GENERATE_TABLE( MODEL `mydataset.gemini_model`, TABLE `mydataset.mytable`, STRUCT("keywords ARRAY<STRING>, sentiment STRING" AS output_schema));
בדוגמה הבאה מוצגת בקשה שמשתמשת בנתוני הנחיה משאילתה ומספקת סכימת SQL לעיצוב התשובה של המודל:
SELECT * FROM AI.GENERATE_TABLE( MODEL `mydataset.gemini_model`, ( SELECT 'John Smith is a 20-year old single man living at 1234 NW 45th St, Kirkland WA, 98033. He has two phone numbers 123-123-1234, and 234-234-2345. He is 200.5 pounds.' AS prompt ), STRUCT("address STRUCT<street_address STRING, city STRING, state STRING, zip_code STRING>, age INT64, is_married BOOL, name STRING, phone_number ARRAY<STRING>, weight_in_pounds FLOAT64" AS output_schema, 8192 AS max_output_tokens));