Workflows के साथ BigQuery जॉब को साथ-साथ चलाना

1. परिचय

1c05e3d0c2bd2b45.png 74be7b376d45258a.png

Workflows, पूरी तरह से मैनेज की गई ऑर्कस्ट्रैशन सेवा है, जो Google Cloud या बाहरी सेवाओं को आपके तय किए क्रम में एक्ज़ीक्यूट करती है.

BigQuery पूरी तरह से मैनेज किया गया एंटरप्राइज़ डेटा वेयरहाउस है. इससे टेराबाइट डेटा को मैनेज करने और उसका विश्लेषण करने में मदद मिलती है. इसमें मशीन लर्निंग, जियोस्पेशियल विश्लेषण, और बिज़नेस इंटेलिजेंस जैसी पहले से मौजूद सुविधाएं शामिल हैं.

इस कोडलैब में, सार्वजनिक तौर पर उपलब्ध Wikipedia डेटासेट के लिए BigQuery की कुछ क्वेरी चलाई जा सकती हैं. इसके बाद, वर्कफ़्लो ऑर्केस्ट्रेशन के तहत, आपको BigQuery क्वेरी को एक के बाद एक क्रम में चलाने का तरीका बताया जाएगा. आखिर में, आप वर्कफ़्लो में पांच गुना तक सुधार करने के लिए समानांतर इटरेशन सुविधा का इस्तेमाल करके क्वेरी को साथ-साथ चलाएंगे.

आप इन चीज़ों के बारे में जानेंगे

  • Wikipedia डेटासेट के लिए BigQuery क्वेरी चलाने का तरीका.
  • वर्कफ़्लो ऑर्केस्ट्रेशन के हिस्से के तौर पर, एक से ज़्यादा क्वेरी को क्रम से कैसे चलाएं.
  • वर्कफ़्लो में पांच गुना तक सुधार के लिए, वर्कफ़्लो के पैरलल इटरेशन का इस्तेमाल करके क्वेरी को साथ में कैसे रखें.

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करें

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, आईडी को बदला नहीं जा सकता. सेट अप के बाद इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा.
  • आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

क्लाउड शेल शुरू करें

Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Google Cloud Console में जाकर, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

55efc1aaa7a4d3ad.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

7ffe5cbb04455448.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस कोडलैब (कोड बनाना सीखना) में आपका सारा काम ब्राउज़र में किया जा सकता है. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

3. Wikipedia डेटासेट के बारे में ज़्यादा जानें

सबसे पहले, BigQuery में Wikipedia डेटासेट के बारे में जानें.

Google Cloud Console के BigQuery सेक्शन पर जाएं:

ea75ab12a7c012a4.png

bigquery-samples में, आपको कई सार्वजनिक डेटासेट दिखेंगे. इनमें विकिपीडिया से जुड़े कुछ डेटासेट भी शामिल हैं:

c9484e305b8e1438.png

wikipedia_pageviews डेटासेट में, अलग-अलग सालों के पेज व्यू के लिए अलग-अलग टेबल देखी जा सकती हैं:

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. एक से ज़्यादा क्वेरी चलाने के लिए एक वर्कफ़्लो तय करें

किसी एक टेबल के लिए क्वेरी चलाना आसान है. हालांकि, एक से ज़्यादा टेबल के हिसाब से कई क्वेरी चलाना और नतीजों को इकट्ठा करना मुश्किल हो सकता है. इसमें मदद करने के लिए, Workflows इसके इटरेशन सिंटैक्स में मदद कर सकता है!

Cloud Shell के अंदर, एक workflow-serial.yaml फ़ाइल बनाएं, ताकि एक से ज़्यादा टेबल के लिए एक से ज़्यादा क्वेरी चलाने के लिए वर्कफ़्लो बनाया जा सके:

touch workflow-serial.yaml

इसके बाद, Cloud Shell में एडिटर की मदद से फ़ाइल में बदलाव किया जा सकता है:

33bf9325b078ad8.png

workflow-serial.yaml फ़ाइल के अंदर, पहले init चरण में, एक results मैप बनाएं, ताकि हर गतिविधि को टेबल के नामों से ट्रैक किया जा सके. साथ ही, उन टेबल की सूची के साथ tables कलेक्शन तय करें जिनके लिए आपको क्वेरी चलानी हैं. इस मामले में, हम पांच टेबल चुन रहे हैं:

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

इसके बाद, एक runQueries चरण तय करें. यह चरण प्रत्येक टेबल के ऊपर दोहराया जाता है और वर्कफ़्लो का उपयोग करता है BigQuery कनेक्टर का इस्तेमाल करके, क्वेरी चलाकर हर टेबल में सबसे ज़्यादा पेज व्यू वाले 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 से या Cloud Shell में 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

आखिर में, आप वर्कफ़्लो चलाने के लिए तैयार हैं.

Cloud Console के वर्कफ़्लो सेक्शन में, bigquery-serial वर्कफ़्लो ढूंढें और Execute बटन दबाएं:

b6afa4747680334f.png

इसके अलावा, Cloud Shell में gcloud के साथ भी वर्कफ़्लो चलाया जा सकता है:

gcloud workflows run bigquery-serial

आपको करीब एक मिनट तक चलने वाला वर्कफ़्लो दिखना चाहिए (पांच टेबल में से हर एक के लिए 20 सेकंड).

आखिर में, आपको हर टेबल का आउटपुट, सबसे ज़्यादा देखे गए टाइटल और व्यू के साथ दिखेगा:

304d11a5bffdada4.png

baf31533d3671c9e.png

6. साथ-साथ चलने वाले चरणों का इस्तेमाल करके, एक से ज़्यादा क्वेरी को साथ में प्रोसेस करना

पिछले चरण के वर्कफ़्लो में करीब एक मिनट लगा, क्योंकि इसमें पांच क्वेरी चलाई गईं, जिनमें से हर एक क्वेरी में 20 सेकंड का समय लगा. ये इंडिपेंडेंट क्वेरी हैं. इसलिए, Workflows की पैरलल इटरेशन सुविधा का इस्तेमाल करके, इन्हें असल में साथ-साथ चलाया जा सकता है.

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 सेकंड का वर्कफ़्लो दिखेगा. ऐसा साथ-साथ चल रही सभी पांच क्वेरी की वजह से होता है. सिर्फ़ कुछ लाइनों में कोड बदलने से, इंटरनेट की स्पीड में पांच गुना तक सुधार किया जा सकता है!

आखिर में, आपको हर टेबल में सबसे अच्छे टाइटल और व्यू के साथ एक ही तरह का आउटपुट दिखेगा. हालांकि, इसे लागू करने में काफ़ी कम समय लगेगा:

1825d49ef225c828.png

7. बधाई हो

बधाई हो, आपने कोडलैब पूरा कर लिया है! ज़्यादा जानने के लिए, साथ-साथ चलने वाले चरणों से जुड़े वर्कफ़्लो दस्तावेज़ देखें.

हमने इन विषयों के बारे में बताया

  • Wikipedia डेटासेट के लिए BigQuery क्वेरी चलाने का तरीका.
  • वर्कफ़्लो ऑर्केस्ट्रेशन के हिस्से के तौर पर, एक से ज़्यादा क्वेरी को क्रम से कैसे चलाएं.
  • स्पीड में पांच गुना तक सुधार के लिए, वर्कफ़्लो के पैरलल इटरेशन का इस्तेमाल करके क्वेरी को साथ में कैसे रखें.