1. מבוא
אתם אוהבים לקרוא ספרים אבל מתקשים לבחור מתוך המגוון הרחב? תארו לעצמכם אפליקציה מבוססת-AI שממליצה על הספר המושלם בשבילכם, ומציעה גם סיכום תמציתי לפי הז'אנר שבחרתם, כדי שתוכלו להתרשם מהספר. בסדנת הקוד הזו, אראה לכם איך לבנות אפליקציה כזו באמצעות BigQuery, Gemini ו-Cloud Functions שמבוסס על Gemini.
סקירה כללית של הפרויקט
מקרה השימוש שלנו מתמקד ב-4 הרכיבים העיקריים האלה:
- מסד נתונים של ספרים: מערך הנתונים הציבורי העצום של ספרים בארכיון האינטרנט ב-BigQuery ישמש כקטלוג מקיף של ספרים.
- מנוע סיכום מבוסס-AI: Cloud Functions של Google Cloud, שמצוידות במודל השפה Gemini 1.0 Pro, ייצרו סיכומים מועילים בהתאם לבקשות המשתמשים.
- שילוב עם BigQuery: פונקציה מרוחקת ב-BigQuery שקוראת לפונקציה של Cloud Functions שלנו כדי לספק סיכומים ונושאים של ספרים על פי דרישה.
- ממשק משתמש: אפליקציית אינטרנט שמתארחת ב-Cloud Run ומציעה למשתמשים אפליקציית אינטרנט לצפייה בתוצאות.
נחלק את ההטמעה ל-3 סדנאות קוד:
Codelab 1: שימוש ב-Gemini כדי ליצור פונקציה של Cloud Functions ב-Java לאפליקציית Gemini.
Codelab 2: שימוש ב-Gemini ליצירת אפליקציות SQL באמצעות BigQuery ו-AI גנרטיבי.
Codelab 3: שימוש ב-Gemini ליצירת אפליקציית אינטרנט Java Spring Boot שמבצעת אינטראקציה עם BigQuery.
2. שימוש ב-Gemini לפיתוח אפליקציות SQL באמצעות BigQuery ו-AI גנרטיבי
מה תפַתחו
תצרו
- מודל מרוחק ב-BigQuery שמפעיל את נקודת הקצה text-bison-32k של Vertex AI כדי לזהות את הז'אנר (או הנושא) של הספר מתוך רשימה של מילות מפתח מופרדות ב-";" בטבלה.
- פונקציה מרוחקת ב-BigQuery שתפעיל מרחוק את פונקציית ה-AI הגנרטיבי ב-Cloud Functions שנפרסה.
- משתמשים במודל ובפונקציה המרוחקים כדי לסכם את הנושא והטקסט של ספר באמצעות שאילתות SQL, וכותבים את התוצאות לטבלה חדשה במערך הנתונים של מדף הספרים.
- תיישמו את השלבים האלה בעזרת Gemini
3. דרישות
- דפדפן, כמו Chrome או Firefox
- פרויקט ב-Google Cloud שהחיוב בו מופעל
- מומלץ לפרוס את Cloud Function כחלק מהחלק הראשון של ה-codelab שימוש ב-Gemini ליצירת Cloud Function ב-Java לאפליקציית Gemini.
- בתנאי: אם יש לכם גישה לקישור לקרדיטים בחינם ב-Google Cloud (יכול להיות שמארגני הסדנה הקצו לכם קרדיטים), עליכם לפעול לפי ההוראות שבהמשך הדף כדי להשלים את השלבים הפעלת הקרדיטים ויצירת הפרויקט לפני שתמשיכו. אם אין לכם את הקישור הזה, צריך לבצע את השלבים הבאים בנוגע לפרויקט ולחיוב:
יצירת הפרויקט
אם כבר הפעלתם חשבון לחיוב ויצרתם פרויקט באמצעות הקישור שצוין בשלב המותנה שלמעלה, אתם יכולים לדלג על השלבים הבאים.
- ב-מסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים או יוצרים פרויקט ב-Google Cloud.
- מוודאים שהחיוב מופעל בפרויקט ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
הפעלת Cloud Shell
- תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud וכוללת את bq שנטען מראש:
בפינה הימנית העליונה של Cloud Console, לוחצים על 'הפעלת Cloud Shell': 
- אחרי שמתחברים ל-Cloud Shell, אמור להופיע אימות שכבר בוצע ושהפרויקט כבר הוגדר לפי מזהה הפרויקט. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שעברתם אימות:
gcloud auth list
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט.
gcloud config list project
- אם הפרויקט לא מוגדר, משתמשים בפקודה הבאה כדי להגדיר אותו:
gcloud config set project <YOUR_PROJECT_ID>
אפשר לעיין במאמרי העזרה בנושא פקודות gcloud ושימוש בהן.
4. הפעלת Gemini for Google Cloud וממשקי ה-API הנדרשים
הפעלת Gemini
- כדי להפעיל את ה-API, עוברים אל Gemini for Google Cloud Marketplace. אפשר גם להשתמש בפקודה הבאה:
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- נכנסים לדף Gemini ולוחצים על 'התחלת שיחה'.
הפעלה של ממשקי API נדרשים אחרים
איך עושים את זה? יש לך שאלה ל-Gemini? אבל לפני כן, חשוב לזכור:
הערה: מודלים של שפה גדולה הם לא דטרמיניסטיים. לכן, כשאתם מנסים את ההנחיות האלה, יכול להיות שהתשובה שתקבלו תיראה שונה מהתשובות בצילום המסך שלי.
כדי לעבור למסוף של Gemini, לוחצים על הסמל 'פתיחת Gemini' בפינה השמאלית העליונה, ליד סרגל החיפוש במסוף Google Cloud.
מקלידים את השאלה הבאה בקטע "כאן כותבים הנחיה":
איך מפעילים את ממשקי ה-API של BigQuery ו-Vertex AI באמצעות פקודת gcloud?
התגובה שמתקבלת נראית כמו בתמונה הבאה:

מעתיקים את הפקודה (אפשר להשתמש בסמל ההעתקה בחלק העליון של קטע הפקודה) ומפעילים פתרונות חכמים בטרמינל של Cloud Shell כדי להפעיל את השירותים הרלוונטיים:
- bigquery.googleapis.com
- aiplatform.googleapis.com
5. התנסות במערך נתונים ציבורי של BigQuery עם נתוני ספרים
כדאי להתחיל בהיכרות עם מערך הנתונים הציבורי של BigQuery, שמכיל מידע על ספרים רבים בארכיון האינטרנט.
אפשר למצוא את מערך הנתונים הציבורי הזה בחלונית הסייר של BigQuery. אפשר לראות את זה בצד ימין כשנכנסים אל BigQuery Console.

מקלידים 'gdelt-bq' או 'internetarchivebooks' בסרגל החיפוש ולוחצים על 'חיפוש בכל הפרויקטים'. מרחיבים את התוצאה ומסמנים בכוכב ספרים מארכיון האינטרנט, כמו שמוצג בתמונה שלמטה:
.
מרחיבים את מערך הנתונים, לוחצים על gdelt-bq.internetarchivebooks ואז על תצוגה מקדימה של הנתונים בטבלה 1920. הטבלה הזו כוללת ספרים משנת 1920 שנמצאים בארכיון.
כדי לראות את הסכימה שבה נשתמש בקטעים הבאים, מריצים את השאילתה הבאה:
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
אנחנו נשתמש בשלושת השדות הבאים ב-Codelab שלנו:
- BookMeta_Title (title)
- נושאים (הנושאים מופרדים באמצעות ';')
- BookMeta_FullText (הטקסט המלא של הספר)
6. יוצרים מערך נתונים חדש ב-BigQuery בשם bookshelf
אנחנו רוצים ליצור מערך נתונים בפרויקט כדי לאחסן את כל האובייקטים של מסד הנתונים והניתוח שאנחנו הולכים ליצור בסדנה הזו. נבקש מ-Gemini להסביר איך ליצור מערך נתונים ב-BigQuery. בשלב של הפעלת ה-API, כבר פתחתם את הצ'אט עם Gemini בכרטיסייה אחרת בדפדפן. אם לא, אפשר לעשות זאת עכשיו. נכנסים אל מסוף Google Cloud בכתובת https://console.cloud.google.com. סמל Gemini אמור להופיע מימין לסרגל החיפוש בחלק העליון. לוחצים על הסמל והצ'אט ייפתח.

מזינים את ההנחיה כמו שמוצג למטה.
זו ההנחיה שלי:
How to create a BigQuery dataset?
זו התשובה:

נפעל לפי השלבים שמפורטים בתשובה כדי ליצור מערך נתונים בשם bookshelf בפרויקט הפעיל.
כדי ליצור מערך נתונים ב-BigQuery:
- נכנסים לדף BigQuery במסוף Google Cloud.
- בחלונית Explorer, לוחצים על מזהה הפרויקט.
- לוחצים על Create dataset (יצירת מערך נתונים) (האפשרות הזו אמורה להופיע ברשימת האפשרויות כשלוחצים על סמל 3 הנקודות לצד מזהה הפרויקט).
- מזינים את שם קבוצת הנתונים כ-bookshelf.
- מגדירים את המיקום כ-"US(Multi-region)" (ארה"ב (מספר אזורים)).
- בשלבים 3, 4, 5 ו-6 מהתגובה, משאירים את אפשרויות ברירת המחדל.
- לוחצים על CREATE DATASET (יצירת מערך נתונים).
מערך הנתונים ייצור ויופיע בחלונית Explorer. אפשר לראות את מערך הנתונים bookshelf באופן הבא:
7. יצירת מודל מרוחק להפעלת Vertex AI LLM (text-bison-32k)
בשלב הבא, צריך ליצור מודל ב-BigQuery שמפעיל את מודל Vertex AI text-bison-32k. המודל יעזור לזהות נושא משותף, הקשר לספר, מתוך רשימת מילות המפתח של כל ספר במערך הנתונים.
יש לך שאלה ל-Gemini? כדי לעשות זאת, עוברים לכרטיסייה שבה פתוח מסוף Gemini Chat ומקלידים את ההנחיה הבאה:
איך תקשרו בין BigQuery ל-Vertex AI כדי להפעיל את נקודת הקצה של מודל שפה גדול (text-bison-32k) ב-BigQuery?
התגובה היא:

התשובה כוללת מידע מדויק, כמו השלבים שכוללים שימוש בהצהרת CREATE MODEL, שימוש בחיבור BigQuery והגדרת נקודת הקצה. השאילתה מדויקת מבחינתי, אבל זה לא אומר שתקבלו את אותה התוצאה בדיוק, כי מדובר במודל שפה גדול, ולכן יכול להיות שתקבלו תשובות בפורמט, בנפח ובעומק שונים. אם לא מוצגים לך כל הפרטים שקיבלתי, אפשר לשאול שאלות נוספות בצ'אט. לדוגמה: תן פרטים נוספים על אופן יצירת משאב החיבור או על הסיבה לכך שמאפיין החיבור חסר או איך מתחברים מ-BigQuery ל-Vertex AI וכו'.
הנה דוגמה להנחיה למעקב (משתמשים בה רק אם צריך מעקב. אם התגובה הראשונה שקיבלתם מספיקה, אפשר להמשיך איתה):
What about the connection? How will I connect from BigQuery to Vertex AI?
זו התשובה:

נפעל לפי השלבים שמופיעים בתשובה כדי ליצור חיבור ל-BigQuery:
- עוברים למסוף BigQuery.
- בחלונית BigQuery Explorer, לוחצים על הלחצן '+הוספה' ואז על 'חיבורים למקורות נתונים חיצוניים'.
- בשלב הזה, תתבקשו להפעיל את BigQuery Connection API. לוחצים על ENABLE API (הפעלת API):

- לוחצים על 'חיבורים למקורות נתונים חיצוניים' ורואים את השקף 'מקור נתונים חיצוני' כמו בתמונה שלמטה . ברשימת המקורות החיצוניים, בוחרים במקור Vertex AI.

- מקלידים מזהה חיבור (אפשר לבחור מזהה כלשהו, אבל בשלב הזה צריך להגדיר אותו כ-bq-vx) ואת האזור (אזור רב-אזורי US).
- לוחצים על 'יצירת חיבור'.

- אחרי שיוצרים את החיבור, לוחצים על 'מעבר לחיבור'.
- בדף פרטי החיבור, מעתיקים את מזהה חשבון השירות כי נשתמש בו בשלבים הבאים.
- עכשיו, אחרי שיצרנו את החיבור, נצטרך להקצות הרשאות למזהה חשבון השירות שהעתקנו כדי שנוכל להשתמש ב-Vertex AI.
- מהדף של מסוף Google Cloud, פותחים את Google Cloud IAM או עוברים לקישור.
- בקטע View by Principals, לוחצים על Grant Access.

- בתיבת הדו-שיח Grant Access (הענקת גישה), מזינים את מזהה חשבון השירות שרשמנו קודם בתיבת הטקסט New principles (חשבונות משתמש חדשים).
- מגדירים את התפקיד כ-Vertex AI User (משתמש ב-Vertex AI).

החיבור הנדרש נוצר. ההרשאה הנדרשת ניתנת לחשבון המשתמש (חשבון השירות של החיבור) כדי להשתמש ב-Vertex AI מ-BigQuery.
מריצים את ההצהרה הבאה של DDL(שפת הגדרת נתונים) שמייצגת את היצירה של אובייקט DB, במקרה הזה, MODEL בעורך השאילתות של BigQuery.
CREATE OR REPLACE MODEL bookshelf.llm_model
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (ENDPOINT = 'text-bison-32k');
כחלופה לשלב שלמעלה, אתם יכולים לבקש מ-Gemini להציע שאילתה ליצירת המודל להפעלת המודל text-bison-32k.
הערה: אם השתמשתם בשם אחר לחיבור, צריך להחליף את השם " us.bq-vx" בשם הזה בהצהרת ה-DDL הקודמת. השאילתה הזו יוצרת את המודל המרוחק בקבוצת הנתונים bookshelf שיצרנו קודם.
8. יצירת פונקציה מרחוק שמפעילה את פונקציית Java Cloud Functions
עכשיו ניצור פונקציה מרוחקת ב-BigQuery באמצעות פונקציה של Cloud Functions ב-Java שיצרנו ב-Codelab 1 בסדרה הזו, כדי להטמיע את מודל Gemini. הפונקציה המרוחקת הזו תשמש לסיכום תוכן הספר.
הערה: אם פספסתם את Codelab הזה או שלא פרסתם את פונקציה של Cloud Functions הזו, אתם יכולים לדלג על השלב הזה ולעבור לנושא הבא (סיכום הנושא של הספרים באמצעות המודל המרוחק).
עוברים אל מסוף BigQuery ומדביקים את הצהרת ה-DDL הבאה בעורך השאילתות (אפשר ליצור כרטיסייה חדשה בעורך השאילתות על ידי לחיצה על הלחצן +)

בהמשך מופיע ה-DDL שאפשר להעתיק. חשוב להחליף את נקודת הקצה בנקודת הקצה של פונקציה של Cloud Functions שפרסתם (שנוצרה מתוך Codelab 1). אם אין לכם נקודת קצה, אתם יכולים להחליף את התווים המוסתרים ב-DDL שלמטה ב-abis-345004 למטרות הדגמה.
CREATE OR REPLACE FUNCTION
`bookshelf.GEMINI_REMOTE_CALL` (context STRING) RETURNS STRING
REMOTE WITH CONNECTION `us.bq-vx`
OPTIONS (
endpoint = 'https://us-central1-****-******.cloudfunctions.net/remote-gemini-call' );
עוברים למסוף BigQuery ב-Google Cloud Platform ופותחים כרטיסייה חדשה ב'עורך השאילתות'. בעורך השאילתות של BigQuery, מדביקים את הצהרת ה-DDL שלמעלה. אחרי שמריצים את השאילתה, מקבלים את התגובה הבאה:

עכשיו, אחרי שיצרנו את המודל והפונקציה, נבדוק את שני האובייקטים האלה ב-BigQuery על ידי הרצתם בשאילתת SELECT.
9. סיכום נושאים באמצעות המודל המרוחק
נשתמש במודל המרוחק שיצרנו, bookshelf.llm_model, כדי ליצור מילת מפתח מאוחדת לספר מתוך רשימת הנושאים שצוינה:
SELECT * FROM ML.GENERATE_TEXT(MODEL `bookshelf.llm_model`,
(
SELECT
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` LIMIT 1
));
שלב אופציונלי: התוצאה של שדה התוצאה שנוצר על ידי LLM היא תוצאה מקוננת. בואו נוסיף לשאילתה כמה פרמטרים של LLM ואת המאפיין flatten_json_output. השימוש במאפיין flatten_json_output עוזר להסיר את המבנה המקונן משדה התוצאה שנוצר על ידי ה-LLM.
SELECT * FROM ML.GENERATE_TEXT ( MODEL `bookshelf.llm_model`, (
SELECT CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt FROM `gdelt-bq.internetarchivebooks.1920` limit 1),
STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
עכשיו מריצים את שאילתת ה-SELECT בעורך של BigQuery ומאמתים את התוצאה. הגבלנו את תוצאת השאילתה ל-1 לצורך בדיקה. התוצאה מוצגת כך:

10. סיכום הטקסט המלא של ספרים באמצעות הפונקציה המרוחקת
עכשיו ננסה לסכם את הספר על ידי הפעלת פונקציה של Cloud Functions bookshelf.GEMINI_REMOTE_CALL שיצרנו קודם.
הערה: אם דילגתם על יצירת הפונקציה המרוחקת (בנושא הקודם ב-codelab הזה), אל תשכחו לדלג גם על ה בקשה להפעלת פונקציה bookshelf.GEMINI_REMOTE_CALL בשאילתת ה-SELECT.
משתמשים בשאילתת SELECT שמפעילה את הפונקציה המרוחקת (GEMINI_REMOTE_CALL) שיצרנו קודם. הקריאה לפונקציה הזו, GEMINI_REMOTE_CALL, כוללת הנחיה שמבקשת סיכום של טקסט הספר:
select BookMeta_Title, `bookshelf.GEMINI_REMOTE_CALL` (
CONCAT('This is about a book. The title of the book is this: ', BookMeta_Title, ' . The theme of the book is as follows: ', Themes, 'The following text contains an excerpt from the book. Summarize it in less than 5 lines to create the gist. If you do not have a summary, use the title and themes to make up a short summary. DO NOT RETURN EMPTY RESPONSE. ', SUBSTR(BookMeta_FullText, 5000, 10000))) Summary
from `gdelt-bq.internetarchivebooks.1920` where Themes like '%EDUCATION%' limit 1;
שימו לב: כדי ליצור את הסיכום, השתמשנו במחרוזת משנה של הטקסט המלא של הספר.
תוצאת השאילתה היא:

11. אחסון נתוני ספרים בטבלה
אחרי שבדקנו את הקריאות למודל LLM (מודל ופונקציה מרוחקים) מ-BigQuery באמצעות שאילתות SQL בלבד, ניצור טבלה ב-BigQuery לאחסון נתוני 'מדף הספרים' עם תובנות לגבי הנושא, באותו מערך נתונים כמו המודל והפונקציה המרוחקים.
בשלב הזה אפשר לכלול גם את הקריאה למודל LLM וגם את הבקשה להפעלת פונקציה מרוחקת. אבל מכיוון שסימנו את בקשה להפעלת פונקציה המרוחקת (שמפעילה את פונקציה של Cloud Functions) כשלב אופציונלי, נשתמש רק בתובנות מהמודל המרוחק.
זו השאילתה שבה נשתמש:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
כשמריצים את השאילתה בעורך BigQuery, התוצאה היא:

עכשיו נבקש מ-Gemini ליצור טבלה בשם bookshelf.books מהשאילתה שלמעלה. עוברים אל מסוף הצ'אט של Gemini ב-מסוף Google Cloud ומזינים את ההנחיה הבאה.
זו ההנחיה שבה נשתמש:
Create a BigQuery table named bookshelf.books from this SELECT query:
SELECT
BookMeta_Title, Themes, ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920` limit 5),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output));
התשובה של Gemini Chat היא:

הנה השאילתה, למקרה שתרצה להעתיק אותה ישירות מכאן:
CREATE TABLE bookshelf.books (
BookMeta_Title STRING,
Themes STRING,
ml_generate_text_llm_result STRING
) AS (
SELECT
BookMeta_Title,
Themes,
ml_generate_text_llm_result Context
FROM
ML.GENERATE_TEXT (
MODEL `bookshelf.llm_model`,
(
SELECT
BookMeta_Title,
Themes,
BookMeta_FullText,
CONCAT('Read all the words in the following text separated by ";" and come up with one single (most relating) theme that is applicable : ', Themes, '. Take the title of the book from the following value', BookMeta_Title, '. Return a meaningful and concise theme with one or two words, not more than that. If a theme is not possible, return a context from its title. But DO NOT return empty or null. ') AS prompt
FROM `gdelt-bq.internetarchivebooks.1920`
LIMIT 5
),
STRUCT(
0.2 AS temperature,
100 AS max_output_tokens,
TRUE AS flatten_json_output
)
)
);
אחרי שמריצים את השאילתה בעורך BigQuery, התוצאה היא:

זהו! עכשיו אפשר להריץ שאילתה על הטבלה ולשחק עם הנתונים כדי לקבל תובנות נוספות.
12. מזל טוב
מעולה! השלמנו את הפעולות הבאות, והשתמשנו ב-Gemini בחלק מהשלבים בתהליך:
- יצרתם מודל מרוחק ב-BigQuery שמפעיל את נקודת הקצה text-bison-32k של Vertex AI כדי לזהות את הז'אנר (או הנושא) של הספר מתוך רשימה של מילות מפתח מופרדות באמצעות ';' בטבלה.
- יצרתם פונקציה מרוחקת ב-BigQuery שתפעיל מרחוק את פונקציית ה-Cloud Function של ה-AI הגנרטיבי שפרסתם. הפונקציה הזו מקבלת את ההנחיה כקלט ומחזירה מחרוזת שמסכמת את הספר ב-5 שורות.
- השתמשתם במודל ובפונקציה המרוחקים כדי לסכם את הנושא והטקסט של ספר באמצעות שאילתות SQL, ולכתוב את התוצאות לטבלה חדשה במערך הנתונים של מדף הספרים.
- כמטלה נוספת, נסו להשתמש ב-Gemini כדי לקבל את ה-SQL למחיקת האובייקטים שנוצרו ב-BigQuery. הפעולה הזו תכלול את שלב הניקוי.