1. מבוא
בשיעור ה-Codelab הזה תלמדו איך להשתמש ב-Spanner Data Boost כדי לשלוח שאילתות על נתוני Spanner מ-BigQuery באמצעות שאילתות מאוחדות ב-0-ETL ובלי להשפיע על מסד הנתונים Spanner.
Spanner Data Boost הוא שירות מנוהל ללא שרת (serverless), שמספק משאבי מחשוב עצמאיים לעומסי עבודה נתמכים של Spanner. התכונה 'שיפור נתונים' מאפשרת לכם להפעיל שאילתות ניתוח נתונים וייצוא נתונים, עם השפעה כמעט אפסית על עומסי עבודה קיימים במכונת Spanner שהוקצתה, באמצעות מודל של שימוש על פי דרישה ללא שרת (serverless).
בשילוב עם חיבורים חיצוניים ל-BigQuery, התכונה 'שיפור נתונים' מאפשרת לכם לשלוח בקלות שאילתות על נתונים מ-Spanner אל הפלטפורמה לניתוח נתונים בלי תנועה מורכבת של נתוני ETL.
דרישות מוקדמות
- הבנה בסיסית של Google Cloud, מסוף
- מיומנויות בסיסיות בממשק שורת הפקודה ובמעטפת של Google
מה תלמדו
- איך פורסים מכונת Spanner
- איך לטעון נתונים כדי ליצור מסד נתונים ב-Spanner
- איך לגשת לנתוני Spanner מ-BigQuery בלי Data Boost
- איך לגשת לנתוני Spanner מ-BigQuery באמצעות Data Boost
למה תזדקק?
- חשבון Google Cloud ופרויקט ב-Google Cloud
- דפדפן אינטרנט כמו Chrome
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט. - לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא יעלה הרבה כסף, אם בכלל. כדי להשבית משאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
במסוף Google Cloud, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:
למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה ב-Codelab הזה יכולה להתבצע בתוך דפדפן. אתה לא צריך להתקין שום דבר.
3. יצירת מכונה ומסד נתונים של Spanner
הפעלת Spanner API
ב-Inside 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 מאפשר להשתמש בכמה מסדי נתונים במכונה אחת.
מסד הנתונים הוא המקום שבו מגדירים את הסכימה. תוכלו גם לקבוע למי תהיה גישה למסד הנתונים, להגדיר הצפנה מותאמת אישית, להגדיר את כלי האופטימיזציה ולהגדיר את תקופת השמירה.
כדי ליצור את מסד הנתונים, משתמשים שוב בכלי שורת הפקודה של Google Cloud:
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, להעלות ייבוא אוויר לקטגוריה ולהתחיל משימת ייבוא של 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 ומוודאים שהנתונים נמצאים. קודם כול, מרחיבים את טבלת הנושאים כדי לראות את העמודות.
עכשיו, מריצים את השאילתה הבאה כדי לוודא שהנתונים זמינים:
SELECT COUNT(*) FROM topics;
הפלט אמור להיראות כך:
5. קריאת נתונים מ-BigQuery
עכשיו שיש לכם נתונים ב-Spanner, זה הזמן לגשת אליהם מתוך BigQuery. כדי לעשות את זה, צריך להגדיר חיבור חיצוני ל-Spanner ב-BigQuery.
בהנחה שיש לך את ההרשאות המתאימות, עליך ליצור חיבור חיצוני ל-Spanner באמצעות השלבים הבאים.
לוחצים על Add (הוספה). בחלק העליון של מסוף BigQuery, ובוחרים באפשרות 'Connections to נצחיות של מקורות נתונים' כאפשרות.
עכשיו אפשר להריץ שאילתה כדי לקרוא נתונים מ-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;
פלט לדוגמה:
בקטע 'פרטי המשרה' אפשר לראות מידע על המשימה, כמו משך ההרצה של המשימה וכמה נתונים עובדו. .
בשלב הבא צריך להוסיף ל-Spanner חיבור של Data Boost, ולהשוות את התוצאות.
6. קריאת נתונים באמצעות 'שיפור נתונים'
כדי להשתמש ב-Spanner Data Boost, צריך ליצור חיבור חיצוני חדש מ-BigQuery ל-Spanner. לוחצים על Add (הוספה) במסוף BigQuery ובוחרים באפשרות 'Connections from external data sources
' שוב.
ממלאים את הפרטים עם אותו URI של חיבור ל-Spanner. שינוי 'מזהה החיבור' ולבדוק את 'שימוש בשיפור נתונים' .
אחרי יצירת החיבור ל-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. הסבר על שיפור נתונים
בעזרת 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 ועוברים ל-System Insights
כאן אפשר לראות את המדדים של המעבד (CPU). השאילתות שמריצים בלי Data Boost משתמשות במעבד (CPU) עבור 'executesql_select_withpartitiontoken' ב-AI. למרות שהשאילתה זהה, הביצוע של 'שיפור נתונים' לא מופיע כשמשתמשים במעבד של המכונה.
במקרים רבים, השימוש בתכונה 'שיפור נתונים' ישפר את הביצועים של שאילתת הניתוח. מערך הנתונים במדריך הזה קטן ואין עומסי עבודה אחרים שמתחרים על משאבים. לכן, המדריך הזה לא אמור להציג שיפורים בביצועים.
אתם יכולים להתנסות בשאילתות ובעומסי העבודה (workload) ולראות איך התכונה 'שיפור נתונים' פועלת. כשמסיימים, המשיכו לסעיף הבא כדי לנקות את הסביבה.
8. ניקוי הסביבה
אם יצרתם את הפרויקט במיוחד בשביל Codelab הזה, אפשר פשוט למחוק את הפרויקט כדי לנקות אותו. אם רוצים לשמור את הפרויקט ולנקות את הרכיבים הנפרדים, יש להמשיך בשלבים הבאים.
הסרת חיבורי BigQuery
כדי להסיר את שני החיבורים, לוחצים על סמל שלוש הנקודות שלצד שם החיבור. בוחרים באפשרות 'מחיקה' ופועלים לפי ההוראות למחיקת החיבור.
מחיקת קטגוריה של Cloud Storage
gcloud storage rm --recursive gs://$GCS_BUCKET
מחיקת מופע של Spanner
כדי למחוק את הקבצים, פשוט עוברים לקטע של Cloud Spanner במסוף Cloud ומוחקים את 'codelab-demo
'. שיצרנו ב-Codelab.
9. מזל טוב
ברכות על השלמת ה-Codelab.
הנושאים שטיפלנו בהם
- איך פורסים מכונת Spanner
- איך לטעון נתונים ל-Spanner באמצעות Dataflow
- איך לגשת לנתוני Spanner מ-BigQuery
- איך להשתמש ב-Spanner Data Boost כדי למנוע פגיעה במכונה של Spanner עבור שאילתות ניתוח נתונים מ-BigQuery
10. סקר
פלט: