Python के साथ BigQuery का इस्तेमाल करना

1. खास जानकारी

BigQuery, Google का पूरी तरह से मैनेज किया गया डेटा वेयरहाउस है. इसमें, कम-लागत में कई पेटाबाइट डेटा के विश्लेषण की सुविधा मिलती है. BigQuery एक NoOps (ऑपरेशन के लिए किसी भी तरह के मानवीय हस्तक्षेप की ज़रूरत नहीं होती) सेवा है. इसमें किसी इंफ़्रास्ट्रक्चर को मैनेज करने की ज़रूरत नहीं होती. साथ ही, आपको डेटाबेस एडमिन की भी ज़रूरत नहीं होती. इसलिए, डेटा का विश्लेषण करके अपने काम की अहम जानकारी ढूंढने पर ध्यान दें. इसके लिए, जाने-पहचाने SQL का इस्तेमाल करें. साथ ही, इस्तेमाल के हिसाब से पेमेंट करने वाले हमारे मॉडल का फ़ायदा पाएं.

इस कोडलैब में, Python की मदद से BigQuery के सार्वजनिक डेटासेट को क्वेरी करने के लिए, Python के लिए Google Cloud Client Libraries का इस्तेमाल किया जाएगा.

आपको क्या सीखने को मिलेगा

  • Cloud Shell का इस्तेमाल कैसे करें
  • BigQuery API को चालू करने का तरीका
  • एपीआई अनुरोधों की पुष्टि करने का तरीका
  • Python क्लाइंट लाइब्रेरी इंस्टॉल करने का तरीका
  • शेक्सपियर की रचनाओं के बारे में क्वेरी करने का तरीका
  • GitHub के डेटासेट से क्वेरी करने का तरीका
  • कैश मेमोरी में सेव होने और आंकड़ों को दिखाने की सेटिंग में बदलाव करने का तरीका

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट
  • कोई ब्राउज़र, जैसे कि Chrome या Firefox
  • Python का इस्तेमाल करने की जानकारी

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

सिर्फ़ इसे पढ़ें इसे पढ़ें और एक्सरसाइज़ पूरी करें

Python के साथ अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

Google Cloud की सेवाओं को इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

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 में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. संसाधन बंद करने के लिए, कोडलैब के आखिर में दिए गए "बंद करें" निर्देशों का पालन करें, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

Cloud Shell शुरू करें

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

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें 853e55310c205094.png पर क्लिक करें.

55efc1aaa7a4d3ad.png

अगर आपने पहले कभी Cloud Shell का इस्तेमाल नहीं किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में जानकारी दी गई होगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें. इसके बाद, आपको यह स्क्रीन कभी नहीं दिखेगी. एक बार दिखने वाली स्क्रीन ऐसी दिखती है:

9c92662c6a846a5c.png

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम, सिर्फ़ ब्राउज़र या Chromebook की मदद से किया जा सकता है.

Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर पहले ही सेट कर दिया गया है.

  1. पुष्टि करें कि आपने Cloud Shell में पुष्टि कर ली है. इसके लिए, यह कमांड चलाएं:
gcloud auth list

कमांड आउटपुट

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो इस कमांड का इस्तेमाल करके इसे सेट किया जा सकता है:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. एपीआई चालू करना

BigQuery API, सभी Google Cloud प्रोजेक्ट में डिफ़ॉल्ट रूप से चालू होना चाहिए. Cloud Shell में इस कमांड का इस्तेमाल करके, यह पता लगाया जा सकता है कि यह सही है या नहीं: आपको BigQuery की सूची में शामिल होना चाहिए:

gcloud services list

आपको BigQuery की सूची दिखेगी:

NAME                              TITLE
bigquery.googleapis.com           BigQuery API

...

अगर BigQuery API चालू नहीं है, तो इसे चालू करने के लिए Cloud Shell में यह कमांड इस्तेमाल करें:

gcloud services enable bigquery.googleapis.com

4. एपीआई अनुरोधों की पुष्टि करना

BigQuery API से अनुरोध करने के लिए, आपको सेवा खाते का इस्तेमाल करना होगा. सेवा खाता आपके प्रोजेक्ट से जुड़ा होता है. इसका इस्तेमाल Google Cloud Python क्लाइंट लाइब्रेरी, BigQuery API के अनुरोध करने के लिए करती है. किसी अन्य उपयोगकर्ता खाते की तरह, सेवा खाते को भी एक ईमेल पते से दिखाया जाता है. इस सेक्शन में, Cloud SDK का इस्तेमाल करके एक सेवा खाता बनाया जाएगा. इसके बाद, ऐसे क्रेडेंशियल बनाए जाएंगे जिनकी ज़रूरत आपको सेवा खाते के तौर पर पुष्टि करने के लिए होगी.

सबसे पहले, PROJECT_ID एनवायरमेंट वैरिएबल सेट करें:

export PROJECT_ID=$(gcloud config get-value core/project)

इसके बाद, BigQuery API को ऐक्सेस करने के लिए नया सेवा खाता बनाएं. इसके लिए, इनका इस्तेमाल करें:

gcloud iam service-accounts create my-bigquery-sa \
  --display-name "my bigquery service account"

इसके बाद, ऐसे क्रेडेंशियल बनाएं जिनका इस्तेमाल करके आपका Python कोड, नए सेवा खाते के तौर पर लॉगिन करेगा. इन क्रेडेंशियल को बनाएं और इन्हें JSON फ़ाइल ~/key.json के तौर पर सेव करें. इसके लिए, यह निर्देश इस्तेमाल करें:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com

आखिर में, GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल सेट करें. इसका इस्तेमाल BigQuery Python क्लाइंट लाइब्रेरी करती है. इसके बारे में अगले चरण में बताया गया है. इससे आपकी क्रेडेंशियल का पता चलता है. एनवायरमेंट वैरिएबल को, क्रेडेंशियल की उस JSON फ़ाइल के पूरे पाथ पर सेट किया जाना चाहिए जिसे आपने बनाया है. इसके लिए, यह तरीका अपनाएं:

export GOOGLE_APPLICATION_CREDENTIALS=~/key.json

BigQuery API की पुष्टि करने के बारे में ज़्यादा जानें.

5. ऐक्सेस कंट्रोल सेट अप करना

BigQuery, संसाधनों के ऐक्सेस को मैनेज करने के लिए, Identity and Access Management (IAM) का इस्तेमाल करता है. BigQuery में पहले से तय की गई कई भूमिकाएं (उपयोगकर्ता, dataOwner, dataViewer वगैरह) होती हैं. इन्हें उस सेवा खाते को असाइन किया जा सकता है जिसे आपने पिछले चरण में बनाया था. BigQuery के दस्तावेज़ों में, ऐक्सेस कंट्रोल के बारे में ज़्यादा पढ़ा जा सकता है.

सार्वजनिक डेटासेट के बारे में क्वेरी करने से पहले, आपको यह पक्का करना होगा कि सेवा खाते के पास कम से कम roles/bigquery.user की भूमिका हो. Cloud Shell में, सेवा खाते को उपयोगकर्ता की भूमिका असाइन करने के लिए, यह कमांड चलाएं:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/bigquery.user"

यह पुष्टि करने के लिए कि सेवा खाते के पास उपयोगकर्ता की भूमिका है, यह कमांड चलाएं:

gcloud projects get-iam-policy $PROJECT_ID

आपको यह जानकारी दिखेगी:

bindings:
- members:
  - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com
  role: roles/bigquery.user
...

6. क्लाइंट लाइब्रेरी इंस्टॉल करना

BigQuery की Python क्लाइंट लाइब्रेरी इंस्टॉल करें:

pip3 install --user --upgrade google-cloud-bigquery

अब BigQuery API की मदद से कोडिंग की जा सकती है!

7. शेक्सपियर की रचनाओं के बारे में क्वेरी करना

सार्वजनिक डेटासेट, BigQuery में सेव किया गया ऐसा डेटासेट होता है जिसे आम लोगों के लिए उपलब्ध कराया जाता है. आपके पास क्वेरी करने के लिए, कई अन्य सार्वजनिक डेटासेट उपलब्ध हैं. कुछ डेटासेट Google होस्ट करता है, लेकिन ज़्यादातर डेटासेट तीसरे पक्ष होस्ट करते हैं. ज़्यादा जानकारी के लिए, सार्वजनिक डेटासेट पेज देखें.

सार्वजनिक डेटासेट के अलावा, BigQuery में सैंपल टेबल की सीमित संख्या उपलब्ध होती है. इन पर क्वेरी की जा सकती है. ये टेबल, bigquery-public-data:samples डेटासेट में शामिल हैं. samples डेटासेट में मौजूद shakespeare टेबल में, शेक्सपियर की रचनाओं का शब्द इंडेक्स शामिल है. इससे पता चलता है कि हर कॉर्पस में हर शब्द कितनी बार दिखता है.

इस चरण में, आपको shakespeare टेबल के लिए क्वेरी करनी होगी.

सबसे पहले, Cloud Shell में एक सामान्य Python ऐप्लिकेशन बनाएं. इसका इस्तेमाल, Translation API के सैंपल चलाने के लिए किया जाएगा.

mkdir bigquery-demo
cd bigquery-demo
touch app.py

Cloud Shell में सबसे ऊपर दाईं ओर मौजूद कोड एडिटर खोलें:

b648141af44811a3.png

bigquery-demo फ़ोल्डर में मौजूद app.py फ़ाइल पर जाएं और कोड को इससे बदलें.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT corpus AS title, COUNT(word) AS unique_words
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY title
    ORDER BY unique_words
    DESC LIMIT 10
"""
results = client.query(query)

for row in results:
    title = row['title']
    unique_words = row['unique_words']
    print(f'{title:<20} | {unique_words}')

कोड को समझने के लिए एक या दो मिनट का समय लें. साथ ही, देखें कि टेबल को कैसे क्वेरी किया जा रहा है.

Cloud Shell में वापस जाकर, ऐप्लिकेशन चलाएं:

python3 app.py

आपको शब्दों की सूची और उनके इस्तेमाल की संख्या दिखेगी:

hamlet               | 5318
kinghenryv           | 5104
cymbeline            | 4875
troilusandcressida   | 4795
kinglear             | 4784
kingrichardiii       | 4713
2kinghenryvi         | 4683
coriolanus           | 4653
2kinghenryiv         | 4605
antonyandcleopatra   | 4582

8. GitHub डेटासेट को क्वेरी करना

BigQuery के बारे में ज़्यादा जानने के लिए, अब GitHub के सार्वजनिक डेटासेट के लिए क्वेरी जारी करें. आपको GitHub पर सबसे ज़्यादा इस्तेमाल होने वाले कमिट मैसेज मिलेंगे. आपको BigQuery के वेब कंसोल का इस्तेमाल करके, ऐड-हॉक क्वेरी की झलक देखने और उन्हें चलाने का विकल्प भी मिलेगा.

डेटा कैसा दिखता है, यह देखने के लिए BigQuery के वेब यूज़र इंटरफ़ेस (यूआई) में GitHub डेटासेट खोलें:

github_repos टेबल खोलें

डेटा कैसा दिखता है, यह देखने के लिए 'झलक देखें' बटन पर क्लिक करें:

d3f0dc7400fbe678.png

bigquery_demo फ़ोल्डर में मौजूद app.py फ़ाइल पर जाएं और कोड को इससे बदलें.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT subject AS subject, COUNT(*) AS num_duplicates
    FROM bigquery-public-data.github_repos.commits
    GROUP BY subject
    ORDER BY num_duplicates
    DESC LIMIT 10
"""
results = client.query(query)

for row in results:
    subject = row['subject']
    num_duplicates = row['num_duplicates']
    print(f'{subject:<20} | {num_duplicates:>9,}')

कोड को समझने के लिए एक या दो मिनट का समय लें. साथ ही, देखें कि सबसे सामान्य कमिट मैसेज के लिए टेबल को कैसे क्वेरी किया जा रहा है.

Cloud Shell में वापस जाकर, ऐप्लिकेशन चलाएं:

python3 app.py

आपको कमिट मैसेज और उनके दिखने की संख्या की सूची दिखेगी:

Update README.md     | 1,685,515
Initial commit       | 1,577,543
update               |   211,017
                     |   155,280
Create README.md     |   153,711
Add files via upload |   152,354
initial commit       |   145,224
first commit         |   110,314
Update index.html    |    91,893
Update README        |    88,862

9. कैश मेमोरी में सेव करना और आंकड़े

BigQuery, क्वेरी के नतीजों को कैश मेमोरी में सेव करता है. इस वजह से, बाद की क्वेरी को प्रोसेस होने में कम समय लगता है. क्वेरी के विकल्पों का इस्तेमाल करके, कैश मेमोरी को बंद किया जा सकता है. BigQuery, क्वेरी के बारे में भी आंकड़े ट्रैक करता है. जैसे, क्वेरी बनाने का समय, क्वेरी खत्म होने का समय, और प्रोसेस किए गए कुल बाइट.

इस चरण में, कैश मेमोरी की सुविधा बंद कर दी जाएगी. साथ ही, क्वेरी के बारे में आंकड़े भी दिखाए जाएंगे.

bigquery_demo फ़ोल्डर में मौजूद app.py फ़ाइल पर जाएं और कोड को इससे बदलें.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT subject AS subject, COUNT(*) AS num_duplicates
    FROM bigquery-public-data.github_repos.commits
    GROUP BY subject
    ORDER BY num_duplicates
    DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)

for row in results:
    subject = row['subject']
    num_duplicates = row['num_duplicates']
    print(f'{subject:<20} | {num_duplicates:>9,}')

print('-'*60)
print(f'Created: {results.created}')
print(f'Ended:   {results.ended}')
print(f'Bytes:   {results.total_bytes_processed:,}')

कोड के बारे में कुछ बातें ध्यान में रखें. सबसे पहले, QueryJobConfig को जोड़कर और use_query_cache को false पर सेट करके, कैश मेमोरी में सेव होने की सुविधा बंद की जाती है. दूसरा, आपने नौकरी के ऑब्जेक्ट से क्वेरी के बारे में आंकड़े ऐक्सेस किए.

Cloud Shell में वापस जाकर, ऐप्लिकेशन चलाएं:

python3 app.py

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

Update README.md     | 1,685,515
Initial commit       | 1,577,543
update               |   211,017
                     |   155,280
Create README.md     |   153,711
Add files via upload |   152,354
initial commit       |   145,224
first commit         |   110,314
Update index.html    |    91,893
Update README        |    88,862
------------------------------------------------------------
Created: 2020-04-03 13:30:08.801000+00:00
Ended:   2020-04-03 13:30:15.334000+00:00
Bytes:   2,868,251,894

10. BigQuery में डेटा लोड करना

अगर आपको अपने डेटा को क्वेरी करना है, तो आपको अपना डेटा BigQuery में लोड करना होगा. BigQuery में, कई सोर्स से डेटा लोड किया जा सकता है. जैसे, Cloud Storage, Google की अन्य सेवाएं, और पढ़ने लायक अन्य सोर्स. स्ट्रीमिंग इंसर्ट का इस्तेमाल करके, डेटा को स्ट्रीम भी किया जा सकता है. ज़्यादा जानकारी के लिए, BigQuery में डेटा लोड करना पेज देखें.

इस चरण में, Cloud Storage में सेव की गई JSON फ़ाइल को BigQuery टेबल में लोड किया जाएगा. JSON फ़ाइल, gs://cloud-samples-data/bigquery/us-states/us-states.json पर मौजूद है

अगर आपको JSON फ़ाइल के कॉन्टेंट के बारे में जानना है, तो Cloud Shell में इसे डाउनलोड करने के लिए, gsutil कमांड लाइन टूल का इस्तेमाल करें:

gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .

इसमें अमेरिका के राज्यों की सूची शामिल है. साथ ही, हर राज्य के लिए एक JSON दस्तावेज़ अलग लाइन में दिया गया है:

head us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr":  "AK"}
...

इस JSON फ़ाइल को BigQuery में लोड करने के लिए, bigquery_demo फ़ोल्डर में मौजूद app.py फ़ाइल पर जाएं और कोड को इससे बदलें.

from google.cloud import bigquery

client = bigquery.Client()

gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'

dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')

job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON

load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)

print('JSON file loaded to BigQuery')

एक या दो मिनट का समय निकालकर यह देखें कि कोड, JSON फ़ाइल को कैसे लोड करता है और डेटासेट में स्कीमा के साथ टेबल कैसे बनाता है.

Cloud Shell में वापस जाकर, ऐप्लिकेशन चलाएं:

python3 app.py

BigQuery में एक डेटासेट और एक टेबल बनाई जाती है.

डेटासेट बन गया है या नहीं, यह देखने के लिए BigQuery कंसोल पर जाएं. आपको एक नया डेटासेट और टेबल दिखेगी. अपना डेटा देखने के लिए, टेबल के 'झलक देखें' टैब पर स्विच करें:

8c7d2621820a5ac4.png

11. बधाई हो!

आपने Python के साथ BigQuery का इस्तेमाल करना सीख लिया है!

खाली करने के लिए जगह

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए:

  • Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
  • प्रोजेक्ट की सूची में, अपना प्रोजेक्ट चुनें. इसके बाद, मिटाएं पर क्लिक करें.
  • डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.

ज़्यादा जानें

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.