ב-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.
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.-
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.
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.-
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 ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable workflows.googleapis.com
-
מגדירים את האימות:
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM Project Admin (roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים -
יוצרים את חשבון השירות:
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: התפקיד שאתם רוצים לתת
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
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, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםgcloud services enable workflows.googleapis.com
-
מגדירים את האימות:
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM Project Admin (roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים -
יוצרים את חשבון השירות:
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: התפקיד שאתם רוצים לתת
-
מוודאים שיש לכם את תפקיד ה-IAM Create Service Accounts (
הפעלת משימת שאילתה ב-BigQuery
ב-BigQuery, אפשר להריץ משימת שאילתה אינטראקטיבית (לפי דרישה). מידע נוסף זמין במאמר בנושא הפעלת משימות אינטראקטיביות של שאילתות ושאילתות באצווה.
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
מזינים את שאילתת ה-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.
לוחצים על הבא.
בעורך תהליכי העבודה, מזינים את ההגדרה הבאה לתהליך העבודה:
לוחצים על פריסה.
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.
ביצוע תהליך העבודה והרצת כמה שאילתות ברצף
כשמריצים תהליך עבודה, מופעלת ההגדרה הנוכחית של תהליך העבודה שמשויכת ל-workflow.
המסוף
נכנסים לדף Workflows במסוף Google Cloud :
בדף Workflows, בוחרים את תהליך העבודה workflow-serial-bqjobs כדי לעבור לדף הפרטים שלו.
בדף פרטי תהליך העבודה, לוחצים על play_arrow הפעלה.
לוחצים שוב על Execute.
תוצאות תהליך העבודה מוצגות בחלונית Output.
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.
תוצאות תהליך העבודה מוצגות בחלונית Output.
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 זמין במאמר סקירה כללית על Workflows.