תחילת העבודה עם Spanner Data Boost ו-BigQuery

1. מבוא

ב-codelab הזה תלמדו איך להשתמש ב-Spanner Data Boost כדי לשלוח שאילתות על נתוני Spanner מ-BigQuery באמצעות שאילתות מאוחדות ללא ETL, בלי להשפיע על מסד הנתונים של Spanner.

f1de68f762a86cc7.png

‫Spanner Data Boost הוא שירות מנוהל במלואו וללא שרתים, שמספק משאבי מחשוב עצמאיים לעומסי עבודה נתמכים ב-Spanner. ‫Data Boost מאפשר לכם להריץ שאילתות ניתוח ולייצא נתונים כמעט ללא השפעה על עומסי העבודה הקיימים במופע Spanner שהוקצה, באמצעות מודל שימוש על פי דרישה ללא שרת.

בשילוב עם חיבורים חיצוניים של BigQuery, Data Boost מאפשר לכם לבצע בקלות שאילתות על נתונים מ-Spanner בפלטפורמה לניתוח נתונים, בלי להשתמש בתהליך מורכב של העברת נתונים מסוג ETL.

דרישות מוקדמות

  • הבנה בסיסית של Google Cloud Console
  • מיומנויות בסיסיות בממשק שורת הפקודה וב-Google Shell

מה תלמדו

  • איך פורסים מכונת Spanner
  • איך טוענים נתונים כדי ליצור מסד נתונים ב-Spanner
  • איך ניגשים לנתוני Spanner מ-BigQuery בלי Data Boost
  • איך ניגשים לנתוני Spanner מ-BigQuery באמצעות Data Boost

הדרישות

  • חשבון Google Cloud ופרויקט Google Cloud
  • דפדפן אינטרנט כמו Chrome

2. הגדרה ודרישות

הגדרת סביבה בקצב עצמי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות כתובת משלכם ולבדוק אם היא זמינה. אי אפשר לשנות את הערך הזה אחרי השלב הזה, והוא יישאר כזה למשך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של Cloud. השלמת ה-codelab הזה לא תעלה לכם הרבה, אם בכלל. כדי להשבית את המשאבים ולמנוע חיובים נוספים אחרי שתסיימו את המדריך הזה, תוכלו למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

הפעלת Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-מסוף Google Cloud, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את כל העבודה ב-codelab הזה בדפדפן. לא צריך להתקין שום דבר.

3. יצירת מכונה ומסד נתונים ב-Spanner

הפעלת Spanner API

ב-Cloud Shell, מוודאים שמזהה הפרויקט מוגדר:

gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)

מגדירים את אזור ברירת המחדל ל-us-central1. אפשר לשנות את האזור הזה לאזור אחר שנתמך על ידי Spanner הגדרות אזוריות.

gcloud config set compute/region us-central1

מפעילים את Spanner API:

gcloud services enable spanner.googleapis.com

יצירת מכונת Spanner

בשלב הזה מגדירים את מופע Spanner עבור ה-codelab. כדי לעשות זאת, פותחים את Cloud Shell ומריצים את הפקודה הבאה:

export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1

פלט הפקודה:

$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.  

יצירת מסד הנתונים

אחרי שהמופע פועל, אפשר ליצור את מסד הנתונים. ב-Spanner אפשר ליצור כמה מסדי נתונים במופע אחד.

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

כדי ליצור את מסד הנתונים, משתמשים שוב בכלי שורת הפקודה של gcloud:

export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

פלט הפקודה:

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

4. טען נתונים

כדי להשתמש ב-Data Boost, צריך שיהיו נתונים במסד הנתונים. כדי לעשות את זה, צריך ליצור קטגוריה של Cloud Storage, להעלות אליה ייבוא של avro ולהתחיל משימת ייבוא של Dataflow כדי לטעון את נתוני ה-Avro ל-Spanner.

הפעלת ממשקי ה-API

כדי לעשות זאת, פותחים את שורת הפקודה של Cloud Shell אם הקודמת נסגרה.

חשוב לוודא שהפעלתם את ממשקי ה-API של Compute,‏ Cloud Storage ו-Dataflow.

gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com

הפלט הצפוי במסוף:

$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.

העלאת קובצי ייבוא ל-Cloud Storage

עכשיו יוצרים את הקטגוריה לאחסון קובצי ה-Avro:

export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET

הפלט הצפוי במסוף:

$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...

בשלב הבא, מורידים את קובץ ה-tar מ-github ומחלצים אותו.

wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz 

הפלט הצפוי במסוף:

$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz 
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001

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

gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive

הפלט הצפוי במסוף:

$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json           
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
  Completed files 13/13 | 54.6MiB/54.6MiB                                                                                               

Average throughput: 46.4MiB/s

ייבוא נתונים

אחרי שהקבצים נמצאים ב-Cloud Storage, אפשר להפעיל משימת ייבוא של Dataflow כדי לטעון את הנתונים ל-Spanner.

gcloud dataflow jobs run import_chatdb \
    --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
    --region us-central1 \
    --staging-location gs://$GCS_BUCKET/tmp \
    --parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db

הפלט הצפוי במסוף:

$ gcloud dataflow jobs run import_chatdb \
>     --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
>     --region us-central1 \
>     --staging-location gs://$GCS_BUCKET/tmp \
>     --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH

אפשר לבדוק את הסטטוס של משימת הייבוא באמצעות הפקודה הזו.

gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1

הפלט הצפוי במסוף:

$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID                                   NAME           TYPE   CREATION_TIME        STATE    REGION
*snip*                                  import_chatdb  Batch  2024-04-*snip*  Done  us-central1

אימות הנתונים ב-Spanner

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

cd1cf38efd2b974a.png

עכשיו מריצים את השאילתה הבאה כדי לוודא שהנתונים זמינים:

SELECT COUNT(*) FROM topics;

הפלט אמור להיראות כך:

89e5d92fbe71c022.png

5. קריאת נתונים מ-BigQuery

עכשיו כשהנתונים נמצאים ב-Spanner, הגיע הזמן לגשת אליהם מתוך BigQuery. כדי לעשות את זה, תגדירו חיבור חיצוני ל-Spanner ב-BigQuery.

אם יש לכם את ההרשאות המתאימות, תוכלו ליצור חיבור חיצוני ל-Spanner באמצעות השלבים הבאים.

לוחצים על הלחצן 'הוספה' בחלק העליון של מסוף BigQuery ובוחרים באפשרות 'חיבורים למקורות נתונים חיצוניים'.

580a0d237f11a9c5.png

75968de398fabf7e.png

עכשיו אפשר להריץ שאילתה כדי לקרוא נתונים מ-Spanner. מריצים את השאילתה הזו במסוף BigQuery, ומוודאים להחליף את הערך של ${PROJECT_ID} בערך שלכם:

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

פלט לדוגמה:

e47265487c3e39bd.png

בכרטיסייה 'פרטי המשימה' אפשר לראות מידע על המשימה, כמו משך ההפעלה וכמות הנתונים שעברו עיבוד.

9ae40b0aa8c4891.png

בשלב הבא, תוסיפו חיבור של Data Boost ל-Spanner ותשוו את התוצאות.

6. קריאת נתונים באמצעות Data Boost

כדי להשתמש ב-Spanner Data Boost, צריך ליצור חיבור חיצוני חדש מ-BigQuery ל-Spanner. לוחצים על'הוספה' במסוף BigQuery ובוחרים שוב באפשרות Connections from external data sources.

ממלאים את הפרטים עם אותו URI של חיבור ל-Spanner. משנים את 'מזהה החיבור' ומסמנים את התיבה 'שימוש בהגדלת נפח הנתונים'.

8e2205255b56a279.png

אחרי שיוצרים את החיבור ל-Data Boost, אפשר להריץ את אותה שאילתה אבל עם שם החיבור החדש. שוב, מחליפים את project_id בשאילתה.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

אמורה להתקבל אותה קבוצת תוצאות כמו קודם. האם התזמון השתנה?

7. הסבר על Data Boost

‫Spanner Data Boost מאפשר לכם להשתמש במשאבים שלא קשורים למשאבי מופע Spanner. השינוי הזה מפחית בעיקר את ההשפעה של עומסי העבודה האנליטיים על עומסי העבודה התפעוליים.

אפשר לראות את זה אם מריצים את השאילתה כמה פעמים במשך שתיים או שלוש דקות כדי לא להשתמש ב-Data Boost. חשוב לזכור להחליף את ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

לאחר מכן, ממתינים עוד כמה דקות ומריצים את השאילתה כדי להשתמש ב-Data Boost עוד כמה פעמים. חשוב לזכור להחליף את ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

עכשיו חוזרים אל Spanner Studio ב-Cloud Console ועוברים אל System Insights.

c1dc67fcc7a2a71.png

כאן אפשר לראות את מדדי המעבד. השאילתות שמופעלות בלי Data Boost משתמשות במעבד (CPU) לפעולות 'executesql_select_withpartitiontoken'. למרות שהשאילתה זהה, הביצוע של Data Boost לא מופיע בשימוש במעבד של המופע.

a86a7508b6738904.png

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

אתם יכולים להתנסות עם השאילתות ועומסי העבודה ולראות איך Data Boost פועל. בסיום, עוברים לקטע הבא כדי לנקות את הסביבה.

8. ניקוי הסביבה

אם יצרתם את הפרויקט במיוחד בשביל ה-Codelab הזה, אתם יכולים פשוט למחוק את הפרויקט כדי לנקות אותו. אם אתם רוצים לשמור את הפרויקט ולנקות את הרכיבים שלו, אתם יכולים להמשיך לשלבים הבאים.

הסרת חיבורים ל-BigQuery

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

c9348832bcf202a9.png

מחיקת קטגוריה של Cloud Storage

gcloud storage rm --recursive gs://$GCS_BUCKET

מחיקת מכונת Spanner

כדי לנקות, פשוט נכנסים אל הקטע Cloud Spanner ב-Cloud Console ומוחקים את מופע codelab-demo שיצרנו ב-codelab.

ab7c83ebdab74c04.png

9. מזל טוב

כל הכבוד, סיימתם את ה-Codelab.

מה נכלל

  • איך פורסים מכונת Spanner
  • איך טוענים נתונים ל-Spanner באמצעות Dataflow
  • איך ניגשים לנתוני Spanner מ-BigQuery
  • איך משתמשים ב-Spanner Data Boost כדי למנוע השפעה על מופע Spanner של שאילתות אנליטיות מ-BigQuery

10. סקר

פלט:

איך תשתמשו במדריך הזה?

רק קוראים את הטקסט קוראים את הטקסט ומבצעים את התרגילים