ב-BigQuery יש מספר מערכי נתונים ציבוריים שזמינים לציבור הרחב להרצת שאילתות. במדריך הזה יוצרים תהליך עבודה שמריץ כמה משימות של שאילתות BigQuery במקביל, כדי להדגים שיפור בביצועים בהשוואה להרצת המשימות ברצף, אחת אחרי השנייה.
מטרות
במדריך הזה תלמדו:- מריצים שאילתה על מערך נתונים ציבורי של ויקיפדיה כדי לזהות את הכותרות שהכי הרבה אנשים צפו בהן בחודש מסוים.
- פורסים ומפעילים תהליך עבודה שמריץ כמה משימות של שאילתות ב-BigQuery באופן סדרתי, אחת אחרי השנייה.
- פורסים ומריצים תהליך עבודה שמריץ את המשימות ב-BigQuery באמצעות איטרציה מקבילה, שבה לולאות
forרגילות מופעלות במקביל.
אפשר להריץ את הפקודות הבאות במסוף Google Cloud , או באמצעות Google Cloud CLI בטרמינל או ב-Cloud Shell.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
בעזרת מחשבון העלויות אתם יכולים להעריך את העלויות בהתאם לשימוש הצפוי.
לפני שמתחילים
יכול להיות שהגבלות אבטחה שהוגדרו בארגון שלכם ימנעו מכם להשלים את השלבים הבאים. למידע על פתרון בעיות, קראו את המאמר פיתוח אפליקציות בסביבה מוגבלת של Google Cloud .
המסוף
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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 Workflows API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click Add another role and add each additional role.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
-
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 Workflows API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the following roles to the service account: BigQuery > BigQuery Job User, Logging > Logs Writer.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click Add another role and add each additional role.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
gcloud
-
נכנסים לחשבון Google.
אם עדיין אין חשבון, יוצרים חשבון חדש.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם ב- Google Cloud :
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Workflows API, אם הוא עדיין לא מופעל:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable workflows.googleapis.com
-
מגדירים את האימות:
-
מוודאים שיש לכם את התפקיד "יצירת חשבונות שירות" (
roles/iam.serviceAccountCreator) ואת התפקיד "אדמין של פרויקט" (roles/resourcemanager.projectIamAdmin) ב-IAM. איך מקצים תפקידים? -
יוצרים את חשבון השירות:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את הערך
SERVICE_ACCOUNT_NAMEבשם שרוצים לתת לחשבון השירות. -
נותנים לחשבון השירות תפקידים. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/bigquery.jobUser, roles/logging.logWriter:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותROLE: התפקיד שאתם רוצים לתת
-
מוודאים שיש לכם את התפקיד "יצירת חשבונות שירות" (
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם ב- Google Cloud :
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את Workflows API, אם הוא עדיין לא מופעל:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable workflows.googleapis.com
-
מגדירים את האימות:
-
מוודאים שיש לכם את התפקיד "יצירת חשבונות שירות" (
roles/iam.serviceAccountCreator) ואת התפקיד "אדמין של פרויקט" (roles/resourcemanager.projectIamAdmin) ב-IAM. איך מקצים תפקידים? -
יוצרים את חשבון השירות:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את הערך
SERVICE_ACCOUNT_NAMEבשם שרוצים לתת לחשבון השירות. -
נותנים לחשבון השירות תפקידים. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/bigquery.jobUser, roles/logging.logWriter:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותROLE: התפקיד שאתם רוצים לתת
-
מוודאים שיש לכם את התפקיד "יצירת חשבונות שירות" (
הפעלת משימת שאילתה ב-BigQuery
ב-BigQuery, אתם יכולים להריץ משימת שאילתה אינטראקטיבית (על פי דרישה). מידע נוסף זמין במאמר בנושא הפעלת משימות אינטראקטיביות של שאילתות ושאילתות באצווה.
המסוף
נכנסים לדף BigQuery במסוף Google Cloud .
מזינים את שאילתת ה-SQL הבאה של BigQuery באזור הטקסט של עורך השאילתות:
SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews.201207h` GROUP BY TITLE ORDER BY SUM(views) DESC LIMIT 100לוחצים על Run.
BQ
בטרמינל, מזינים את הפקודה הבאה של bq query כדי להריץ שאילתה אינטראקטיבית באמצעות תחביר SQL סטנדרטי:
bq query \
--use_legacy_sql=false \
'SELECT
TITLE, SUM(views)
FROM
`bigquery-samples.wikipedia_pageviews.201207h`
GROUP BY
TITLE
ORDER BY
SUM(views) DESC
LIMIT 100'
השאילתה הזו מחזירה את 100 הכותרות הנצפות ביותר בוויקיפדיה בחודש מסוים, וכותבת את הפלט לטבלה זמנית.
שימו לב כמה זמן לוקח להריץ את השאילתה.
פריסת תהליך עבודה שמריץ כמה שאילתות ברצף
הגדרת תהליך עבודה מורכבת מסדרה של שלבים שמתוארים באמצעות התחביר של Workflows. אחרי שיוצרים תהליך עבודה, פורסים אותו כדי שיהיה זמין להרצה. בשלב הפריסה מתבצעת גם בדיקה של קובץ המקור כדי לוודא שאפשר להריץ אותו.
בתהליך העבודה הבא מוגדרת רשימה של חמש טבלאות להרצת שאילתה באמצעות מחבר ל-BigQuery ב-Workflows. השאילתות מופעלות ברצף, אחת אחרי השנייה, והכותרים הנצפים ביותר מכל טבלה נשמרים במפת תוצאות.
המסוף
נכנסים לדף Workflows במסוף Google Cloud :
לוחצים על יצירה.
מזינים שם לתהליך העבודה החדש, למשל
workflow-serial-bqjobs.בוחרים אזור מתאים, לדוגמה us-central1.
בוחרים את חשבון השירות שיצרתם קודם.
כבר הענקתם לחשבון השירות את תפקידי ה-IAM BigQuery > BigQuery Job User ו-Logging > Logs Writer.
לוחצים על הבא.
בעורך תהליך העבודה, מזינים את ההגדרה הבאה לתהליך העבודה:
לוחצים על Deploy.
gcloud
פותחים טרמינל ויוצרים קובץ קוד מקור לתהליך העבודה:
touch workflow-serial-bqjobs.yamlמעתיקים את תהליך העבודה הבא לקובץ קוד המקור:
מריצים את הפקודה הבאה כדי לפרוס את תהליך העבודה:
gcloud workflows deploy workflow-serial-bqjobs \ --source=workflow-serial-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
מחליפים את
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.comבכתובת האימייל של חשבון השירות שיצרתם קודם.כבר הקציתם לחשבון השירות את התפקידים
roles/bigquery.jobUserו-roles/logging.logWriterב-IAM.
הפעלת תהליך העבודה והרצת כמה שאילתות ברצף
כשמריצים תהליך עבודה, מופעלת ההגדרה הנוכחית של תהליך העבודה שמשויכת לתהליך העבודה.
המסוף
נכנסים לדף Workflows במסוף Google Cloud :
בדף Workflows, בוחרים את תהליך העבודה workflow-serial-bqjobs כדי לעבור לדף הפרטים שלו.
בדף פרטי תהליך העבודה, לוחצים על play_arrow הפעלה.
לוחצים שוב על Execute.
התוצאות של תהליך העבודה מוצגות בחלונית פלט.
gcloud
פותחים טרמינל.
מריצים את תהליך העבודה:
gcloud workflows run workflow-serial-bqjob
הביצוע של תהליך העבודה אמור להימשך בערך דקה או פי חמישה מזמן הריצה הקודם. התוצאה תכלול כל טבלה ותיראה בערך כך:
{
"201201h": {
"title": "Special:Search",
"views": "14591339"
},
"201202h": {
"title": "Special:Search",
"views": "132765420"
},
"201203h": {
"title": "Special:Search",
"views": "123316818"
},
"201204h": {
"title": "Special:Search",
"views": "116830614"
},
"201205h": {
"title": "Special:Search",
"views": "131357063"
}
}
פריסה והפעלה של תהליך עבודה שמריץ כמה שאילתות במקביל
במקום להריץ חמש שאילתות ברצף, אפשר להריץ את השאילתות במקביל על ידי ביצוע כמה שינויים:
- runQueries:
parallel:
shared: [results]
for:
value: table
in: ${tables}
- שלב
parallelמאפשר לכל איטרציה של לולאתforלפעול במקביל. המשתנה
resultsמוצהר כ-shared, מה שמאפשר לענף לכתוב בו, ואפשר לצרף אליו את התוצאה של כל ענף.
המסוף
נכנסים לדף Workflows במסוף Google Cloud :
לוחצים על יצירה.
נותנים שם לתהליך העבודה החדש, למשל
workflow-parallel-bqjobs.בוחרים אזור מתאים, לדוגמה us-central1.
בוחרים את חשבון השירות שיצרתם קודם.
לוחצים על הבא.
בעורך תהליך העבודה, מזינים את ההגדרה הבאה לתהליך העבודה:
לוחצים על פריסה.
בדף פרטי תהליך העבודה, לוחצים על play_arrow הפעלה.
לוחצים שוב על Execute.
התוצאות של תהליך העבודה מוצגות בחלונית פלט.
gcloud
פותחים טרמינל ויוצרים קובץ קוד מקור לתהליך העבודה:
touch workflow-parallel-bqjobs.yamlמעתיקים את תהליך העבודה הבא לקובץ קוד המקור:
מזינים את הפקודה הבאה כדי לפרוס את תהליך העבודה:
gcloud workflows deploy workflow-parallell-bqjobs \ --source=workflow-parallel-bqjobs.yaml \ --service-account=MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.com
מחליפים את
MY_SERVICE_ACCOUNT@MY_PROJECT.iam.gserviceaccount.comבכתובת האימייל של חשבון השירות שיצרתם קודם.מריצים את תהליך העבודה:
gcloud workflows run workflow-parallel-bqjobs
התוצאה תהיה דומה לפלט הקודם, אבל הפעלת תהליך העבודה אמורה להימשך כ-20 שניות או פחות.
הסרת המשאבים
אם יצרתם פרויקט חדש בשביל המדריך הזה, תמחקו את הפרויקט. אם השתמשתם בפרויקט קיים ואתם רוצים לשמור אותו בלי השינויים שנוספו במדריך הזה, תצטרכו למחוק את המשאבים שנוצרו לצורך המדריך.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת משאבים של מדריכים
מחיקת תהליכי העבודה שנוצרו במדריך הזה:
gcloud workflows delete WORKFLOW_NAME
המאמרים הבאים
- מידע נוסף על שלבים מקבילים זמין במאמר הפעלת שלבים מקבילים.
- מידע נוסף על מחברים של Workflows
- לסקירה הכללית על Workflows