Workflows-এর সাথে সমান্তরালভাবে BigQuery কাজ চালানো

1. ভূমিকা

1c05e3d0c2bd2b45.png74be7b376d45258a.png

ওয়ার্কফ্লো হল একটি সম্পূর্ণ-পরিচালিত অর্কেস্ট্রেশন পরিষেবা যা Google ক্লাউড বা বাহ্যিক পরিষেবাগুলিকে আপনার সংজ্ঞায়িত ক্রম অনুসারে চালায়৷

BigQuery হল একটি সম্পূর্ণরূপে পরিচালিত এন্টারপ্রাইজ ডেটা গুদাম যা আপনাকে মেশিন লার্নিং, ভূ-স্থানিক বিশ্লেষণ এবং ব্যবসায়িক বুদ্ধিমত্তার মতো অন্তর্নির্মিত বৈশিষ্ট্য সহ টেরাবাইট ডেটা পরিচালনা ও বিশ্লেষণ করতে সহায়তা করে।

এই কোডল্যাবে, আপনি পাবলিক উইকিপিডিয়া ডেটাসেটের বিরুদ্ধে কিছু BigQuery প্রশ্ন চালাবেন। তারপরে আপনি দেখবেন কিভাবে ওয়ার্কফ্লোস অর্কেস্ট্রেশনের অংশ হিসেবে একের পর এক একাধিক BigQuery কোয়েরি চালানো যায়। অবশেষে, আপনি 5x গতির উন্নতির জন্য Workflows-এর সমান্তরাল পুনরাবৃত্তি বৈশিষ্ট্য ব্যবহার করে প্রশ্নগুলিকে সমান্তরাল করবেন।

আপনি কি শিখবেন

  • কিভাবে Wikipedia ডেটাসেটের বিরুদ্ধে BigQuery কোয়েরি চালাতে হয়।
  • ওয়ার্কফ্লোস অর্কেস্ট্রেশনের অংশ হিসাবে সিরিয়ালভাবে একাধিক প্রশ্ন কীভাবে চালাবেন।
  • কিভাবে 5x গতির উন্নতির জন্য Workflows সমান্তরাল পুনরাবৃত্তি ব্যবহার করে প্রশ্নগুলিকে সমান্তরাল করা যায়।

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
  • সমস্ত Google ক্লাউড প্রজেক্ট জুড়ে প্রোজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউড শেল শুরু করুন

যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি Google ক্লাউড শেল ব্যবহার করবেন, একটি কমান্ড লাইন পরিবেশ যা ক্লাউডে চলছে।

Google ক্লাউড কনসোল থেকে, উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে। এটি সমাপ্ত হলে, আপনি এই মত কিছু দেখতে হবে:

7ffe5cbb04455448.png

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারে করা যেতে পারে। আপনার কিছু ইন্সটল করার দরকার নেই।

3. উইকিপিডিয়া ডেটাসেট অন্বেষণ করুন

প্রথমে, BigQuery-এ উইকিপিডিয়া ডেটাসেট অন্বেষণ করুন।

Google ক্লাউড কনসোলের BigQuery বিভাগে যান:

ea75ab12a7c012a4.png

bigquery-samples অধীনে, আপনি কিছু উইকিপিডিয়া সম্পর্কিত ডেটাসেট সহ বিভিন্ন পাবলিক ডেটাসেট দেখতে পাবেন:

c9484e305b8e1438.png

wikipedia_pageviews dataset এর অধীনে, আপনি বিভিন্ন বছরের পৃষ্ঠা দর্শনের জন্য বিভিন্ন টেবিল দেখতে পারেন:

c540a4162640cbb3.png

আপনি একটি টেবিল নির্বাচন করতে পারেন (যেমন 201207 ) এবং ডেটার পূর্বরূপ দেখতে পারেন:

b5b2a334cd6f63c0.png

এছাড়াও আপনি টেবিলের বিরুদ্ধে প্রশ্ন চালাতে পারেন। উদাহরণস্বরূপ, এই ক্যোয়ারীটি সর্বাধিক ভিউ সহ শীর্ষ 100টি শিরোনাম নির্বাচন করে:

SELECT TITLE, SUM(views)
FROM bigquery-samples.wikipedia_pageviews.201207h
GROUP BY TITLE
ORDER BY SUM(VIEWS) DESC
LIMIT 100

একবার আপনি ক্যোয়ারীটি চালালে, ডেটা লোড হতে প্রায় 20 সেকেন্ড সময় লাগে:

1df3877aed1653b4.png

4. একাধিক প্রশ্ন চালানোর জন্য একটি ওয়ার্কফ্লো সংজ্ঞায়িত করুন

একটি একক টেবিলের বিরুদ্ধে একটি ক্যোয়ারী চালানো সহজ। যাইহোক, একাধিক টেবিলের বিরুদ্ধে একাধিক প্রশ্ন চালানো এবং ফলাফলগুলিকে একত্রিত করা বেশ ক্লান্তিকর হতে পারে। এটিতে সহায়তা করার জন্য, ওয়ার্কফ্লোস এর পুনরাবৃত্তি সিনট্যাক্সে সহায়তা করতে পারে!

ক্লাউড শেলের ভিতরে, একাধিক টেবিলের বিরুদ্ধে একাধিক প্রশ্ন চালানোর জন্য একটি ওয়ার্কফ্লো তৈরি করতে একটি workflow-serial.yaml ফাইল তৈরি করুন:

touch workflow-serial.yaml

তারপরে আপনি ক্লাউড শেলের সম্পাদকের সাথে ফাইলটি সম্পাদনা করতে পারেন:

33bf9325b078ad8.png

workflow-serial.yaml ফাইলের ভিতরে, প্রথম init ধাপে, টেবিলের নাম দ্বারা কী করা প্রতিটি পুনরাবৃত্তির ট্র্যাক রাখতে একটি results মানচিত্র তৈরি করুন। এছাড়াও আপনি যে টেবিলের বিরুদ্ধে প্রশ্ন চালাতে চান তার তালিকা সহ একটি tables অ্যারে সংজ্ঞায়িত করুন। এই ক্ষেত্রে, আমরা 5 টি টেবিল নির্বাচন করছি:

main:
    steps:
    - init:
        assign:
            - results : {}
            - tables:
                - 201201h
                - 201202h
                - 201203h
                - 201204h
                - 201205h

এরপরে, runQueries ধাপ সংজ্ঞায়িত করুন। এই ধাপটি প্রতিটি টেবিলে পুনরাবৃত্তি করে এবং প্রতিটি টেবিলে সর্বাধিক পৃষ্ঠা দেখা সহ শীর্ষ 100টি শিরোনাম খুঁজে পেতে একটি কোয়েরি চালানোর জন্য Workflows' BigQuery সংযোগকারী ব্যবহার করে। এটি তারপর ফলাফল মানচিত্রে প্রতিটি টেবিল থেকে শীর্ষ শিরোনাম এবং ভিউ সংরক্ষণ করে:

    - 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. ওয়ার্কফ্লো সহ একাধিক প্রশ্ন চালান

আপনি ওয়ার্কফ্লো স্থাপন এবং চালানোর আগে, আপনাকে ওয়ার্কফ্লোস API সক্ষম করা আছে তা নিশ্চিত করতে হবে। আপনি Google ক্লাউড কনসোল থেকে বা ক্লাউড শেলে gcloud ব্যবহার করে এটি সক্ষম করতে পারেন:

gcloud services enable workflows.googleapis.com

ওয়ার্কফ্লোসের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন:

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 ওয়ার্কফ্লো খুঁজুন এবং Execute বোতাম টিপুন:

b6afa4747680334f.png

বিকল্পভাবে, আপনি ক্লাউড শেল-এ gcloud দিয়ে ওয়ার্কফ্লো চালাতে পারেন:

gcloud workflows run bigquery-serial

আপনি প্রায় 1 মিনিট (5টি টেবিলের প্রতিটির জন্য 20 সেকেন্ড) স্থায়ী ওয়ার্কফ্লো এক্সিকিউশন দেখতে পাবেন।

শেষ পর্যন্ত, আপনি শীর্ষ শিরোনাম এবং ভিউ সহ প্রতিটি টেবিল থেকে আউটপুট দেখতে পাবেন:

304d11a5bffdada4.png

baf31533d3671c9e.png

6. সমান্তরাল পদক্ষেপের সাথে একাধিক প্রশ্ন সমান্তরাল করুন

পূর্ববর্তী ধাপে ওয়ার্কফ্লো প্রায় 1 মিনিট সময় নেয় কারণ এটি 5টি কোয়েরি চালায় যা প্রতিটিতে 20 সেকেন্ড সময় নেয়। যেহেতু এগুলি স্বাধীন প্রশ্ন, তাই আপনি কার্যপ্রবাহের সমান্তরাল পুনরাবৃত্তি বৈশিষ্ট্য ব্যবহার করে সমান্তরালভাবে চালাতে পারেন।

workflow-serial.yaml ফাইলটিকে একটি নতুন workflow-parallel.yaml ফাইলে কপি করুন। নতুন ফাইলে, আপনি সিরিয়াল ধাপগুলিকে সমান্তরাল ধাপে পরিণত করতে কয়েকটি পরিবর্তন করবেন।

workflow-parallel.yaml ফাইলে, runQueries ধাপ পরিবর্তন করুন। প্রথমে, parallel কীওয়ার্ড যোগ করুন। এটি ফর লুপের প্রতিটি পুনরাবৃত্তিকে সমান্তরালভাবে চালানোর অনুমতি দেয়। দ্বিতীয়ত, 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 টি প্রশ্নের কারণে। কোড পরিবর্তনের মাত্র কয়েক লাইনের সাথে 5x গতির উন্নতি!

শেষ পর্যন্ত, আপনি শীর্ষ শিরোনাম এবং ভিউ সহ প্রতিটি টেবিল থেকে একই আউটপুট দেখতে পাবেন কিন্তু অনেক কম কার্যকর করার সময় সহ:

1825d49ef225c828.png

7. অভিনন্দন

অভিনন্দন, আপনি কোডল্যাব শেষ করেছেন! আরও জানতে, সমান্তরাল ধাপে ওয়ার্কফ্লো ডকুমেন্টেশন দেখুন।

আমরা কভার করেছি কি

  • কিভাবে Wikipedia ডেটাসেটের বিরুদ্ধে BigQuery কোয়েরি চালাতে হয়।
  • ওয়ার্কফ্লোস অর্কেস্ট্রেশনের অংশ হিসাবে সিরিয়ালভাবে একাধিক প্রশ্ন কীভাবে চালাবেন।
  • 5x গতির উন্নতির জন্য ওয়ার্কফ্লোস সমান্তরাল পুনরাবৃত্তি ব্যবহার করে প্রশ্নগুলিকে কীভাবে সমান্তরাল করা যায়।