1. مقدمه
Workflows یک سرویس ارکستراسیون کاملاً مدیریت شده است که Google Cloud یا سرویس های خارجی را به ترتیبی که شما تعریف کرده اید اجرا می کند.
BigQuery یک انبار داده سازمانی کاملاً مدیریت شده است که به شما کمک می کند تا ترابایت داده را با ویژگی های داخلی مانند یادگیری ماشین، تجزیه و تحلیل جغرافیایی و هوش تجاری مدیریت و تجزیه و تحلیل کنید.
در این لبه کد، تعدادی پرس و جو BigQuery را در برابر مجموعه داده عمومی ویکی پدیا اجرا خواهید کرد. سپس خواهید دید که چگونه چندین کوئری BigQuery را یکی پس از دیگری به صورت سریالی، به عنوان بخشی از هماهنگی گردش کار اجرا کنید. در نهایت، پرس و جوها را با استفاده از ویژگی تکرار موازی Workflows برای بهبود سرعت تا 5 برابر موازی می کنید.
چیزی که یاد خواهید گرفت
- نحوه اجرای پرس و جوهای BigQuery در برابر مجموعه داده ویکی پدیا.
- چگونه چندین پرس و جو را به عنوان بخشی از یک مجموعه ارکستراسیون Workflows اجرا کنیم.
- نحوه موازی سازی پرس و جوها با استفاده از تکرار موازی Workflows برای بهبود سرعت تا 5 برابر.
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه باید در تمام پروژههای Google Cloud منحصربهفرد باشد و تغییرناپذیر باشد (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.
3. مجموعه داده ویکی پدیا را کاوش کنید
ابتدا مجموعه داده های ویکی پدیا را در BigQuery کاوش کنید.
به بخش BigQuery در Google Cloud Console بروید:
در قسمت bigquery-samples
، باید مجموعه دادههای عمومی مختلف، از جمله مجموعههای داده مرتبط با ویکیپدیا را ببینید:
در زیر مجموعه داده wikipedia_pageviews
، میتوانید جداول مختلفی را برای بازدیدهای صفحه از سالهای مختلف مشاهده کنید:
می توانید یکی از جداول را انتخاب کنید (مثلاً 201207
) و پیش نمایش داده ها را مشاهده کنید:
همچنین می توانید پرس و جوها را در مقابل جدول اجرا کنید. به عنوان مثال، این پرس و جو 100 عنوان برتر با بیشترین بازدید را انتخاب می کند:
SELECT TITLE, SUM(views) FROM bigquery-samples.wikipedia_pageviews.201207h GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100
پس از اجرای پرس و جو، بارگیری داده ها حدود 20 ثانیه طول می کشد:
4. یک گردش کار برای اجرای چند پرس و جو تعریف کنید
اجرای یک پرس و جو در برابر یک جدول ساده است. با این حال، اجرای چندین پرس و جو در برابر چندین جدول و ترکیب نتایج می تواند بسیار خسته کننده باشد. برای کمک به این کار، Workflows میتواند به نحو تکرار آن کمک کند!
در داخل Cloud Shell، یک فایل workflow-serial.yaml
ایجاد کنید تا یک گردش کار برای اجرای چندین پرس و جو در برابر چندین جدول ایجاد کنید:
touch workflow-serial.yaml
سپس می توانید فایل را با ویرایشگر در Cloud Shell ویرایش کنید:
در داخل فایل workflow-serial.yaml
، در اولین مرحله init
، یک نقشه results
ایجاد کنید تا هر تکرار را با نام جداول ردیابی کنید. همچنین یک آرایه tables
را با لیست جداولی که می خواهید پرس و جوها را بر روی آنها اجرا کنید، تعریف کنید. در این مورد، ما 5 جدول را انتخاب می کنیم:
main: steps: - init: assign: - results : {} - tables: - 201201h - 201202h - 201203h - 201204h - 201205h
سپس یک مرحله runQueries
را تعریف کنید. این مرحله روی هر جدول تکرار میشود و از رابط BigQuery Workflows برای اجرای یک پرس و جو برای یافتن 100 عنوان برتر با بیشترین بازدید از صفحه در هر جدول استفاده میکند. سپس عنوان و نماهای برتر هر جدول را در نقشه نتایج ذخیره می کند:
- runQueries: for: value: table in: ${tables} steps: - runQuery: call: googleapis.bigquery.v2.jobs.query args: projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} body: useLegacySql: false useQueryCache: false timeoutMs: 30000 # Find the top 100 titles with most views on Wikipedia query: ${ "SELECT TITLE, SUM(views) FROM `bigquery-samples.wikipedia_pageviews." + table + "` WHERE LENGTH(TITLE) > 10 GROUP BY TITLE ORDER BY SUM(VIEWS) DESC LIMIT 100" } result: queryResult - returnResult: assign: # Return the top title from each table - results[table]: {} - results[table].title: ${queryResult.rows[0].f[0].v} - results[table].views: ${queryResult.rows[0].f[1].v}
در مرحله نهایی، نقشه results
را برگردانید:
- returnResults: return: ${results}
5. چند پرس و جو را با Workflows اجرا کنید
قبل از اینکه بتوانید گردش کار را اجرا و اجرا کنید، باید مطمئن شوید که Workflows API فعال است. میتوانید آن را از Google Cloud Console یا با استفاده از gcloud
در Cloud Shell فعال کنید:
gcloud services enable workflows.googleapis.com
ایجاد یک حساب سرویس برای Workflows:
SERVICE_ACCOUNT=workflows-bigquery-sa gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Workflows BigQuery service account"
مطمئن شوید که حساب سرویس دارای نقشهایی برای ثبت و اجرای کارهای BigQuery است:
PROJECT_ID=your-project-id gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/logging.logWriter \ --role roles/bigquery.jobUser \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
استقرار گردش کار با حساب سرویس:
gcloud workflows deploy bigquery-serial \ --source=workflow-serial.yaml \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
در نهایت، شما آماده اجرای گردش کار هستید.
گردش کار bigquery-serial
را در بخش Workflows در Cloud Console پیدا کنید و دکمه Execute
را بزنید:
همچنین میتوانید گردش کار را با gcloud
در Cloud Shell اجرا کنید:
gcloud workflows run bigquery-serial
شما باید اجرای گردش کار را در حدود 1 دقیقه (20 ثانیه برای هر یک از 5 جدول) مشاهده کنید.
در پایان، خروجی هر جدول را با عناوین و نماهای برتر مشاهده خواهید کرد:
6. چند پرس و جو را با مراحل موازی موازی کنید
گردش کار در مرحله قبل حدود 1 دقیقه طول کشید زیرا 5 پرس و جو را اجرا کرد که هر کدام 20 ثانیه طول کشید. از آنجایی که این کوئریها مستقل هستند، میتوانید با استفاده از ویژگی تکرار موازی Workflows آنها را به صورت موازی اجرا کنید.
فایل workflow-serial.yaml
را در فایل workflow-parallel.yaml
جدید کپی کنید. در فایل جدید، چند تغییر ایجاد می کنید تا مراحل سریال به مراحل موازی تبدیل شوند.
در فایل workflow-parallel.yaml
مرحله runQueries
را تغییر دهید. ابتدا کلمه کلیدی parallel
را اضافه کنید. این اجازه می دهد تا هر تکرار از حلقه for به صورت موازی اجرا شود. دوم، متغیر results
به عنوان یک متغیر shared
اعلام کنید. این اجازه می دهد تا متغیر توسط یک شاخه قابل نوشتن باشد. هر نتیجه را به این متغیر اضافه می کنیم.
- runQueries: parallel: shared: [results] for: value: table in: ${tables}
گسترش گردش کار موازی:
gcloud workflows deploy bigquery-parallel \ --source=workflow-parallel.yaml \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
گردش کار را اجرا کنید:
gcloud workflows run bigquery-parallel
باید شاهد اجرای گردش کار حدود 20 ثانیه باشید. این به دلیل اجرای هر 5 کوئری به صورت موازی است. تا 5 برابر بهبود سرعت تنها با چند خط تغییر کد!
در پایان، خروجی یکسانی را از هر جدول با عناوین و نماهای برتر اما با زمان اجرای بسیار کمتر خواهید دید:
7. تبریک می گویم
تبریک می گویم، شما نرم افزار کد را تمام کردید! برای کسب اطلاعات بیشتر، مستندات Workflows در مراحل موازی را بررسی کنید.
آنچه را پوشش داده ایم
- نحوه اجرای پرس و جوهای BigQuery در برابر مجموعه داده ویکی پدیا.
- چگونه چندین پرس و جو را به عنوان بخشی از یک مجموعه ارکستراسیون Workflows اجرا کنیم.
- نحوه موازی سازی پرس و جوها با استفاده از تکرار موازی Workflows برای بهبود سرعت تا 5 برابر.